目录
- 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 mapperPUBLIC "-//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 mapperPUBLIC "-//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=arrayopen, 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;}@Testpublic 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();}}@Testpublic 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();}}}