Mabatis 框架

Ⅰ.关于Mabatis

  • 对数据库中的数据进行访问的框架

  • 数据库执行过程:

    连接数据库-->准备好SQL-->发送SQL语句-->执行语句-->获取结果-->关闭

1.Mabatis工程创建

  • 创建流程了解即可
1.创建maven项目
  • 可以更方便的管理依赖项(下载依赖项和关联依赖项)

  • 添加依赖

    框架 作用 依赖项
    mabatis 对数据库的数据进行访问的框架 mybatis
    mabatis-spring Mybatis整合Spring mabatis-spring
    spring 创建和管理对象 spring-context
    jdbc 创建和管理数据库编程 spring-jdbc
    mysql connector MySQL连接的依赖项 mysql-connector-java
    DBCP 数据库连接池的依赖项 commons-dbcp2
    junit 测试 junit-jupiter-api
2.配置Mabatis
  1. datasource.properties

    • 连接数据库的参数

      • url
      • driver
      • username
      • password
    • 使用mybatis时,配置SQL的XML文件的位置
      • classpath:mapper/AdminMapper.xml
  2. 配置类SpringConfig类

    1. @PropertySource(classpath:datasource.properties)

      • @PropertySource是Spring框架的注解,用于读取properties类型的配置文件,读取到的值将存入到Spring容器的Environment对象中
      • @Value注解是将Environment中对应的对象读出来
    2. 配制出一个数据源:Datasource

      1. 使框架连接数据库;

      2. 使用(DBCP2)的BasicDatasource(可换其它的source)设置datasource的值;

      3. 返回datasource的值会保存在Spring容器中,供随时调用;

    3. SqlSessionFactoryBean

      1. mabatis框架正常运行的前提:获取文件位置和数据源
      2. mabatis的强制要求配置
        1. datasource(是哪一个)
        2. MapperLocations(在哪儿)
    4. 配置MapperScan

      • 指定接口所在的根包
      • MapperScan("cn.tedu.mybatis.mapper")
      • 用于Mybatis处理数据的接口被Mybatis识别
  3. 创建数据库表字段对应的类例如:Admin

    1. implements Serializable序列化接口
    2. 私有属性private
    3. getter and setter
    4. equals() and hashcode()
    5. toString()
3.实现功能
  1. 写Mapper接口里边的抽象方法:(方法不允许重载)

    1. 定义抽象方法
  2. 返回值类型

    1. 增删改:返回int
    2. 查询:返回对应的结果只类型
    3. 参数:
    4. 参数超过一个需要添加@Param注解
    5. 参数太多,需要进行封装例如:Admin
  3. xml文件配置sql

    1. namespace接口:必须实现
    2. SQL语句
      1. 根据查询类型选取相应的节点
      2. id的值就是抽象方法的名称
      3. 获取自动编号的值:useGeneratedKeys="true" keyProperty="id"
  4. 建议:

    1. 不建议加分号

    2. 设计大于需求

  5. 查询

    1. 查询所使用的必须是select节点
    2. select节点必须配置resultType或resultMap中的一个
    3. resultType与resultMap
      1. resultType

        • 的值就是抽象方法的返回值类型的全限定名
      2. resultMap
        • 节点的作用:指导mybatis将查询到的结果集封装到对象中
        • id:自定义名称
        • type:封装查询结果的类型的全限定名
    4. -查询某1条记录
      1. 通过测试可以发现:当存在匹配的数据时,将可以查询到数据,当不存在匹配的数据时,将返回null

Ⅱ.动态sql

1.<foreach>节点:重要
  • 其它节点

    • //

Ⅲ.关联查询

1.RBAC
  • Role Based Access Control(基于角色的访问控制)

    • 经典的用户权限管理的设计思路

      • 用户、角色、权限将分配到各种角色上,
      • 用户可以关联某种角色,
      • 进而实现用户与权限相关
        • unsigned--无符号位(无负数)
        • comment(备注,注释)
2.<sql>节点封装(xml)
  1. 由于不建议使用星号表示字段列表,而关联查询时,由于涉及多张表,则字段列表可能较长,可以使用<sql>节点封装字段列表,并在编写SQL语句时,使用<include>节点进行引用

  2. 使用封装了查询的字段列表,与resultMap的相性更好,所以,在开发实践中,通常结合一起使用

  3. resultMap节点
    • resultMap节点的作用:指导mybatis将查询到的结果集封装到对象中

      • resultMap节点的id属性:自定义名称
      • resultMap节点的type属性:封装查询结果的类型的全限定名
      • 主键应该使用id节点进行配置,非主键、非集合的使用result节点进行配置

    1.result子节点

    • 主键应该使用id节点进行配置,非主键、非集合的使用result节点进行配置
    • column=结果集中的列名,property=属性名
    • 在关联查询中,即便结果集中的列名与类的属性名完全相同,也必须配置

    2.collection子节点

    • collection子节点:用于配置1对多关系的数据部分,通常在类中是List类型的属性
    • collection子节点的ofType:List集合中的元素的类型
  4. id节点作为主键具有唯一性

