Mybatis笔记

Mybatis

  • 原始 jdbc 操作分析
    1. 问题:
      1. 数据库连接创建、释放资源造成系统浪费从而影响系统性能
      2. sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql变动需要改变代码
      3. 查询操作时,需要手动将结果集中的数据手动封装到实体中,插入操作时,需要手动将实体的数据设置到 sql 语句的占位符位置
    2. 解决方案
      1. 使用数据库连接池初始化连接资源
      2. 将 sql 语句抽取到 xml 配置文件中
      3. 使用反射、内省等底层技术,自动将实体与表进行熟悉你个与字段的自动映射
  1. 快速入门

    1. 添加坐标

    2. 创建 user 数据表

    3. 编写 user 实体类

    4. 编写映射文件 UserMapper.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      • 配置mapper
      • 在这里插入图片描述
    5. 编写核心文件 SqlMapConfig.xml

      <?xml version="1.0" encoding="UTF-8"?>
      • 在这里插入图片描述
    6. 编写测试类

      • 在这里插入图片描述
  2. 映射文件概述

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 在这里插入图片描述

  3. 增删改查

    1. 映射文件中使用 parameterType 属性指定要插入的数据类型
      1. 如果类型为java.lang.String等 sql语句中使用 #{任意字符串}
    2. sql 语句使用 #{user.username} 引用实体中的属性值
    3. 涉及数据库数据变化,需要提交事务
  4. 核心配置文件概述

    • 在这里插入图片描述
    1. configuration 配置
      • properties 标签:引入外部properties文件
      • settings 设置
      • typeAlisaes :设置类型别名
      • typeHandlers 配置自定义类型处理器
        • 开发步骤:
          1. 定义转换类继承类 BaseTypeHandler
          2. setNonNullParameter 将 java 类型转换成数据库需要的类型
          3. getNullableResult 将数据库中类型转换成java类型
            • String参数 要转换的字段名称
            • ResultSet:查询出的结果集
          4. MyBatis 核心配置文件中进行注册
      • objectFactory 对象工厂
      • plugins 配置 Mybatis 插件
        • 分页助手 PageHelper 是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
        • 开发步骤:
          1. 导入通用

            • com.github.pagehelper pagehelper 3.7.5 (必须!)
            • com.github.pagehelper jsqlparser 0.9.1 (必须!)
          2. mybatis核心配置文件配置PageHelper插件

            1. 在这里插入图片描述
          3. 设置分页相关参数 当前页+每页显示的条数

            • PageHelper.startPage(1,2);
          4. 获得与分页相关的参数 上下页等

            • PageInfo pageInfo = new PageInfo(userList);
      • environments 数据源环境配置标签
        • transactionManager 事务管理器
          • JDBC:直接使用JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务作用域
          • MANAGED
        • dataSource 数据源
          • UNPOOLED:数据源的实现只是每次被请求时打开和关闭连接
          • POOLED:数据源的实现利用“池”的概念讲JDBC连接对象组织起来
          • JNDI:
      • databaseIdProvider 数据库厂商标识
      • mappers 映射器
        • 加载映射配置
  5. 相应API

    1. SqlSessionFactory 工厂构建器 SqlSessionFactoryBuilder
    2. SqlSessionFactory 有多个方法创建 SqlSession 实例,常用两个
      • openSession():默认开启一个事务,事务不会自动提交
      • openSession(boolean autoCommit):参数为是否自动提交
    3. SqlSession 会话对象
Mybatis 的 Dao 层实现
  1. 代理开发方式
    • 规范:
      1. Mapper.xml 文件中的 namespace与mapper接口的全限定名相同
      2. Mapper 接口方法名和Mapper.xml 中定义的每个 statement 的id 相同
      3. Mapper 接口方法的输入参数类型和 mapper.xml中定义的每个sql的parameterType的类型相同
      4. Mapper 接口方法的输出参数类型和 mapper.xml中定义的每个 sql的resultType的类型相同
    • 使用 sqlSession.getMapper(UserMapper.class)
  2. 动态 sql
    1. select * from users where…

      • 在这里插入图片描述
    2. select * from users where…in …

      • 在这里插入图片描述
    3. sql 语句抽取

      • include使用
  • 总结
    • Mybatis 映射文件配置
      1. 查询
      2. 插入
      3. 修改
      4. 删除
      5. where条件
      6. if判断
      7. 循环
      8. sql片段抽取
多表查询
  1. 一对一(即封装的对象User):可以手动指定字段和实体之间关系 哪个字段是哪个实体的

    • 返回值 resultMap
    • 配置 resultMap
    • * property:当前实体 * javaType:当前实体中的属性的类型
    • 在这里插入图片描述
  2. 一对多(即封住的list集合 list):

    • 返回值 resultMap
    • 配置 resultMap + collection
    • * property:集合名称 * ofType:集合中的数据类型
    • 在这里插入图片描述
  3. 多对多

    • 返回值 resultMap
    • 配置 resultMap + collection
    • 配置操作相当于上面的结合
    • 在这里插入图片描述

Mybatis 注解开发

  • 常用注解
    • Insert:添加
    • Update:修改
    • Delete:删除
    • Select:查询
    • Result:结果集封装
    • Results:与@Result一起使用,封装多个对象
    • One:一对一结果集封装
    • Many:一对多结果集封装
  • 简单使用:
    1. Mapper类上 @XXX(sql语句)
    2. SqlMapConfig 加载映射关系(Mappers package)
      • 在这里插入图片描述
  1. 复杂映射开发
    • @Results:代替该注解中可以使用单个@Result注解,也可以使用@Result集合
      • 格式:@Results({ @Result(),@Reuslt() }) 或 @Results(@Result())
    • @Result:代替 标签 和 标签
      • column:数据库的列名
      • property:需要装配的属性名
      • one:需要使用的@One 注解( @Result(one = @One) )
      • many:需要使用的@Many注解(@Result(many = @Many))
    • @One(一对一):代替标签,用来指定子查询返回单一对象
      • select:指定用来多表查询中的 sqlmapper
      • 使用格式:@Result(column="",property="",one=@One(select=""))
    • @Many(一对多):代替标签,用来指定子查询返回对象集合
      • 使用格式:@Result(property="",column="",many=@Many(select=""))
    1. 一对一查询

      • 在这里插入图片描述

      • 在这里插入图片描述

    2. 一对多查询

      • 在这里插入图片描述
    3. 多对多:

      • 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值