Mybatis总结:mybatis的配置详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis总结:mybatis的配置详解相关的知识,希望对你有一定的参考价值。
1.environments:它是配置mybatis当前工作的数据库环境的地方。
2. dataSource:表示的是数据源:至少会包括该链接数据库的各种信息。
dataSource的类型type属性可以配置成其内置类型之一,如UNPOOLED,POOLED,JNDI。
UNPOOLED:mybatis会为每一个数据库创建一个新的链接,使用完了并关闭,该方式只适用于只有小规模数量并发用户的简单应用程序上。
POOLED:mybatis会创建一个数据库连接池,连接池中的一个连接将会被用作数据库操作。一旦数据库操作完成,mybatis会将此连接返回给连接池。
JNDI:MyBatis从在应用服务器向配置好的JNDI数据源dataSource获取数据库连接。在生产环境中,优先考虑这种方式。(Web应用项目开发建议使用JNDI)。
- transactionManager元素 :事务管理器
MyBatis支持两种类型的事务管理器:JDBC 和 MANAGED.
- properties元素:用来定义配置文件中可以使用的变量名和变量值。
- typeAliases元素: 类型别名
<typeAliases>
<typeAlias type="com.zzuli.bean.Student" alias="Student" />
</typeAliases>
还有另外一种方式为JavaBeans起别名,使用注解 @Alias:
@Alias("stu")
public class Student{
....
}
@Alias注解将会覆盖配置文件中的<typeAliases>定义。
注意: @Alias 要和<package name=""/>标签配合使用,Mybatis会自动查看指定包内的类别名注解,如果没有这个注解,那么默认的别名就是类的名字
<!--<package name="com.briup.mappers"/> -->
- typeHandlers元素: 自定义类型处理器
<!-- 注册自定义类型处理器 -->
<typeHandlers>
<typeHandler handler="com.briup.handler.Phonehandler"/>
</typeHandlers>
处理器有两种:
Mybatis内置的类型处理器
自定义类型处理器
//自定义的类处理器
//泛型参数时用来指定需要
public class Phonehandler extends BaseTypeHandler<PhoneNumber>{
//告诉mybatis遇到PhoneNumber类型时,如何封装
@Override
public PhoneNumber getNullableResult(ResultSet rs, String name) throws SQLException {
// TODO Auto-generated method stub
return new PhoneNumber(rs.getString(name));
}
@Override
public PhoneNumber getNullableResult(ResultSet rs, int index) throws SQLException {
// TODO Auto-generated method stub
return new PhoneNumber(rs.getString(index));
}
@Override
public PhoneNumber getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
//告诉mybatis遇到PhoneNUMBER之后如何给PreparedStatement
@Override
public void setNonNullParameter(PreparedStatement pst, int index, PhoneNumber phone, JdbcType arg3) throws SQLException {
// TODO Auto-generated method stub
pst.setString(index, phone.getAsString());
}
}
- settings元素: 全局参数设置
- mappers元素: SQL映射
- 结果集映射 ResultMaps:
它是用来将select语句的结果集映射到java对象的属性中
简单的ResultMaps:
<resultMap id="StudentResult" type="com.zzuli.bean.Student">
<id property="studId" column="stud_id" /> //id代表主键
<result property="name" column="name" />
<result property="email" column="email" />
<result property="phone" column="phone" />
</resultMap>
id:代表主键,应该在此命名空间内是唯一的。
type:完全限定类名或者是返回类型的别名。
<result>子元素被用来将一个resultset列映射到对象的一个属性中。
resultType和resultMap两者之间的区别:
resultType和resultMap二者只能用其一,不能同时使用。
对应的接口中的方法,你写什么类型的集合,mybatis就会返回什么样的集合,但是要注意使用SortedSet的时候,Student类需要实现Comparable接口,否则不能进行排序的。
resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。
resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。
- association是关联的意思
元素<association>被用来导入“有一个”(has-one)类型的关联。
11.一对多,collection;
- 12. selectKey一对多;
13. 缓存
将从数据库中加载的数据缓存到内存中,是很多应用程序为了提高性能而采取的一贯做法。默认情况下,mybatis会启用一级缓存;即,如果你使用同一个SqlSession接口对象调用了相同的SELECT语句,则直接会从缓存中返回结果,而不是再查询一次数据库。注意:session调用commit或close方法后,一级缓存就会被清空
二级缓存: 在不同的session对象之间可以共享缓存数据
1.mybatis-config.xml文件中保证<setting name="cacheEnabled" value="true"/>设置中是缓存功能是开启的, 默认就是开启的true
2.在需要二级缓存的xml映射文件中,手动开启缓存功能,在根元素中加入一个标签即可:<cache/>
3.一个session查询完数据之后,需要调用commit或者close方法后,这个数据才会进入到缓存中,然后其他session就可以共享到这个缓存数据了
注意:默认情况下,被二级缓存保存的对象需要实现序列化接口,可以通过cache标签的readOnly属性进行设置
14. 使用RowBounds对结果集进行分页
以上是关于Mybatis总结:mybatis的配置详解的主要内容,如果未能解决你的问题,请参考以下文章