概述
目录
- 1. UserMapper接口
- 1. sql-if
- 2. sql-foreach
- 3. 多条件查询和根据多个id查询测试
say sth..
每当我回顾以前写jdbc分页,多条件查询时,我那是有多痛苦。
特别是当我拼接条件时,对象.getName 又是判断null,又是判断空字符串的。
还得拿一个集合来装条件。以及列名后面的逗号,where 条件的空格。
我/(ㄒoㄒ)/~~
搞得我特别压抑,好了,现在mybatis的sql标签来甜我了。( ̄︶ ̄*))
jdbc规范下的动态查询
1. UserMapper接口
user表字段userId userName userPassword
查询涉及到
- where不确定条件查询 sql-if
- in 多条件查询
- 不提供实体类
- 关于mybatis环境搭建
- 关于代理开发接口实现
package cn.bitqian.dao;
import cn.bitqian.entity.User;
import java.util.List;
/**
* @author echo lovely
* @date 2020/9/11 15:36
*/
public interface UserMapper {
public List<User> queryUserByCondition(User user);
public List<User> queryUserByIds(List<Integer> ids);
}
1. sql-if
<?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.bitqian.dao.UserMapper">
<!--sql 片段的抽取 statement标签内使用include标签进行引用-->
<sql id="selectUserPart">
select * from users1
</sql>
<!-- 根据id or name or pwd 查询 -->
<select id="queryUserByCondition" parameterType="user" resultType="user">
<include refid="selectUserPart"></include>
<where>
<if test="userId != 0 and userId != null">
and userid = #{userId}
</if>
<if test="userName != null">
and username = #{userName}
</if>
<if test="userPassword != null">
and userpassword = #{userPassword}
</if>
</where>
</select>
</mapper>
2. sql-foreach
<?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.bitqian.dao.UserMapper">
<select id="queryUserByIds" parameterType="list" resultType="user">
select * from users1 <!-- where userid in (1, 2, 3) -->
<where>
<!--
collection=array
open, end 拼接sql写死的片段
separator 为分隔符
item 为list中的每个元素
-->
<foreach collection="list" open="userid in (" close=")" separator="," item="userId">
#{userId}
</foreach>
</where>
</select>
</mapper>
3. 多条件查询和根据多个id查询测试
import cn.bitqian.dao.UserMapper;
import cn.bitqian.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 动态sql测试
* @author echo lovely
* @date 2020/9/11 15:50
*/
public class DynamicDemoTest {
public SqlSession getSqlSession() {
try {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 默认提交事务
return sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Test
public void test1() {
SqlSession sqlSession = getSqlSession();
if (sqlSession != null) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
// user.setUserId(1);
user.setUserName("rose");
user.setUserPassword("love jack");
List<User> userList = userMapper.queryUserByCondition(user);
System.out.println(userList);
sqlSession.close();
}
}
@Test
public void test2() {
SqlSession sqlSession = getSqlSession();
if (sqlSession != null) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
// 查询user id 为1或者为2的数据记录
System.out.println(userMapper.queryUserByIds(list));
sqlSession.close();
}
}
}
最后
以上就是结实宝马为你收集整理的动态sql (sql-if,sql-foreach)的全部内容,希望文章能够帮你解决动态sql (sql-if,sql-foreach)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复