我所知的Mybatis02————SqlMapConfig属性配置研究
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>
</configuration>
全部写在<configuration>中,听说该配置文件的中属性的存放是有顺序的,没有办法随意的乱放,因为以后和spring整合,所以没注意也不用注意,配置顺序是
<properties> |
加载属性文件 |
<settings> |
设置全局参数 |
<typeAliases> |
设置类型的别名 |
<typeHandlers> |
设置类型处理器 |
<objectFactory> |
设置对象工厂 |
<objectWrapperFactory> |
不知道 |
<reflectorFactory> |
没用过 |
<plugins> |
设置插件 |
<environments> |
环境信息集合 |
<databaseIdProvider> |
多数据库支持 |
<mappers> |
配置映射文件 |
1. properties加载属性文件(被spring整合后就不用写了)
可以将数据库连接参数单独配在db.properties(file类型)文件中,然后在SqlMapConfig.xml中加载db.properties的属性值,这样可以随时变数据库地址而不用改变代码
例:db.properties:db.driver = com.mysql.jdbc.Driver xml:<property name="driverClass" value="${db.driver}"></property>
========================================================================================================================================
2. settings全局参数配置
settings里也有很多属性,最常用的是开启二级缓存和延迟加载
延迟加载:延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。Mybatis默认是不开启延迟加载功能的,我们需要手动开启。
<!-- 配置延迟加载 -->
<settings>
<setting name="lazyLoadingEnabled" value="true"/> //全局性设置懒加载。如果设false,则所有相关联的都会被初始化加载。默认为true
<setting name="aggressiveLazyLoading" value="false"/> //积极的懒加载,false的话按需加载
</settings>
关于延迟加载的个人理解:比如有一个User和一个Order(主要查Order信息),有时需要两者关联查询的信息,有时只需要Order的信息,在不需要查User信息的时候就可以不连带着一起查,提示数据库查询效率。
<!-- 配置二级缓存 -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
注:1、一级缓存是SqlSession级别的缓存。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。Mybatis默认开启一级缓存。
2、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
3、缓存原理:在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。
例:查询id为1的用户——数据库查询并生成缓存;再次查询id为1的用户——不走数据库从缓存中提取;进行增删改操作——清空缓存防止脏读;
4、在需要开启二级缓存的Mapper映射xml文件中配置:<cache/>
5、禁用当前select语句的二级缓存:userCache=false。例<select id="findUserById" parameterType="int" resultType="com.aishang.domain.User" useCache="false">
6、刷新(清空)二级缓存:flushCache=true。默认select语句是flase,insert/update/delete语句默认是true
========================================================================================================================================
3. typeAiases别名
单个定义别名:type——路径 alias——自己手动定义的别名
<typeAliases><typeAlias type="com.aishang.domain.User" alias="user"/></typeAliases>
批量配置别名:扫描该路径下的包,自动根据类名配置别名
<typeAliases>
<package name="com.aishang.domain"/>
<package name="其它包"/>
</typeAliases>
UserMapper.xml引用别名:
<select id="findUserById" parameterType="int" resultType="user" >
select * from tb_user where id=#{id}
</select>
如果不配置别名,resultType就要写全称:resultType="com.aishang.domain.User"
========================================================================================================================================
4:mappers映射配置
<!-- 加载映射文件 -->
<mappers>
<!--通过resource方法一次加载一个映射文件 -->
<mapper resource="User.xml"/>
<!-- 通过mapper接口加载单个映射配置文件遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;-->
<mapper class="com.mybatis.mapper.UserMapper"/>
<!-- 批量加载映射配置文件,需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;-->
<package name="com.mybatis.mapper"/>
</mappers>
主要属性是以上这些,其余的属性似乎是默认的最优配置,所以不需要手动配置,大概……