Ⅳ.小结

1.了解Spring框架的MYbatis工程
2.了解整合了Spring框架的Mybatis工程的配置
3.掌握声明抽象方法的原则
  • 返回值类型:

    • 增删改 返回int
    • 查询
      • 统计 int
      • 单条结果 返回可装下的数据类型
      • 多条结果
        • List
        • /String...
        • /String[]
  • 方法名称

    • 自定义,不重载
  • 参数列表

    • 根据需要执行的sql语句来设计

    • 当需要进行插入数据时,必须将参数进行封装

      • 建议配置获取自动ID:(设计大于需求)

        useGeneratedKeys="true" keyProperty="id"
    • 其它类型的操作

      • 参数较多,可以封装
      • 1个参数直接声明
      • 如果超过一个数量不多可以,在每个参数之前添加@Param注解
4.配置sql语句
  • 了解注解配置sql语句

    • @Insert/@Select...
  • 掌握xml配置sql语句

    • xml配置sql语句的优点

      • 更加直观,方便阅读
      • 易于长篇sql语句;
      • 利于分工合作
      • 易于更多复杂sql语句的实现(动态sql/关联查询...)
    1. XML文件需要顶部的特殊声明==

      • 网上下载/复制粘贴
    2. *根节点是<mapper>,且必须配置namespace--取值为对应的Java接口的全限定名
    3. 根据执行的sql语句来选择不同的//...节点,都必须配置id属性==>取值为对应的抽象方法的名称
    4. 插入数据时,当需要获取自动生成的主键值时,需要在节点上配置useGeneratedKeyskeyProperty属性
    5. <select>节点上,必须配置resultMap或者resultType属性中的一个
  • 掌握使用<sql>封装sql语句片段

    • 使用<include>进行引用,实现sql语句的复用
  • 掌握<resultMap>的配置方式

    • *主键列与属性的映射必须使用子节点配置

      • mabatis在处理id时,它会认为值必须是唯一的,

        如果连续读到了两条一样的数据,它会跳过第2条记录,

        它会认为它和第一条是一样的,它就不管了

    • 在一对多,多对多的查询中,集合类型的属性的映射必须使用<collection>子节点进行配置

    • 其他列与属性的映射使用<result> 子节点配置

    • 在单表的查询中,列与属性名一样,可以不必显示的配置

    • 在关联查询中,即使列与属性名一样,也必须显示的配置出来

  • 理解<resultType><resultMap>的使用原则

    • 尽可能的全部使用resultMap
    • 如果查询结果是单一的某一个数据类型(例如基本数据类型或字符串或某个时间等),则使用resultType
  • 掌握动态sql中的<foreach>的使用

  • 大概了解动态sql中的其他标签

最新文章

  1. D3中数据与DOM element绑定之data() enter() exit()浅析
  2. 用CAShapeLayer实现一个简单的饼状图(PieView)
  3. Javascript高级程序设计——基本包装类型
  4. 0060 Linux SELinux 管理命令
  5. 结队开发项目——基于Android的无线点餐系统——NABC模型
  6. JAVA基础之String基本操作
  7. 【转】ASP.NET网站怎么发布web项目程序和怎么部署
  8. PHP 魔术方法(所有的魔术方法)
  9. sql练习总结(一)
  10. freemarker之list和map
  11. UVa 750 - 8 Queens Chess Problem
  12. 24G的SSD有什么用
  13. Error: Invoke-customs are only supported starting with Android O (--min-api 26)
  14. vuex state使用
  15. DPDK- program_guide 2
  16. linux下怎样查看哪些进程占用swap空间
  17. Ng第十九课:总结(Conclusion)
  18. 生成输出 URL(16.2)
  19. 安装Windows Installer服务
  20. 项目冲刺Beta第三篇博客

热门文章

  1. C++实现矩阵类和向量类
  2. jQuery.extend()[$.extend()]
  3. pycham的安装、优化、使用
  4. 使用client-go实现自定义控制器
  5. 『现学现忘』Git基础 — 26、给Git命令设置别名
  6. CSS 不规则的轮廓-outline
  7. 超级简单!CentOS-8 安装 MySQL 8.0,比喝水还简单
  8. 496. Next Greater Element I - LeetCode
  9. 110_Power Pivot特殊结算日期及财年日期
  10. VS Code - Vim 插件自动切换输入法