一、基本概念
mybtais核心:对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
二、还是老样子先写需求:
用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。
对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。
三、上代码
mapp.xml内容如下:注意看代码里面的注释
<?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="cn.mybatis.mapper.UserMapper">
<select id="findUserList" parameterType="cn.mybatis.po.UserQueryVo"
resultType="cn.mybatis.po.UserCustom">
select * from user
<where>
<!-- 引入SQL片段 -->
<include refid="query_user_where" />
</where>
</select>
<select id="findUserCount" parameterType="cn.mybatis.po.UserQueryVo"
resultType="int">
select count(*) from user
<!-- where标签可以去掉查询条件中的第一个and关键字 -->
<where>
<!-- 引入SQL片段 -->
<include refid="query_user_where" />
<!-- 还可以引用其他sql片段 -->
</where>
</select>
<!--
定义sql片段 id:唯一标识
经验:是基于单表来定义sql片段,这样这个sql片段重用性才高 在sql片段中不要包括where关键字
-->
<sql id="query_user_where">
<if test="userCustom != null">
<if test="userCustom.sex !=null || userCustom.sex !=''">
and user.sex = #{userCustom.sex}
</if>
<if test="userCustom.username !=null||userCustom.username !=''">
and user.username like '%${userCustom.username}%'
</if>
</if>
<if test="ids !=null">
<!--
使用foreach遍历传入ids
collection:指定输入对象中集合属性
item:每次遍历生成对象
open:开始遍历时拼接的串
close:结束遍历时拼接的串
separator分隔符:遍历的两个对象中需要拼接的串
-->
<!--
使用实现下边的sql拼接
AND (ID =1 or ID=10 or ID=16)
<foreach collection="ids" item="user_id" open="and(" close=")" separator="or">
id=#{user_id}
</foreach>
-->
<!-- 实现 and id IN(1,10,16)拼接 -->
<foreach collection="ids" item="user_id" open=" and id IN(" close=")" separator=",">
#{user_id}
</foreach>
</if>
</sql>
</mapper>
mapper.java:
package cn.mybatis.mapper;
import java.util.List;
import cn.mybatis.po.UserCustom;
import cn.mybatis.po.UserQueryVo;
import cn.mybatis.pojo.User;
/**
* 输出映射
*
* @author Hanson
*
*/
public interface UserMapper {
// 用户的信息综合查询
public List<UserCustom> findUserList(UserQueryVo userQueryVo)
throws Exception;
// 用户信息的总数
public int findUserCount(UserQueryVo userQueryVo) throws Exception;
}
测试代码:
@Test
public void testFindUserList() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserCustom userCustom = new UserCustom();
userCustom.setSex("1");
/*userCustom.setUsername("张三丰");*/
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(10);
ids.add(16);
UserQueryVo userQueryVo = new UserQueryVo();
userQueryVo.setUserCustom(userCustom);
userQueryVo.setIds(ids);
List<UserCustom> list = userMapper.findUserList(userQueryVo);
for(User user:list){
System.out.println(user);
}
}
@Test
public void testFindUserConut() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserCustom userCustom = new UserCustom();
userCustom.setSex("1");
/*userCustom.setUsername("张三丰");*/
UserQueryVo userQueryVo = new UserQueryVo();
userQueryVo.setUserCustom(userCustom);
int list = userMapper.findUserCount(userQueryVo);
System.out.println(list);
}
知识点基本上都在注释里面。如果是看了前面几张结合起来,把代码直接复制拷贝是能够直接运行的。
本文为慕课网作者原创,转载请标明【原文作者及本文链接地址】。侵权必究,谢谢合作!
点击查看更多内容
13人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