MyBatis分页
内存分页
MyBatis提供了RowBounds类实现内存分页功能。其原理是首先根据sql语句查询出全部结果集,然后再根据RowBounds对象设置的参数截取子结果集返回。因此只适用于数据量较小的环境。
使用步骤:
在Dao接口定义分页查询方法,传入RowBounds对象参数
public List<User> selectAll(RowBounds rowBounds);
在sql语句中不用对rowBounds任何操作。mybatis的拦截器自动操作rowBounds进行分页。
调用方法,获取查询结果
List<User> users = userDao.selectAll(new RowBounds(0,3));
第1个参数为起始索引,第2个参数为返回记录数
物理分页
在Dao接口定义分页查询方法
public List<User> selectAll(int offset, int limit);
编写分页查询语句
<select id="selectAll" parameterType="int" resultType="User">
SELECT * FROM
(
SELECT ROWNUM AS NO,T1.* FROM
(
SELECT * FROM USERS ORDER BY ID
)T1
)T2
WHERE NO>=${param1} AND ${param1} + ${param2} > NO
</select>
MyBatis动态标签
if标签
<select id="selectBy" parameterType="com.model.UserQuery"
resultType="User">
SELECT * FROM USERS WHERE 1=1
<if test="name!=null">
AND NAME LIKE '%'||#{name}||'%'
</if>
<if test="minAge!=null">
AND AGE >= ${minAge}
</if>
<if test="maxAge!=null">
AND ${maxAge}>=AGE
</if>
</select>
trim标签
trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀;可以把包含内容的首部或尾部某些内容覆盖,即忽略
trim标签主要属性:
- prefix:增加前缀
- suffix:增加后缀
- prefixOverrides:前部覆盖
- suffixOverrides:尾部覆盖
<insert id="insert" parameterType="User" >
INSERT INTO USERS
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >ID,</if>
<if test="name != null" >NAME,</if>
<if test="age != null" >AGE,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >#{id},</if>
<if test="name != null" >#{name},</if>
<if test="age != null" >${age},</if>
</trim>
</insert>
choose标签
<choose>
<when test="条件1">
语句1
</when>
<when test="条件2">
语句2
</when>
<otherwise>
语句3
</otherwise>
</choose>
where标签
当where元素内部至少有一个if满足时,则会生成where语句插入sql。并且sql语句开头的AND或OR会自动删除。
<select id="selectBy" parameterType="com.model.UserQuery"
resultType="User">
SELECT * FROM USERS
<where>
<if test="name!=null">
NAME LIKE '%'||#{name}||'%'
</if>
<if test="minAge!=null">
AND AGE >= ${minAge}
</if>
<if test="maxAge!=null">
AND ${maxAge} >= AGE
</if>
</where>
</select>
foreach标签
<foreach item="" index="" collection="list|array|map" open="" separator="" close="">
</foreach>
属性说明:
- item:循环遍历对象。支持属性的点路径访问,如item.age,item.info.details。在list和数组中是其中的元素,在map中是value。该参数为必选。
- index:在list和数组中,index是元素的索引,在map中,index是元素的key,该参数可选。
- collection: 被遍历的对象类型,List<?>对象用list表示,数组用array表示,Map对象用map表示。
- open: foreach开始时的符号,一般是"(",和close=")"合用。该参数可选。
- separator: 被遍历元素之间的分隔符,例如在in子句中separator","会自动在元素中间用", "隔开,如in(1,2)。
- close: foreach的关闭符号,一般是")",和open="("合用。该参数可选。
<select id="selectBy" resultType="User">
SELECT * FROM USERS WHERE ID IN
<foreach item="item" index="i" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
</select>
set标签
set元素用于update语句,可以动态的配置SET关键字,同时剔除追加到条件末尾的任何不相关的逗号
<update id="update" parameterType="User">
UPDATE USERS
<set>
<if test="name!= null">NAME=#{name},</if>
<if test="age!= null">AGE=${age}</if>
</set>
WHERE ID=#{id}
</update>
bind标签
bind标签用于模糊查询,实现sql查询参数拼接。
<select id="selectByName" parameterType="String"
resultType="User">
<bind name="param_name" value="'%'+name+'%' " />
SELECT * FROM USERS WHERE NAME=#{param_name}
</select>
网友评论