zoukankan      html  css  js  c++  java
  • mybatis学习(五)(动态mybatis(多条件查询))

    有时候要查询条件是多条件的,尤其是使用mybatis的时候如何创建sql语句呢?

    这里mybatis有自己的办法,如下:

    案例:通过传入map,根据map里面的数据来查询

    mapper配置如下:

    <select id="select04" parameterType="Emp1" resultType="Emp1">
            select * from emp 
            <where>
                <if test="empno != 0">
                    and empno = #{empno}
                </if>
                <if test="ename != null">
                    and ename = #{ename}
                </if>
                <if test = "deptno != null ">
                 and deptno = #{deptno}
                </if>
            </where>        
        </select>

    测试类如下:

    package com.yc.mybatis;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Map;
    
    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;
    
    
    
    public class TestTest01 {
        InputStream is = null;
        SqlSessionFactory factory = null;
        SqlSession session = null;
        
        {
            try {
                is = Resources.getResourceAsStream("mybatis-config.xml");
                factory = new SqlSessionFactoryBuilder().build(is);
                session = factory.openSession();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        @Test
        public void TTest04(){
            Emp1 emp = new Emp1();
            emp.setDeptno(20);
            List<Emp1> list = session.selectList("TTest.select04", emp);//TTest为mapper的命名空间
            for(Emp1 e : list){
                System.out.println(e);
            }
        }
    }

    实体类如下:

    package com.yc.mybatis;
    
    public class Emp1 {
        private int empno;
        private int deptno;
        private String ename;
        @Override
        public String toString() {
            return "Emp1 [empno=" + empno + ", deptno=" + deptno + ", ename=" + ename + "]";
        }
        public int getEmpno() {
            return empno;
        }
        public void setEmpno(int empno) {
            this.empno = empno;
        }
        public int getDeptno() {
            return deptno;
        }
        public void setDeptno(int deptno) {
            this.deptno = deptno;
        }
        public String getEname() {
            return ename;
        }
        public void setEname(String ename) {
            this.ename = ename;
        }
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + deptno;
            result = prime * result + empno;
            result = prime * result + ((ename == null) ? 0 : ename.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Emp1 other = (Emp1) obj;
            if (deptno != other.deptno)
                return false;
            if (empno != other.empno)
                return false;
            if (ename == null) {
                if (other.ename != null)
                    return false;
            } else if (!ename.equals(other.ename))
                return false;
            return true;
        }
        public Emp1(int empno, int deptno, String ename) {
            super();
            this.empno = empno;
            this.deptno = deptno;
            this.ename = ename;
        }
        public Emp1() {
            super();
        }
    }
    Emp1.java

    结果截图如下:

     多条件查询到此结束,但是相关的思想却非常重要,比如有多条件更新,多个值的赋值再插入数据等等,这里我就将配置项发一下,相关的测试类和实体类就不一 一列举了。

    多数据更新:

    <update id="update01" parameterType="Emp1">
            update emp 
            <set>
                <if test="ename != null ">
                    ename = #{ename},
                </if>
                <if test = "deptno != 0">
                    deptno = #{deptno},
                </if>
            </set>
            where empno = #{empno}
        </update>

    多条件删除:

    <delete id="delete01" parameterType="Emp">
            delete emp 
            <where>
                <if test="empno != 0">
                    and empno = #{empno}
                </if>
                <if test="ename != null">
                    and ename = #{ename}
                </if>
                <if test="deptno != 0">
                    and deptno = #{deptno}
                </if>
            </where>
        </delete>

    注意:关于添加、删除和修改必须要手动提交一次才行,要session.commit(),因为mybatis不会自动帮你提交。

    基本的mybatis到此。

  • 相关阅读:
    【ABAP系列】SAP 系统的消息类型分析 MESSAGE TYPE
    【FICO系列】SAP FICO-模块 关于固定资产年结和折旧的问题
    【ABAP系列】SAP ABAP 刷新SCREEN的方法
    【ABAP系列】SAP ABAP 控制ALV单元格编辑后获取新的数值
    【ABAP系列】SAP ABAP系统变量及注释
    【EWM系列】SAP EWM凭证对象表概览
    【EWM系列】SAP EWM中仓库任务WT创建的函数
    教你快速录制gif动图
    阿里巴巴的26款超神Java开源项目!
    HTTP和HTTPS协议,看一篇就够了
  • 原文地址:https://www.cnblogs.com/1998xujinren/p/11208400.html
Copyright © 2011-2022 走看看