zoukankan      html  css  js  c++  java
  • Mybatis 动态SQL

    if

    新建表employee

    Employee

    package com.example.demo.domain;
    
    import java.io.Serializable;
    
    public class Employee implements Serializable {
        private Integer id;
        private String loginname;
        private String password;
        private String name;
        private String sex;
        private Integer age;
        private String phone;
        private double sal;
        private String state;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getLoginname() {
            return loginname;
        }
    
        public void setLoginname(String loginname) {
            this.loginname = loginname;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    
        public double getSal() {
            return sal;
        }
    
        public void setSal(double sal) {
            this.sal = sal;
        }
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    }
    View Code

    EmployeeMapper.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="com.example.demo.mapper.EmployeeMapper">
    
        <select id="selectEmployeeByIdLike" parameterType="int" resultType="com.example.demo.domain.Employee">
            SELECT  *  FROM tb_employee WHERE state="ACTIVE"
            <if test="id!=null">
                and id=#{id}
            </if>
        </select>
    </mapper>
    View Code

    EmployeeMapper

    package com.example.demo.mapper;
    
    import com.example.demo.domain.Employee;
    
    import java.util.HashMap;
    import java.util.List;
    
    public interface EmployeeMapper {
        List<Employee> selectEmployeeByIdLike(HashMap<String,Object> params);
    }
    View Code

    mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="lazyLoadingEnabled" value="true"/>
            <setting name="aggressiveLazyLoading" value="false"/>
        </settings>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://192.168.31.146:3306/mydb"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="CardMapper.xml"></mapper>
            <mapper resource="PersonMapper.xml"></mapper>
            <mapper resource="ClazzMapper.xml"></mapper>
            <mapper resource="StudentMapper.xml"></mapper>
            <mapper resource="EmployeeMapper.xml"></mapper>
        </mappers>
    
    </configuration>
    View Code

    DynamicSQLTest

    package com.example.demo.test;
    
    import com.example.demo.domain.Employee;
    import com.example.demo.mapper.EmployeeMapper;
    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 java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    
    public class DynamicSQLTest {
        public static void main(String[] args) throws IOException {
            InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=factory.openSession();
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            HashMap<String,Object> map=new HashMap<String,Object>();
    //        map.put("id",1);
            List<Employee> list=mapper.selectEmployeeByIdLike(map);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
    }
    View Code

    运行结果

    把注释部分取消重新运行

     多条件查询

    <select id="selectEmployeeByLoginLike" resultType="com.example.demo.domain.Employee">
            SELECT  * FROM tb_employee WHERE state="ACTIVE"
            <if test="loginname!=null and password!=null">
                and loginname=#{loginname} and password=#{password}
            </if>
        </select>
    View Code

    EmployeeMapper

    public interface EmployeeMapper {
        List<Employee> selectEmployeeByIdLike(HashMap<String,Object> params);
        List<Employee> selectEmployeeByLoginLike(HashMap<String,Object> params);
    }

    DynamicSQLTest

    public static void testSelectEmployeeByLoginLike(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            HashMap<String,Object> params=new HashMap<String,Object>();
            params.put("loginname","jack");
            params.put("password","123456");
            List<Employee> list=mapper.selectEmployeeByLoginLike(params);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
    View Code

    Choose

    <select id="selectEmployeeChoose" resultType="com.example.demo.domain.Employee">
            SELECT  * FROM tb_employee WHERE state="ACTIVE"
            <choose>
                <when test="id!=null">
                    AND id=#{id}
                </when>
                <when test="loginname!=null and password!=null">
                    and loginname=#{loginname} and password=#{password}
                </when>
                <otherwise>
                    AND sex=''
                </otherwise>
            </choose>
        </select>
    View Code

    where

    <select id="selectEmployeeLike" resultType="com.example.demo.domain.Employee">
            select * from tb_employee
            <where>
                <if test="state!=null">
                    state=#{state}
                </if>
                <if test="id!=null">
                    and id=#{id}
                </if>
                <if test="loginname!=null and password!=null">
                    and loginname=#{loginname} and password=#{password}
                </if>
            </where>
        </select>
    View Code

    set

    <update id="updateEmployeeIfNecessary" parameterType="com.example.demo.domain.Employee">
            UPDATE tb_employee
            <set>
                <if test="loginname!=null">loginname=#{loginname},</if>
                <if test="password!=null">password=#{password},</if>
                <if test="name!=null">name=#{name},</if>
                <if test="sex!=null">sex=#{sex},</if>
                <if test="age!=null">age=#{age},</if>
                <if test="phone!=null">phone=#{phone},</if>
                <if test="sal!=null">sal=#{sal},</if>
                <if test="state!=null">state=#{state},</if>
            </set>
            WHERE id=#{id}
        </update>
    View Code

     运行时会出现中文插入乱码问题,把连接Url修改如下即可

    <property name="url" value="jdbc:mysql://192.168.31.146:3306/mydb?useUnicode=true&amp;characterEncoding=UTF-8"/>

    foreach

    <select id="selectEmployeeIn" resultType="com.example.demo.domain.Employee">
            SELECT * FROM tb_employee WHERE id IN
            <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </select>
    View Code

    bind

    <select id="selectEmployeeLikeNmae" resultType="com.example.demo.domain.Employee">
            <bind name="pattern" value="'%'+_parameter.getName()+'%'"></bind>
            select * from tb_employee WHERE loginname LIKE #{pattern}
        </select>
    View Code

    完整代码

    DynamicSQLTest

    package com.example.demo.test;
    
    import com.example.demo.domain.Employee;
    import com.example.demo.mapper.EmployeeMapper;
    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 java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    public class DynamicSQLTest {
        public static void main(String[] args) throws IOException {
            InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=factory.openSession();
            testSelectEmployeeLikeNmae(session);
            session.commit();
            session.close();
        }
        public static void testSelectEmployeeLikeNmae(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            Employee employee=new Employee();
            employee.setName("o");
            List<Employee> list=mapper.selectEmployeeLikeNmae(employee);
            list.forEach(e -> System.out.println(e.getName()+" "+e.getPhone()));
        }
        public static void testSelectEmployeeIn(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            List<Integer> ids=new ArrayList<Integer>();
            ids.add(1);
            ids.add(2);
            List<Employee> list=mapper.selectEmployeeIn(ids);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
        public static void testSelectEmployeeByIdLike(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            HashMap<String,Object> map=new HashMap<String,Object>();
            map.put("id",1);
            List<Employee> list=mapper.selectEmployeeByIdLike(map);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
    
        public static void testSelectEmployeeByLoginLike(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            HashMap<String,Object> params=new HashMap<String,Object>();
            params.put("loginname","jack");
            params.put("password","123456");
            List<Employee> list=mapper.selectEmployeeByLoginLike(params);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
    
        public static void testSelectEmployeeChoose(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            HashMap<String,Object> params=new HashMap<String,Object>();
            List<Employee> list=mapper.selectEmployeeChoose(params);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
        public static void testSelectEmployeeLike(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            HashMap<String,Object> params=new HashMap<String,Object>();
            List<Employee> list=mapper.selectEmployeeLike(params);
            list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getPhone()));
        }
        public static void testUpdateEmployeeIfNecessary(SqlSession session){
            EmployeeMapper mapper=session.getMapper(EmployeeMapper.class);
            Employee employee=mapper.selectEmployeeById(1);
            employee.setAge(18);
            mapper.updateEmployeeIfNecessary(employee);
        }
    }
    View Code

    EmployeeMapper

    package com.example.demo.mapper;
    
    import com.example.demo.domain.Employee;
    
    import java.util.HashMap;
    import java.util.List;
    
    public interface EmployeeMapper {
        List<Employee> selectEmployeeByIdLike(HashMap<String,Object> params);
        List<Employee> selectEmployeeByLoginLike(HashMap<String,Object> params);
        List<Employee> selectEmployeeChoose(HashMap<String,Object> params);
        List<Employee> selectEmployeeLike(HashMap<String,Object> params);
        Employee selectEmployeeById(Integer id);
        void updateEmployeeIfNecessary(Employee employee);
        List<Employee> selectEmployeeIn(List<Integer> ids);
        List<Employee> selectEmployeeLikeNmae(Employee employee);
    }
    View Code

    EmployeeMapper.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="com.example.demo.mapper.EmployeeMapper">
        <select id="selectEmployeeById" parameterType="int" resultType="com.example.demo.domain.Employee">
            SELECT  *  FROM tb_employee WHERE  id=#{id}
        </select>
        <select id="selectEmployeeByIdLike" parameterType="int" resultType="com.example.demo.domain.Employee">
            SELECT  *  FROM tb_employee WHERE state="ACTIVE"
            <if test="id!=null">
                and id=#{id}
            </if>
        </select>
        <select id="selectEmployeeByLoginLike" resultType="com.example.demo.domain.Employee">
            SELECT  * FROM tb_employee WHERE state="ACTIVE"
            <if test="loginname!=null and password!=null">
                and loginname=#{loginname} and password=#{password}
            </if>
        </select>
        <select id="selectEmployeeChoose" resultType="com.example.demo.domain.Employee">
            SELECT  * FROM tb_employee WHERE state="ACTIVE"
            <choose>
                <when test="id!=null">
                    AND id=#{id}
                </when>
                <when test="loginname!=null and password!=null">
                    and loginname=#{loginname} and password=#{password}
                </when>
                <otherwise>
                    AND sex=''
                </otherwise>
            </choose>
        </select>
        <select id="selectEmployeeLike" resultType="com.example.demo.domain.Employee">
            select * from tb_employee
            <where>
                <if test="state!=null">
                    state=#{state}
                </if>
                <if test="id!=null">
                    and id=#{id}
                </if>
                <if test="loginname!=null and password!=null">
                    and loginname=#{loginname} and password=#{password}
                </if>
            </where>
        </select>
        <update id="updateEmployeeIfNecessary" parameterType="com.example.demo.domain.Employee">
            UPDATE tb_employee
            <set>
                <if test="loginname!=null">loginname=#{loginname},</if>
                <if test="password!=null">password=#{password},</if>
                <if test="name!=null">name=#{name},</if>
                <if test="sex!=null">sex=#{sex},</if>
                <if test="age!=null">age=#{age},</if>
                <if test="phone!=null">phone=#{phone},</if>
                <if test="sal!=null">sal=#{sal},</if>
                <if test="state!=null">state=#{state},</if>
            </set>
            WHERE id=#{id}
        </update>
        <select id="selectEmployeeIn" resultType="com.example.demo.domain.Employee">
            SELECT * FROM tb_employee WHERE id IN
            <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </select>
        <select id="selectEmployeeLikeNmae" resultType="com.example.demo.domain.Employee">
            <bind name="pattern" value="'%'+_parameter.getName()+'%'"></bind>
            select * from tb_employee WHERE loginname LIKE #{pattern}
        </select>
    </mapper>
    View Code
  • 相关阅读:
    视觉slam十四讲课后习题ch3-7
    视觉slam十四讲课后习题ch3-6
    视觉slam十四讲课后习题ch3--5题
    (原创)遗传算法C++实现
    (笔记):组合and继承之访问限制(二)
    (笔记):组合and继承之访问限制(一)
    (笔记):初始化列表之初始化顺序
    (笔记):构造函数之初始化列表
    笔记:构造函数易错点
    (笔记):构造函数与析构函数
  • 原文地址:https://www.cnblogs.com/uptothesky/p/8047404.html
Copyright © 2011-2022 走看看