select
点击查看代码
<select id="selectPerson"
parameterType="int"
parameterMap="deprecated"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY"
databaseId="mysql"
resultOrdered="false"
resultSets="xxx,xxx"
lang="">
parameterType
可选标签。参数类的完全限定名或别名,上面示例中的表示我们传入的参数是一个String类型(关于别名如果不清楚的可以点击这里)。如果不写这个属性的话,MyBatis在解析xml文件的时候会默认设为unset,然后根据TypeHandler推断出参数类型。如果有多个参数的情况下建议还是不写这个参数,否则可能会出现参数类型转换错误
resultType
非必选标签。
注意这里的非选是因为resultType和resultMap不能并存,两者能且只能选择一个。主要是用来定义一个返回结果集对象的全限定名或者别名。如果接收参数是一个集合,那么这里定义的就是集合中可以包含的类型,而并不是集合本身。
resultMap
非必选标签。
注意这里的非选是因为resultType和resultMap不能并存,两者能且只能选择一个。resultMap类型的结果集映射,是MyBatis最强大的特性,在这里我们不展开,过两天会有一篇单独介绍MyBatis一对一和一对多等复杂查询时候会单独介绍该属性。
insert
点击查看代码
<insert
id="insertLwUser"
parameterType="lwUser"
parameterMap="deprecated"
flushCache="true"
statementType="PREPARED"
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout="20"
databaseId="mysql"
lang="">
update
delete
sql,include
这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。
点击查看代码
<select id="selectUserAddress" resultType="com.lonelyWolf.mybatis.model.UserAddress">
select <include refid="myCloumn"></include> from lw_user_address
</select>
<sql id="myCloumn" >
id,address
</sql>
cache
MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。但是默认情况下只开启了一级缓存,即局部的session缓存,如果想要开启二级缓存。那么就需要使用到cache标签
点击查看代码
<cache
type="com.lonelyWolf.xxx"
eviction="FIFO"
flushInterval="60000"
readOnly="true"
size="512"/>
type
如果说我们自己自定义了缓存,那么这里可以配置自定义缓存类的全限定名或者别名,如果没有自定义缓存,则不需要配置type属性。
eviction
缓存回收策略,MyBatis中more提供了以下策略可以选择:
LRU:最近最少使用算法(默认算法)。移除最长时间不被使用的对象
FIFO:先进先出算法。按对象进入缓存的顺序来移除它们
SOFT:软引用。移除基于垃圾回收器状态和软引用规则的对象。
WEAK:弱引用。更积极地移除基于垃圾收集器状态和弱引用规则的对象
flushInterval
刷新间隔时间(单位是毫秒)。可以被设置为任意的正整数。默认情况是不设置,也就是不会主动刷新缓存(只有等待sql被执行的时候才会被刷新)。
readOnly
是否只读。属性可以被设置为 true 或 false。如果设置为true,那么只读的缓存会给所有调用者返回缓存对象的相同示例,因为缓存无法被修改。这在一定程度上可以提升性能。
默认是false,也就是可以修改缓存,那么当读取缓存的时候会通过序列化的方式返回缓存对象的拷贝,虽然这么做会慢一点,但是安全,因此默认才会设置为false,允许修改缓存。
if和where
点击查看代码
<sql id="hhh">select *from t_user</sql>
<select id="queryUserByUnameAndPwd resultType="User">
<include refid="hhh"/>
<where>
<if test="username!=null">
and username = #{username}
</if>
<if test="password!=null">
and password = #{password}
</if>
</where>
</select>
if和set
点击查看代码
<update id="updateUser" parameterType="User">
update t_user
<set>
<if test="password!=null">
password = #{password},
</if>
<if test="username!=null">
username=#{username}
</if>
where id = #{id}
</update>
trim
点击查看代码
<select id="queryUserById2" resultType="User">
<include refid="user_fired"/>
<!--prefix=“where" 给拼接的sql语句加前缀,前缀为where,
prefixOverrides="or|and" where子句中如果以or或者and开头,会被覆盖-->
<trim prefix="where" prefixOverrides="or|and">
<if test="username!=null">
username = #{username}
</if>
<if test="gender!=null">
and gender = #{gender}
</if>
</trim>
</select>
<update id="updateUserById" parameterType="User">
update t_user
<!--prefix=“set" 给拼接的sql语句加前缀,前缀为set,
suffixOverrides=","自动将最后一个逗号删除-->
<trim prefix="set" suffixOverrides=",">
<if test="username!=null">
username = #{username},
</if>
<if test="gender!=null">
gender = #{gender},
</if>
</trim>
where id = #{id}
</update>
foreach
<insert id="insertUsers" parameterType="java.util.List">
insert into t_user values
<foreach collection="list" open="" close="" separator="," item="u">
(null,#{u.username},#{u.password},#{u.gender},#{u.registTime})
</foreach>
</insert>
choose和when和otherwise
点击查看代码
<select id="findUser" resultType="User">
select *from t_user where id = #{id}
<choose>
<when test="username!=null">
AND username like #{username}
</when>
<when test="password!=null">
AND password = #{password}
</when>
<otherwise>
AND gender = 1
</otherwise>
</choose>
</select>
bind
点击查看代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.how2java.pojo">
<!-- 本来的模糊查询方式 -->
<!-- <select id="listProduct" resultType="Product"> -->
<!-- select * from product_ where name like concat('%',#{0},'%') -->
<!-- </select> -->
<select id="listProduct" resultType="Product">
<bind name="likename" value="'%' + name + '%'" />
select * from product_ where name like #{likename}
</select>
</mapper>