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到此。

  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/1998xujinren/p/11208400.html
Copyright © 2011-2022 走看看