微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【MyBatis框架】SqlMapConfig剖析

下面对sqlMapConfig.xml中的配置进行详细剖析。

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

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



1.properties定义

来看看我们之前的配置文件:
[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEconfiguration
  3. PUBLIC"-//mybatis.org//DTDConfig3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--和spring整合后environments配置将废除-->
  7. environmentsdefault="development" environmentid="development" <!--使用jdbc事务管理-->
  8. transactionManagertype="JDBC"/>
  9. <!--数据库连接池-->
  10. dataSourcetype="POOLED"propertyname="driver"value="org.gjt.mm.MysqL.Driver"/>
  11. propertyname="url"value="jdbc:MysqL://localhost:3306/mybatis?characterEncoding=utf-8"propertyname="username"value="root"propertyname="password"value="1234"</dataSourceenvironmentenvironments
  12. <!--加载映射文件-->
  13. mappersmapperresource="sqlmap/User.xml"mapperresource="mapper/UserMapper.xml">

我们只有environments和mappers标签中配置了东西,而且未来整合Spring的时候environments中的东西还有可能去掉,那么我们都在这里面配什么重要的东西呢?

我们先把数据库连接池的配置转移出去,单独建立一个文件
数据库连接参数单独配置在db.properties中,只需要在sqlMapConfig.xml中加载db.properties的属性值。
sqlMapConfig.xml中就不需要对数据库连接参数硬编码。

数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties:
[plain] copy
    jdbc.driver=org.gjt.mm.MysqL.Driver
  1. jdbc.url=jdbc:MysqL://localhost:3306/mybatis?characterEncoding=utf-8
  2. jdbc.username=root
  3. jdbc.password=1234
然后在sqlMapConfig.xml的environment中加载属性文件,并将相应属性加入到参数:
copy
    <!--加载属性文件-->
  1. propertiesresource="db.properties">properties<!--和spring整合后environments配置将废除-->
  2. <!--使用jdbc事务管理-->
  3. <!--数据库连接池-->
  4. propertyname="driver"value="${jdbc.driver}"propertyname="url"value="${jdbc.url}"propertyname="username"value="${jdbc.username}"propertyname="password"value="${jdbc.password}">

大家该有疑问了,在db.properties依旧还是硬编码呀?为什么还要把它折腾一遍写在db.properties中呢?原因是方便对运行的参数进行统一管理,其它的XML也可以引用这个配置文件,而且将来使用其他数据库,可以建立几个不同的properties属性文件,想引用那个就引用哪个。
还有一个原因,就是sqlMapConfig.xml文件配置的东西非常多,在集群环境下,有许多sqlMapConfig.xml文件,如果不把数据库连接池移出来,一个一个sqlMapConfig.xml文件更改数据库连接池参数的时候很麻烦,如果配置了db.properties,只需要改它自己就可以了。

在<properties>标签中可以在里面配置属性
copy
    propertyname=""value="">

properties特性:

注意:
MyBatis 将按照下面的顺序来加载属性
a.在 properties 元素体内定义的属性首先被读取。
b.然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性
c.最后读取parameterType传递的属性,它会覆盖已读取的同名属性


建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

2.settings全局参数配置

mybatis框架在运行时可以调整一些运行参数。
比如:开启二级缓存、开启延迟加载。。

全局参数将会影响mybatis的运行行为。

详细参见“学习资料/mybatis-settings.xlsx”文件

3.typeAliases(别名)重点

3.1需求
在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。

如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。

3.2mybatis支持别名(不用单独配置,直接写认别名就行)

别名 映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal


例子:
copy
    selectid="findUserByUsername"parameterType="java.lang.String"
  1. resultType="cn.edu.hpu.mybatis.PO.User" select*fromuserwhereusernamelike'%${value}%'
  2. select 改为
  3. selectid="findUserByUsername"parameterType="string"
  4. resultType="cn.edu.hpu.mybatis.PO.User" select*fromuserwhereusernamelike'%${value}%'
  5. >

3.3自定义别名
3.3.1单个别名定义
sqlMapConfig.xml中配置:
copy
    <!--别名定义-->
  1. typeAliases <!--针对单个别名定义
  2. type:类型的路径
  3. alias:别名--typeAliastype="cn.edu.hpu.mybatis.PO.User"alias="user">

在mapper.xml中使用别名
copy
    resultType="user">

测试成功,可以使用

3.3.2批量别名定义
在某些包下类比较多,使用上面的写法太冗余,使用批量定义,定义一整个包中的类的别名:
copy
    <!--批量定义别名
  1. 指定包名,mybatis自动扫描包中的PO类,自动定义别名,别名就是类名(首字母大写或小写)--packagename="cn.edu.hpu.mybatis.PO"copy
      >

    copy
      resultType="User">
    都可以,测试无误

    在平常开发中,批量别名定义最常用。

    4.typeHandlers(类型处理器)

    mybatis中通过typeHandlers完成jdbc类型和java类型的转换。

    通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义.

    mybatis支持类型处理器:

    类型处理器 java类 JDBC类型
    BooleanTypeHandlerBoolean,boolean任何兼容的布尔值
    ByteTypeHandlerByte,byte任何兼容的数字或字节类型
    ShortTypeHandlerShort,short任何兼容的数字或短整型
    IntegerTypeHandlerInteger,int任何兼容的数字和整型
    LongTypeHandlerLong,long任何兼容的数字或长整型
    FloatTypeHandlerFloat,float任何兼容的数字或单精度浮点型
    DoubleTypeHandlerDouble,double任何兼容的数字或双精度浮点型
    BigDecimalTypeHandlerBigDecimal任何兼容的数字或十进制小数类型
    StringTypeHandlerStringCHAR和VARCHAR类型
    ClobTypeHandlerStringCLOB和LONGVARCHAR类型
    NStringTypeHandlerStringNVARCHAR和NCHAR类型
    NClobTypeHandlerStringNCLOB类型
    ByteArrayTypeHandlerbyte[]任何兼容的字节流类型
    BlobTypeHandlerbyte[]BLOB和LONGVARBINARY类型
    DateTypeHandlerDate(java.util)TIMESTAMP类型
    DateOnlyTypeHandlerDate(java.util)DATE类型
    TimeOnlyTypeHandlerDate(java.util)TIME类型
    sqlTimestampTypeHandlerTimestamp(java.sqlTIMESTAMP类型
    sqlDateTypeHandlerDate(java.sqlDATE类型
    sqlTimeTypeHandlerTime(java.sqlTIME类型
    ObjectTypeHandler任意其他或未指定类型
    EnumTypeHandlerEnumeration类型VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。


    5.mappers(映射配置)
    5.1通过resource加载单个映射文件
    copy
      >

    5.2通过mapper接口加载单个mapper
    [java] copy
      <!--加载映射文件-->
    1. <mappers>
    2. <!--通过mapper接口加载映射文件
    3. 遵循一些规则:需要将mapper接口的类名和mapper.xml映射文件名称保持一致,且在一个目录中。
    4. 上面规范的前提是,使用的是mapper代理方法-->
    5. <mapperclass="cn.edu.hpu.mybatis.mapper.UserMapper"/>
    6. </mappers>

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

    5.3批量加载mapper(推荐使用)
    copy
      <!--批量加载mapper
    1. 指定mapper接口的报名,mybatis自动扫描包下所有mapper接口进行加载。
    2. 遵循一些规则:需要将mapper接口的类名和mapper.xml映射文件名称保持一致,且在一个目录中。
    3. 上面规范的前提是,使用的是mapper代理方法
    4. --packagename="cn.edu.hpu.mybatis.mapper">

    比较常用的就是批量加载mapper。

    原文地址:https://www.jb51.cc/xml/295019.html

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。