首页 > 代码库 > java-mybaits-00301-SqlMapConfig

java-mybaits-00301-SqlMapConfig

1、配置内容

mybatis的全局配置文件SqlMapConfig.xml,SqlMapConfig.xml中配置的内容和顺序如下:
  properties(属性)
  settings(全局配置参数)
  typeAliases(类型别名)
  typeHandlers(类型处理器)
  objectFactory(对象工厂)
  plugins(插件)
  environments(环境集合属性对象)
    environment(环境子属性对象)
    transactionManager(事务管理)
    dataSource(数据源)
  mappers(映射器)

 2、properties(属性)

 需求:
  将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。
  在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。
 
  将数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties。
 
  SqlMapConfig.xml可以引用java属性文件中的配置信息如下:
  在classpath下定义db.properties文件:
    jdbc.driver=com.mysql.jdbc.Driver    jdbc.url=jdbc:mysql://localhost:3306/mybatis    jdbc.username=root    jdbc.password=mysql
  SqlMapConfig.xml引用如下:
    <properties resource="db.properties"/>    <environments default="development">       <environment id="development">           <transactionManager type="JDBC"/>           <dataSource type="POOLED">              <property name="driver" value="${jdbc.driver}"/>              <property name="url" value="${jdbc.url}"/>              <property name="username" value="${jdbc.username}"/>              <property name="password" value="${jdbc.password}"/>           </dataSource>       </environment>    </environments>
注意: MyBatis 将按照下面的顺序来加载属性:
  • 在 properties 元素体内定义的属性首先被读取。
  • 然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
  • 最后读取parameterType传递的属性,它会覆盖已读取的同名属性。
 因此,通过parameterType传递的属性具有最高优先级,resource或 url 加载的属性次之,最低优先级的是 properties 元素体内定义的属性。
 
建议:
  不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
  在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

3、setting(配置)

mybatis全局配置参数,全局参数将会影响mybatis的运行行为。
  比如:开启二级缓存、开启延迟加载。。 
  自动会做性能的调优,不用额外再做。
   以下为基本配置:
Setting(设置)Description(描述)Valid Values(验证值组)Default(默认值)
cacheEnabled在全局范围内启用或禁用缓存配置任何映射器在此配置下。true | falseTRUE
lazyLoadingEnabled在全局范围内启用或禁用延迟加载。禁用时,所有协会将热加载。true | falseTRUE
aggressiveLazyLoading启用时,有延迟加载属性的对象将被完全加载后调用懒惰的任何属性。否则,每一个属性是按需加载。true | falseTRUE
multipleResultSetsEnabled允许或不允许从一个单独的语句(需要兼容的驱动程序)要返回多个结果集。true | falseTRUE
useColumnLabel使用列标签,而不是列名。在这方面,不同的驱动有不同的行为。参考驱动文档或测试两种方法来决定你的驱动程序的行为如何。true | falseTRUE
useGeneratedKeys允许JDBC支持生成的密钥。兼容的驱动程序是必需的。此设置强制生成的键被使用,如果设置为true,一些驱动会不兼容性,但仍然可以工作。true | falseFALSE
autoMappingBehavior指定MyBatis的应如何自动映射列到字段/属性。NONE自动映射。 PARTIAL只会自动映射结果没有嵌套结果映射定义里面。 FULL会自动映射的结果映射任何复杂的(包含嵌套或其他)。NONE, PARTIAL, FULLPARTIAL
defaultExecutorType配置默认执行人。SIMPLE执行人确实没有什么特别的。 REUSE执行器重用准备好的语句。 BATCH执行器重用语句和批处理更新。SIMPLE REUSE BATCHSIMPLE
defaultStatementTimeout设置驱动程序等待一个数据库响应的秒数。Any positive integerNot Set (null)
safeRowBoundsEnabled允许使用嵌套的语句RowBounds。true | falseFALSE
mapUnderscoreToCamelCase从经典的数据库列名A_COLUMN启用自动映射到骆驼标识的经典的Java属性名aColumn。true | falseFALSE
localCacheScopeMyBatis的使用本地缓存,以防止循环引用,并加快反复嵌套查询。默认情况下(SESSION)会话期间执行的所有查询缓存。如果localCacheScope=STATMENT本地会话将被用于语句的执行,只是没有将数据共享之间的两个不同的调用相同的SqlSession。SESSION | STATEMENTSESSION
dbcTypeForNull指定为空值时,没有特定的JDBC类型的参数的JDBC类型。有些驱动需要指定列的JDBC类型,但其他像NULL,VARCHAR或OTHER的工作与通用值。JdbcType enumeration. Most common are: NULL, VARCHAR and OTHEROTHER
lazyLoadTriggerMethods指定触发延迟加载的对象的方法。A method name list separated by commasequals,clone,hashCode,toString
defaultScriptingLanguage指定所使用的语言默认为动态SQL生成。A type alias or fully qualified class name.org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver
callSettersOnNulls指定如果setter方法??或地图的put方法时,将调用检索到的值是null。它是有用的,当你依靠Map.keySet()或null初始化。注意原语(如整型,布尔等)不会被设置为null。true | falseFALSE
logPrefix指定的前缀字串,MyBatis将会增加记录器的名称。Any StringNot set
logImpl指定MyBatis的日志实现使用。如果此设置是不存在的记录的实施将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGINGNot set
proxyFactory指定代理工具,MyBatis将会使用创建懒加载能力的对象。CGLIB | JAVASSIST 

4、typeAliases(类型别名)

在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。
   如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。

4.1、mybatis支持别名:

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

4.2、自定义别名:

  在SqlMapConfig.xml中配置:
<typeAliases>    <!-- 单个别名定义 -->    <typeAlias alias="user" type="cn.itcast.mybatis.po.User"/>    <!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->    <package name="cn.itcast.mybatis.po"/>    <package name="其它包"/></typeAliases>

5、typeHandlers(类型处理器)

  类型处理器用于java类型和jdbc类型映射,如下:
<select id="findUserById" parameterType="int" resultType="user">       select * from user where id = #{id}</select>
  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.sql)TIMESTAMP类型
SqlDateTypeHandlerDate(java.sql)DATE类型
SqlTimeTypeHandlerTime(java.sql)TIME类型
ObjectTypeHandler任意其他或未指定类型
EnumTypeHandlerEnumeration类型VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

6、mapppers(映射器)

Mapper配置的几种方法:

6.1  <mapper resource=" " />

使用相对于类路径的资源
如:<mapper resource="sqlmap/User.xml" />

6.2  <mapper url=" " />

使用完全限定路径
如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

6.3  <mapper class=" " />

使用mapper接口类路径
如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
按照上边的规范,将mapper.java和mapper.xml放在一个目录 ,且同名。 
技术分享
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

6.4  <package name=""/>【推荐】

注册指定包下的所有mapper接口
如:<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
    <mappers>        <!-- 自动映射所有 com.ds365.mybatis.mapper 下的接口 -->        <!-- 使用的是mapper代理方法 -->        <!-- 接口名==mapperxml文件名 -->        <!-- 接口和xml同目录 -->        <package name="com.ds365.mybatis.mapper" />    </mappers>

 

 

java-mybaits-00301-SqlMapConfig