Mybatis学习(SqlMapConfig.xml)

mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:

properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)

properties属性

需求:
将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。
在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。
将数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties。


10.png

在sqlMapConfig.xml加载属性文件:


Mybatis学习(SqlMapConfig.xml)_第1张图片
1.png

properties特性:
注意: MyBatis 将按照下面的顺序来加载属性:
 在 properties 元素体内定义的属性首先被读取。
 然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
 最后读取parameterType传递的属性,它会覆盖已读取的同名属性。
建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

settings全局参数配置

mybatis框架在运行时可以调整一些运行参数。
比如:开启二级缓存、开启延迟加载。。
全局参数将会影响mybatis的运行行为。

typeAliases(别名)重点
  1. 需求
    在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。
    如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。
  2. mybatis默认支持别名
    别名 映射的类型
    _byte byte
    _long long
    _short short
    _int int
    _integer int
    _double double
    _float float
    _boolean boolean
    string String
    byte Byte
    long Long
    short Short
    int Integer
    integer Integer
    double Double
    float Float
    boolean Boolean
    date Date
    decimal BigDecimal
    bigdecimal BigDecimal
  3. 自定义别名
    (1)单个别名定义


    Mybatis学习(SqlMapConfig.xml)_第2张图片
    2.png

    引用别名:


    3.png

    (2)批量定义别名(常用)
    4.png
  4. typeHandlers(类型处理器)
    mybatis中通过typeHandlers完成jdbc类型和java类型的转换。
    通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义.
  5. mappers(映射配置)
    (1)通过resource加载单个映射文件


    5.png

    (2)通过mapper接口加载单个mapper


    Mybatis学习(SqlMapConfig.xml)_第3张图片
    6.png

    按照上边的规范,将mapper.java和mapper.xml放在一个目录 ,且同名。
    7.png

    (3)批量加载mapper(推荐使用)
    Mybatis学习(SqlMapConfig.xml)_第4张图片
    8.png
  6. 输入映射
    通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。
    6.1 传递pojo的包装对象
    6.1.1 需求
    完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)
    6.1.2 定义包装类型pojo
    针对上边需求,建议使用自定义的包装类型的pojo。
    在包装类型的pojo中将复杂的查询条件包装进去。


    Mybatis学习(SqlMapConfig.xml)_第5张图片
    1.png

    6.1.3mapper.xml
    在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。


    Mybatis学习(SqlMapConfig.xml)_第6张图片
    2.png

    6.1.4 mapper.java
    3.png

    6.1.5 测试代码
    Mybatis学习(SqlMapConfig.xml)_第7张图片
    4.png
  7. 输出映射
    7.1 resultType
    使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
    如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。
    只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
    7.1.1 输出简单类型
    7.1.1.1 需求
    用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。
    7.1.1.2 mapper.xml


    5.png

    7.1.1.3 mapper.java


    6.png

    7.1.1.4 测试代码
    Mybatis学习(SqlMapConfig.xml)_第8张图片
    7.png

    7.1.2 输出pojo对象和pojo列表
    不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。
    在mapper.java指定的方法返回值类型不一样:
    1、输出单个pojo对象,方法返回值是单个对象类型
    1.png

    2、输出pojo对象list,方法返回值是List
    2.png

    生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 ).

    7.2 ResultMap
    mybatis中使用resultMap完成高级输出结果映射。
    7.2.1 resultMap使用方法
    如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
    1、定义resultMap
    2、使用resultMap作为statement的输出映射类型
    7.2.2 将下边的sql使用User完成映射
    SELECT id id_,username username_ FROM USER WHERE id=#{value}
    User类中属性名和上边查询列名不一致。
    7.2.2.1 定义reusltMap


    Mybatis学习(SqlMapConfig.xml)_第9张图片
    3.png

    7.2.2.2 使用resultMap作为statement的输出映射类型
    Mybatis学习(SqlMapConfig.xml)_第10张图片
    4.png

    7.2.2.3 mapper.java
    5.png

    7.2.2.4 测试
    Mybatis学习(SqlMapConfig.xml)_第11张图片
    6.png

    7.3 小结
    使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
    如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
    8.1 什么是动态sql
    mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
    8.2 需求
    用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。
    对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。
    8.3 mapper.xml
    Mybatis学习(SqlMapConfig.xml)_第12张图片
    7.png

    Mybatis学习(SqlMapConfig.xml)_第13张图片
    8.png

    8.4 测试代码
    Mybatis学习(SqlMapConfig.xml)_第14张图片
    9.png

    8.5 sql片段
    8.5.1 需求
    将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。
    方便程序员进行开发。

    8.5.2 定义sql片段


    Mybatis学习(SqlMapConfig.xml)_第15张图片
    10.png

    8.5.3 引用sql片段
    在mapper.xml中定义的statement中引用sql片段:
    Mybatis学习(SqlMapConfig.xml)_第16张图片
    11.png
Mybatis学习(SqlMapConfig.xml)_第17张图片
12.png

8.1 foreach
向sql传递数组或List,mybatis使用foreach解析
8.1.1 需求
在用户查询列表和查询总数的statement中增加多个id输入查询。
sql语句如下:
两种方法:
SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
SELECT * FROM USER WHERE id IN(1,10,16)
8.1.2 在输入参数类型中添加List ids传入多个id


1.png

8.1.3 修改mapper.xml
WHERE id=1 OR id=10 OR id=16
在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。


Mybatis学习(SqlMapConfig.xml)_第18张图片
2.png

8.1.4 测试代码
Mybatis学习(SqlMapConfig.xml)_第19张图片
3.png

8.1.5 另外一个sql的实现:
Mybatis学习(SqlMapConfig.xml)_第20张图片
4.png

你可能感兴趣的:(Mybatis学习(SqlMapConfig.xml))