总结:Mybatis映射文件中常用的标签
Mybatis
一个持久层框架,支持动态定制sql、存储过程以及高级映射。
优点:避免了所有的jdbc代码和手动设置参数以及获取结果集。Mybatis可以使用简单的xml或者注解来配置和映射原生信息,将接口和java对象对象映射成数据库中的记录。
整合
(1)引入Mybatis依赖关系包,mybatis-xxxx.jar.
(2)配置SQLsessionFactory,引入标签。
(3)mybatis配置文件中主要需要的配置:
1>properties 属性信息配置。
2>setting 设置(这个Mybatis中比较重要的设置,因为他们的设置会改变mybatis的运行时行为)
<settings>
<!--全局设置 配置文件中所有映射配置的任何缓存信息的 开启或者关闭,默认true -->
<setting name="cacheEnabled" value="true"/>
<!--全局设置 延迟加载的开启或者关闭,局部特定关系可以通过fetchType属性来修改开启或者关闭状态,默认false -->
<setting name="lazyLoadingEnabled" value="true"/>
<!--设置 是否允许单一语句返回多结果集,默认true-->
<setting name="multipleResultSetsEnabled" value="true"/>
<!--设置 是否允许使用列表代表列名-->
<setting name="useColumnLabel" value="true"/>
<!--设置 允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作 默认false-->
<setting name="useGeneratedKeys" value="false"/>
<!--设置 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 默认PARTIAL-->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<!--设置 指定发现自动映射目标未知列(或者未知属性类型)的行为。
NONE: 不做任何反应
WARNING: 输出提醒日志 ('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN)
FAILING: 映射失败 (抛出 SqlSessionException)
默认NONE
-->
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<!--设置 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新 默认SIMPLE-->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!--设置 设置超时时间,它决定驱动等待数据库响应的秒数。 -->
<setting name="defaultStatementTimeout" value="25"/>
<!--设置为驱动的结果集获取数量(fetchSize)设置一个提示值。此参数只可以在查询设置中被覆盖。-->
<setting name="defaultFetchSize" value="100"/>
<!--设置 允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为false。 默认false-->
<setting name="safeRowBoundsEnabled" value="false"/>
<!--设置 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 默认false-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!--设置 MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 默认SESSION-->
<setting name="localCacheScope" value="SESSION"/>
<!--设置 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。默认OTHER -->
<setting name="jdbcTypeForNull" value="OTHER"/>
<!--设置 指定哪个对象的方法触发一次延迟加载。 -->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
主要总结一下映射文件中的标签(面试官比较爱问)
一般常见的mybatis映射文件中,出现的一级标签主要有如下几类:
【cache】:给定命名空间的缓存配置。
【cache-ref】:引用其他命名空间的缓存配置。
【resultMap】:描述如何从数据库结果集中来加载对象。
【sql】:定制SQL片段。id为唯一标识,使用“引入sql片段。”
【insert】:映射插入语句。
【update】:映射更新语句。
【delete】:映射删除语句。
【select】:映射查询语句。
【动态sql,主要由if、where、foreach、set等动态标签组成】
sql语句
SQL语句执行标签处,如果test中的表达式满足条件,那么则把标签里的sql语句拼接到正在执行的sql语句后面。
【注意】:这里提一下,如果有需要判断是否为空,不仅要判断null,也要判断空字符’’。
标签的特性:可以自动处理它后面跟着的第一个and语句。
范例(这里只是说明问题,sql随意编写,不要在意sql细节,理解where标签为关键):如下这个写法,如果不写where 1=1 的话,执行的时候是会报错的
<select id="findAllList" parameterType="int" resultType="List">
select * from sys_user s
<if test="USER_NAME!=null and USER_NAME !=''">
AND S.USER_NAME = #{USER_NAME}
</if>
</select>
如果不想写where1=1,那么就需要where标签,如下处理:
标签:
<!--
foreach:表示一个foreach循环。
collection:传入的集合参数的名称。
item:遍历集合后定义的参数名称。
open:动态拼接的SQL串头部分
close:动态拼接的SQL串尾部分
separator:遍历过程中拼接连接使用到的符号
-->
<select id="findAllUserList" parameterType="List" resultType="List">
select * from sys_user s
<where>
<if test="userNameList!=null and userNameList.size>0">
<foreach collection="userNameList" item="userName" open="And userName in (" close=")" separator=",">
#{userName}
</foreach>
</if>
</where>
</select>
标签:与where标签用法类似,set标签会去掉它后面第一个半角逗号。
详细手册:这里查找:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
上一篇: MyBatis——(5)MyBatis_映射配置文件_参数处理
下一篇: 第3章 Vue 基础精讲