mybatis总配置文件
一.properties属性的用法
- 用来加载配置文件,在后面可以使用 ${配置文件中某个键}即可获得对应键的值
- 如:${jdbc.driver} 可以获得配置文件中的com.mysql.jdbc.Driver
优先级:(注意:这是一个容易错的点)
- 1.先执行
<property name="username" value="xx"/>
得 username=xx - 2.再执行db.properties里面的username=root得 username=root
- 3.实体类中有username属性,测试类中调用user.setName(“张三”);得 username=张三
测试时若没有输入user.setName(“张三”);最后执行就会出错,因为这时username=root - 4.总结:不要使用相同的名字,例如
1.db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybase1
jdbc.username=root
//username=root
jdbc.password=root123
2.UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
url:用来加载网络上或者磁盘上的一个配置文件,url="c://xx/properties"
resource:可以加载外部的配置文件,resource="db.properties"
-->
<properties resource="db.properties">
<!-- <property name="username" value="xx"/> -->
</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}"/>
<!-- <property name="username" value="${username}"/> -->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
二.settings全局配置参数的用法
- cacheEnabled:缓存
(true | false) 默认为true[支持缓存] - lazyLoadingEnabled:懒加载
(true | false) 默认为true[支持懒加载] - useGeneratedKeys:主键生成策略
(true | false) 默认为false - defaultExecutorType:默认的执行器类型
(REUSE BATCH SIMPLE) 默认为SIMPLE - defaultStatementTimeout:默认statement超时
(Any positive integer) 默认为Not Set (null) - jdbcTypeForNull:Jdbc类型映射
JdbcType enumeration.Most common are: NULL,VARCHAR and OTHER 默认为OTHER - proxyFactory:代理工厂
(CGLIB | JAVASSIST[mybatis包提供的代理机制]) 默认为CGLIB
<!-- 可以在mybatis-config.xml里面进行如下配置,一般可以不配置,默认的配置已经够用了 -->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
三.typeAliases类型别名的用法
最好不用,因为不能见名知意,还是在UserMapper使用包名+类名来配置
对单个的pojo类起一个别名
<!--
可以在mybatis-config.xml里面进行如下配置,
将com.jp.pojo.User类型起一个别名u
-->
<typeAliases>
<typeAlias type="com.jp.pojo.User" alias="u"/>
</typeAliases>
<!--
可以在UserMapper.xml里面
resultType="com.jp.pojo.User" 就可以写成 resultType="u"
-->
<select id="getUserById" resultType="u" parameterType="int">
select id,username as name,sex,address,birthday from user1 where id = #{id}
</select>
对多个的pojo类起一个别名
<typeAliases>
<!--
扫描指定的包,为该包下所有的类起别名
别名为类的字母小写或者类名本身
假设com.jp.pojo里面有一个User类,则会为它起别名为User或user
-->
<package name="com.jp.pojo"/>
</typeAliases>
<!--
可以在UserMapper.xml里面
resultType="com.jp.pojo.User" 就可以写成 resultType="user"或者resultType="User"
-->
<select id="getUserById" resultType="User" parameterType="int">
select id,username as name,sex,address,birthday from user1 where id = #{id}
</select>
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 object Object map Map hashmap HashMap
list List arraylist ArrayList collection Collection iterator Iterator
四.typeHandler类型处理器的用法
例如StringTypeHandler,使用占位符#{sex},会将java中java.lang.String类型和mysq里面char和varchar类型进行了对应匹配
五.Mappers加载sql配置文件
1.接口与sql的xml文件不在同一个包下
<mappers>
<!--
resource里面为sql配置文件的名称,一般是xxMapper.xml的形式
用来加载自己写的一个写sql语句的xml配置文件
-->
<mapper resource="User.xml"/>
<mapper resource="UserMapper.xml"/>
</mappers>
2.接口与sql的xml文件在同一个包下
<mappers>
<!--
class里面为UserMapper接口类的全限定名
注意:必须接口和sql配置文件同名,并且在同一个包下
-->
<mapper class="com.jp.mapper.UserMapper"/>
</mappers>
注:如果接口与sql的xml文件不在同一个包下,会报下列异常,找不到UserMapper.getUserById
因为Mybatis会拿着getUserById方法去UserMapper.xml文件找与getUserById同名的id
但是由于接口与sql的xml文件不在同一个包下就找不到
3.接口与sql的xml文件在同一个包下,并且需要配置多个接口
<mappers>
<!--
必须接口和sql配置文件同名,并且在同一个包下
mapper.java和mapper.xml文件同名,并且在同一个包下
-->
<mapper class="com.jp.mapper"/>
</mappers>