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');
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); } }