Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
来源:互联网 发布:什么是锁sql 编辑:程序博客网 时间:2024/06/05 22:46
Mybatis 不确定条件查询(动态语句where和if)
在下面的案例本人将演示如何使用动态语句批量删除数据库数据,本人在数据库建了一张emp员工表(表的数据自己填充),表的结构如下:
核心代码为,在实体映射文件中配置如下的代码:
<!-- 多条件查询,条件个数不确定 --><!-- 方式一 --><select id="findEmpByConditionChanged" parameterType="cn.sz.hcq.pojo.EmpCondition"resultType="cn.sz.hcq.pojo.Emp">select empno,ename,job,mgr,sal,comm,hiredatefrom emp where 1=1<if test="kw!=null">and ename like '%${kw}%' </if><if test="job!=null">and job=#{job}</if><if test="losal!=null&&hisal!=null">and sal between #{losal} and #{hisal}</if></select><!--方式二 --><!-- where 标签能够自动把第一个条件的and去掉 (&转义符为&) --><select id="findEmpByConditionChanged" parameterType="cn.sz.hcq.pojo.EmpCondition"resultType="cn.sz.hcq.pojo.Emp">select empno,ename,job,mgr,sal,comm,hiredatefrom emp<where><if test="kw!=null">ename like '%${kw}%' </if><if test="job!=null">and job=#{job}</if><if test="losal!=null&&hisal!=null">and sal between #{losal} and #{hisal}</if></where></select>
下面是项目的结构(本人使用的是maven搭建的web项目):
IEmpDAO.java为接口提供修改数据方法,EmpDAOImpl.java为接口的实现类,MybatisSqlSessionFactory.java为本人创建的获取sqlSession的工具类,EmpCondition.java为多条件查询将查询条件封装成的实体类,Emp.java为实体类,Emp.xml为映射文件,mybatis_cfg.xml为mybatis主配置文件,Test.java为测试类,pom.xml为maven引入依赖的文件。
1、IEmpDAO.java为接口提供查询方法
/** * 多条件查询,但条件个数是不确定的情况 * * @param ec 封装的添加实体类为参数 * @return */public List<Emp> findEmpByConditionChanged(EmpCondition ec);
2、EmpDAOImpl.java为接口的实现类
public List<Emp> findEmpByConditionChanged(EmpCondition ec) {SqlSession sqlSession = null;try {sqlSession = MybatisSqlSessionFactory.getMySqlSession();return sqlSession.selectList("cn.sz.hcq.pojo.Emp.findEmpByConditionChanged", ec);} catch (Exception e) {e.printStackTrace();} finally {MybatisSqlSessionFactory.closeSqlSession();}return null;}
3、MybatisSqlSessionFactory.java为本人创建的获取sqlSession的工具类
4、Emp.java为实体类
5、Emp.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.sz.hcq.pojo.Emp"><!-- 多条件查询(将条件封装为一个实体类) --><!-- 多条件查询,条件个数不确定 --><!-- 方式一 --><!--<select id="findEmpByConditionChanged" parameterType="cn.sz.hcq.pojo.EmpCondition"resultType="cn.sz.hcq.pojo.Emp">select empno,ename,job,mgr,sal,comm,hiredatefrom emp where 1=1<if test="kw!=null">and ename like '%${kw}%' </if><if test="job!=null">and job=#{job}</if><if test="losal!=null&&hisal!=null">and sal between #{losal} and #{hisal}</if></select>--><!--方式二 --><!-- where 标签能够自动把第一个条件的and去掉 (&转义符为&) --><select id="findEmpByConditionChanged" parameterType="cn.sz.hcq.pojo.EmpCondition"resultType="cn.sz.hcq.pojo.Emp">select empno,ename,job,mgr,sal,comm,hiredatefrom emp<where><if test="kw!=null">ename like '%${kw}%' </if><if test="job!=null">and job=#{job}</if><if test="losal!=null&&hisal!=null">and sal between #{losal} and #{hisal}</if></where></select></mapper>
6、mybatis_cfg.xml为mybatis主配置文件
7、pom.xml为maven引入依赖的文件
8、Test.java为测试类
public class Test {public static void main(String[] args) {// 多条件查询(将条件封装为一个实体类)IEmpDAO empDAO = new EmpDAOImpl();// 多条件查询,但条件个数是不确定的情况System.out.println("*************多条件查询,但条件个数是不确定的情况****************");// 将查询的条件信息封装为一个实体类EmpCondition ec = new EmpCondition();// 可以设置不确定的条件进行查询ec.setKw("s");// 查询名字包括sec.setJob("clerk");// 查询职位为clerkec.setLosal(1000d);// 查询最低薪水为1000ec.setHisal(5000d);// 查询最高薪水为5000List<Emp> empList = empDAO.findEmpByConditionChanged(ec);for (int i = 0; i < empList.size(); i++) {Emp emp = empList.get(i);System.out.println(emp.getEname() + "," + emp.getJob() + ","+ emp.getSal());}}}
完成代码后,运行测试类就可以完成不确定条件的查询。
阅读全文
0 0
- Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- iBatis动态条件查询 where的if条件不执行
- Mybatis Where if 标签和Mybatis 模糊查询
- mybatis根据参数动态拼接多个where条件
- mybatis动态Sql(if-where)和sql片段
- 动态SQL文中where条件是IN,而导入的参数个数不确定的情况(亲自实践)
- mybatis动态查询不确定的表
- SQL语句---from 和where 查询条件的优先级
- Mybatis中通过HaseMap封装参数作为查询条件
- 关于mybatis的动态if语句查询报错问题和解决方法
- 多条件查询,动态添加SqlParameter参数,动态添加where条件
- Mybatis中动态SQL(if,where,foreach 的使用)
- Mybatis中动态SQL(if,where,foreach 的使用)
- Mybatis 实现不确定修改几个字段的修改方法(动态语句set、if实现),避免修改时其它没被修改的字段变为null
- MySQL中根据if标签实现多条件模糊查询(动态SQL语句)
- MyBatis动态条件查询
- mybatis动态查询条件
- 防止重复提交(在拦截器中防止)
- 短信测试的基本常识
- Ubuntu-16.06 + OpenCV-3.3.0 + 一些常见的问题
- OpenCV中光流法跟踪器的使用方法学习
- SSD算法特征map的计算和caffe代码理解
- Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
- linux网络常用命令
- 如何在win10上同时安装python2和python3
- (转)这是转型AI的励志故事,从非科班到拿下阿里云栖一等奖!
- PullToRefreshListView的添加Banner头布局
- Cron表达式(笔记)
- 算法期中1004. 拓扑序[Special judge]
- web报错:org.apache.jasper.jasperException:/web_inf下面文件找不到编写的jsp文件
- a的b次方(T组输入)