mybatis学习使用4动态sql

1.mybatis最强大的特性是它的动态sql,其中常见的动态sql元素主要如下:  

  if,choose(when,otherwise),where,set,foreach,bind

代码如下:

 sql语句

  

CREATE TABLE bs_employee(
  ID INT  PRIMARY  KEY AUTO_INCREMENT,
  email VARCHAR(18),
  password VARCHAR(10),
  NAME VARCHAR(18) DEFAULT NULL,
  SEX CHAR(2) DEFAULT NULL,
  AGE INT(11) DEFAULT NULL,
  phone VARCHAR(21),
  sal DOUBLE,
  state VARCHAR(18)
 );
 INSERT INTO bs_employee(email,PASSWORD,NAME,sex,age,phone,sal,state)
 VALUES('[email protected]','123456','zhangsan','男',26,'1292093323',32320,'ACTIVE');
  INSERT INTO bs_employee(email,PASSWORD,NAME,sex,age,phone,sal,state)
 VALUES('[email protected]','123456','lisi','女',21,'32424423',23230,'ACTIVE');
View Code

 Employee.java

package com.rookie.bigdata.domain;

import lombok.Data;

import java.io.Serializable;

/**
 * @author
 * @date 2018/10/22
 */
@Data
public class Employee implements Serializable{
    private Integer id;
    private String email;
    private String password;
    private String name;
    private String sex;
    private Integer age;
    private String phone;
    private Double sal;
    private String state;
}

 EmployeeMapper.java

package com.rookie.bigdata.mapper;

import com.rookie.bigdata.domain.Employee;

import java.util.HashMap;
import java.util.List;

/**
 * @author
 * @date 2018/10/22
 */
public interface EmployeeMapper {

    Employee selectEmployeeByID(Integer id);

    List<Employee> selectEmployeeByIDLike(HashMap<String,Object> params);

    List<Employee> selctEmployeeChose(HashMap<String,Object> params);

    List<Employee>  selecEmployeeByIDLikes(HashMap<String,Object> params);

   void updateEmployee(Employee employee);

   List<Employee> selectEmployeeIn(List<Integer> ids);

   List<Employee> selectLikeName(Employee employee);

}

mapper.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.rookie.bigdata.mapper.EmployeeMapper">

  <select id="selectEmployeeByID" parameterType="int"
  resultType="com.rookie.bigdata.domain.Employee">
 select * from bs_employee WHERE id=#{id};
  </select>

    <!--if的使用-->
    <select id="selectEmployeeByIDLike" resultType="com.rookie.bigdata.domain.Employee">
        SELECT * FROM bs_employee WHERE state='active'
        <!--这个代表可选条件,如果传入过来有id,就可以进入到该条件里面-->
<!--        <if test="id !=null">
            AND id=#{id}
        </if>-->
        <if test="email !=null and password !=null">
            and email=#{email} AND password=#{password}
        </if>
    </select>

    <!--choose的使用,用法和if的用法差不多-->
    <select id="selctEmployeeChose" parameterType="hashmap" resultType="com.rookie.bigdata.domain.Employee">
        SELECT * from bs_employee WHERE state='ACTIVE'
        <choose>
            <when test="id !=null">
                AND id=#{id}
            </when>
            <when test="email !=null and password !=null">
                and email=#{email} and password=#{password}
            </when>
            <otherwise>
                and sex='男'
            </otherwise>
        </choose>
    </select>

    <!--where动态语句-->
    <select id="selecEmployeeByIDLikes" resultType="com.rookie.bigdata.domain.Employee">
        select * from bs_employee WHERE
        <if test="state !=null">
            state =#{state}
        </if>
        <if test="id !=null">
            and id=#{id}
        </if>
    </select>

    <!--动态更新语句-->
    <update id="updateEmployee" parameterType="com.rookie.bigdata.domain.Employee">
        UPDATE bs_employee
    <set>
        <if test="email != null">email=#{email},</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>

    <!--foreach用法-->
    <select id="selectEmployeeIn" resultType="com.rookie.bigdata.domain.Employee">
        SELECT * FROM bs_employee WHERE ID IN
        <foreach collection="list" item="item" index="index"
                 open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <!--bind-->
    <select id="selectLikeName" resultType="com.rookie.bigdata.domain.Employee">
        <bind name="pattern" value="'%'+name+'%'"/>
        select * from bs_employee
        WHERE name like #{pattern};
    </select>
</mapper>
测试代码:EmployeeMapperTest.java
package com.rookie.bigdata.mapper;

import com.rookie.bigdata.domain.Employee;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import static org.junit.Assert.*;

/**
 * @author
 * @date 2018/10/22
 */
public class EmployeeMapperTest {


    public SqlSession session;

    @Before
    public void before() throws IOException {
        // 读取mybatis-config.xml文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 初始化mybatis,创建SqlSessionFactory类的实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);
        // 创建Session实例
        session = sqlSessionFactory.openSession();
    }

    @Test
    public void selectEmployeeByID() throws Exception {
    }

    @Test
    public void selectEmployeeByIDLike() throws Exception {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        HashMap<String, Object> params = new HashMap<String, Object>();
        // 设置id属性
        params.put("id", 1);
        List<Employee> list = mapper.selectEmployeeByIDLike(params);
        // 查看返回结果
        list.forEach(employee -> System.out.println(employee));

    }

    @Test
    public void selctEmployeeChose() throws Exception {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        HashMap<String, Object> params = new HashMap<String, Object>();
        // 设置id属性
        // params.put("id", 1);

        List<Employee> list = mapper.selctEmployeeChose(params);
        // 查看返回结果
        list.forEach(employee -> System.out.println(employee));

    }


    @Test
    public void selecEmployeeByIDLikes() throws Exception {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);

    }

    @Test
    public void updateEmployee() throws Exception {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        Employee employee = mapper.selectEmployeeByID(1);
        employee.setAge(40);
        mapper.updateEmployee(employee);
        session.commit();
        session.close();

    }

    @Test
    public void selectEmployeeIn() throws Exception {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        List<Integer> ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        List<Employee> employeeList = mapper.selectEmployeeIn(ids);
        System.out.println(employeeList);

    }

    @Test
    public void selectLikeName() throws Exception {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);

        Employee employee = new Employee();
        employee.setName("zh");
        List<Employee> employeeList = mapper.selectLikeName(employee);
        System.out.println(employeeList);
    }

}

猜你喜欢

转载自www.cnblogs.com/haizhilangzi/p/9827712.html