MyBatis映射器的用法

MyBatis 是一款半自动的ORM 模型,它支持定制化 SQL、存储过程以及高级映射

为什学习MyBatis

  • MyBatis解决了jdbc 的问题
    • 1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

    • 2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
    • 3..向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型
    • 4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
    • MyBatis快速开始

 

  • MyBatis基础配置
    • 1.configuration 元 素:标识配置文件的起始,所有配置信息都存放在这里
    • 2. enviroments 元 素:配置数据库环境信息,注册数据源配置数据库事务
    • 3.properties 元素:配置属性的元素,可以在配置文件的上下文中使用该属性。
    • 4.typeAliases:(声明类在哪个包下,之后用哪个类就可以直接写那个类,不区分大小写)
    • 5.mappers 元 素:用来在MyBatis初始化的时候引入映射器。
  • 动态代理
    • 1. 接口方法名要和 sqlmapper 的id名一样 能找到要执行的sql语句
    • 2. 接口返回值的类型 要和 sqlmapper中 resultType 类型要一致(每个元素的类型)
    • 3. 接口中入参的类型 要和 sqlmapper 中 parameterType类型要一致
    • 4.sqlmapper中的namescpace 的值要和 接口的类路径要一致
    • 5. 接口要和sqlmapper 放在同一个包下
    • 6. 接口的名字 要和 sqlmapper 文件名要一致

 MyBatis映射器分为语句映射和关系映射

1.SQL语句映射

  • 1.select
    • 1.属性
      • 1.id:唯一标识,接口中的方法名
        • ··

          • ·
      • 2.parameterType:参数的类型(如果要传入多个参可以使用Map集合或者在对象中加入属性,入参类型:当前类的类型)
      • 3.resultType:结果的类型(可以返回引用数据类型、也可以是map集合)
      • 4.resultMap :复杂的结果集映射关系
      • 5.Mybatis底层不支持方法重载
      • 6..Mybatis传参只能传一个
  • 2.insert
    • 1.新增数据时需要获取刚刚新增的数据的ID,就需要用到Mybatis的主键回填(由于数据库的隔离级别默认是可重复读(幻读)会导致达到的结果不是自己想要的)
    • 1keyProperty(回填的类中的属性作为主键)
    • 2.keyColumn (数据库中的表的字段作为主键)
    • 3.useGeneratedKeys:是否启用主键回填(默认为false)
    • 4.keyProperty和keyColumn不能同时使用
  • 3.update(跟之前一样)
  • 4.delete(跟之前一样)

2.关系映射

  • 1.sql
  • 2.parameterMap(入参的映射)不使用:(字段和类型的映射,定义时都写好了)
  • 3.resultMap(返回结果的映射)
    • 1.当字段名和属性名不一致时(1.可以通过起别名来解决 2.也课以通过resultMap来自定义映射来解决)
    • 2.自定义resultMap(单表的查询)
      •  
        • 1.id是用来标识主键的(一个resultMap只能有一个id,id也可以用result来代替)
        • 2.<resultMap type="Master" id="m">:类型就是要映射的类名,id可以随便起名(不能重复)
        • 3.<result column="sm_name" property="name"/>可以有多个
          • column:字段名
          • property:类的属性名
        • 4.如果是单表查询字段和类的属性名一样的可以不用写
    • 3.一对一表的查询
      • 1.每个字段都必须映射
      • 2.标签:<association property="bj">(association一对一映射的标签)property="bj"要映射的类型(以班级为例将班级作为学生属性传进去)bj就是班级作为学生属性的名字
    • 4.一对多表的查询
      • 1.每个字段都必须映射
      • 2.标签: <collection property="slist" ofType="Student" > (collection property就是班级类中学生集合的名字,ofType指定是什么类型的)
    • 5.级联的缺陷(多张表的联查)
      • 1.性能缺陷:级联操作会降低性能增加程序的执行时间;
      • 2.复杂度缺陷关联较多造成复杂度的增加,不利于他人的理解和维护
      • 3.根据实际情况增加级联关系,建议超过3层关联时尽量少用级联

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值