MyBatis框架的 动态SQL

蔚落 2022-06-18 04:14 313阅读 0赞

代码:

Employee.java

  1. package com.bean;
  2. import java.io.Serializable;
  3. public class Employee implements Serializable {
  4. private Integer id; // 主键id
  5. private String loginname; // 登录名
  6. private String password; // 密码
  7. private String name; // 真实姓名
  8. private String sex; // 性别
  9. private Integer age; // 年龄
  10. private String phone; // 电话
  11. private Double sal; // 薪水
  12. private String state; // 状态
  13. public Employee() {
  14. super();
  15. // TODO Auto-generated constructor stub
  16. }
  17. public Integer getId() {
  18. return id;
  19. }
  20. public void setId(Integer id) {
  21. this.id = id;
  22. }
  23. public String getLoginname() {
  24. return loginname;
  25. }
  26. public void setLoginname(String loginname) {
  27. this.loginname = loginname;
  28. }
  29. public String getPassword() {
  30. return password;
  31. }
  32. public void setPassword(String password) {
  33. this.password = password;
  34. }
  35. public String getName() {
  36. return name;
  37. }
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41. public String getSex() {
  42. return sex;
  43. }
  44. public void setSex(String sex) {
  45. this.sex = sex;
  46. }
  47. public Integer getAge() {
  48. return age;
  49. }
  50. public void setAge(Integer age) {
  51. this.age = age;
  52. }
  53. public String getPhone() {
  54. return phone;
  55. }
  56. public void setPhone(String phone) {
  57. this.phone = phone;
  58. }
  59. public Double getSal() {
  60. return sal;
  61. }
  62. public void setSal(Double sal) {
  63. this.sal = sal;
  64. }
  65. public String getState() {
  66. return state;
  67. }
  68. public void setState(String state) {
  69. this.state = state;
  70. }
  71. @Override
  72. public String toString() {
  73. // TODO Auto-generated method stub
  74. return "Employee [id=" + id + ", loginname=" + loginname + ", password=" + password + ", name=" + name + ", sex=" + sex
  75. + ", age=" + age + ", phone=" + phone + ", sal=" + sal + ", state=" + state + "]";
  76. }
  77. }

EmployeeMapper.java

  1. package com.mapper;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import com.bean.Employee;
  5. public interface EmployeeMapper {
  6. List<Employee> selectEmployeeByIdLike(HashMap<String, Object> params);
  7. List<Employee> selectEmployeeByLoginLike(HashMap<String, Object> params);
  8. List<Employee> selectEmployeeChoose(HashMap<String, Object> params);
  9. List<Employee> findEmployeeLike(HashMap<String, Object> params);
  10. List<Employee> selectEmployeeLike(HashMap<String, Object> params);
  11. Employee selectEmployeeWithId(Integer id);//根据id查询员工
  12. void updateEmployeeIfNecessary(Employee employee);//动态更新员工
  13. List<Employee> selectEmployeeIn(List<Integer> ids);//根据传入的id查询员工
  14. List<Employee> selectEmployeeLikeName(Employee employee);//根据传入的参数进行模糊查询
  15. }

EmployeeMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!-- namespace指用户自定义的命名空间。 -->
  4. <mapper namespace="com.mapper.EmployeeMapper">
  5. <select id="selectEmployeeWithId" parameterType="int" resultType="com.bean.Employee">
  6. SELECT * FROM tb_employee where id = #{id}
  7. </select>
  8. <!-- if -->
  9. <select id="selectEmployeeByIdLike" resultType="com.bean.Employee">
  10. SELECT * FROM tb_employee WHERE state = 'ACTIVE'
  11. <!-- 可选条件,如果传进来的参数有id属性,则加上id查询条件 -->
  12. <if test="id != null ">
  13. and id = #{id}
  14. </if>
  15. </select>
  16. <!-- if -->
  17. <select id="selectEmployeeByLoginLike" resultType="com.bean.Employee">
  18. SELECT * FROM tb_employee WHERE state = 'ACTIVE'
  19. <!-- 两个可选条件,例如登录功能的登录名和密码查询 -->
  20. <if test="loginname != null and password != null">
  21. and loginname = #{loginname} and password = #{password}
  22. </if>
  23. </select>
  24. <!-- choose(when、otherwise) -->
  25. <select id="selectEmployeeChoose" parameterType="hashmap" resultType="com.bean.Employee">
  26. SELECT * FROM tb_employee WHERE state = 'ACTIVE'
  27. <!-- 如果传入了id,就根据id查询,没有传入id就根据loginname和password查询,否则查询sex等于男的数据 -->
  28. <choose>
  29. <when test="id != null">
  30. and id = #{id}
  31. </when>
  32. <when test="loginname != null and password != null">
  33. and loginname = #{loginname} and password = #{password}
  34. </when>
  35. <otherwise>
  36. and sex = '男'
  37. </otherwise>
  38. </choose>
  39. </select>
  40. <select id="findEmployeeLike" resultType="com.bean.Employee">
  41. SELECT * FROM tb_employee WHERE
  42. <if test="state != null ">
  43. state = #{state}
  44. </if>
  45. <if test="id != null ">
  46. and id = #{id}
  47. </if>
  48. <if test="loginname != null and password != null">
  49. and loginname = #{loginname} and password = #{password}
  50. </if>
  51. </select>
  52. <!-- where -->
  53. <select id="selectEmployeeLike" resultType="com.bean.Employee">
  54. SELECT * FROM tb_employee
  55. <where>
  56. <if test="state != null ">
  57. state = #{state}
  58. </if>
  59. <if test="id != null ">
  60. and id = #{id}
  61. </if>
  62. <if test="loginname != null and password != null">
  63. and loginname = #{loginname} and password = #{password}
  64. </if>
  65. </where>
  66. </select>
  67. <!-- set -->
  68. <update id="updateEmployeeIfNecessary" parameterType="com.bean.Employee">
  69. update tb_employee
  70. <set>
  71. <if test="loginname != null">loginname=#{loginname},</if>
  72. <if test="password != null">password=#{password},</if>
  73. <if test="name != null">name=#{name},</if>
  74. <if test="sex != null">sex=#{sex},</if>
  75. <if test="age != null">age=#{age},</if>
  76. <if test="phone != null">phone=#{phone},</if>
  77. <if test="sal != null">sal=#{sal},</if>
  78. <if test="state != null">state=#{state}</if>
  79. </set>
  80. where id=#{id}
  81. </update>
  82. <!-- foreach -->
  83. <select id="selectEmployeeIn" resultType="com.bean.Employee">
  84. SELECT * FROM tb_employee WHERE ID in
  85. <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
  86. #{item}
  87. </foreach>
  88. </select>
  89. <!-- bind -->
  90. <select id="selectEmployeeLikeName" resultType="com.bean.Employee">
  91. <bind name="pattern" value="'%' + _parameter.getName() + '%'" />
  92. SELECT * FROM tb_employee WHERE loginname LIKE #{pattern}
  93. </select>
  94. </mapper>

DynamicSQLTest.java

  1. package com.test;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import org.apache.ibatis.io.Resources;
  8. import org.apache.ibatis.session.SqlSession;
  9. import org.apache.ibatis.session.SqlSessionFactory;
  10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  11. import com.bean.Employee;
  12. import com.mapper.EmployeeMapper;
  13. public class DynamicSQLTest {
  14. public static void main(String[] args) throws Exception {
  15. // TODO Auto-generated method stub
  16. // 读取mybatis-config.xml文件
  17. InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  18. // 初始化mybatis,创建SqlSessionFactory类的实例
  19. SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
  20. // 创建Session实例
  21. SqlSession session=sqlSessionFactory.openSession();
  22. DynamicSQLTest t = new DynamicSQLTest();
  23. //t.testSelectEmployeeByIdLike(session);
  24. //t.testSelectEmployeeByLoginLike(session);
  25. //t.testSelectEmployeeChoose(session);
  26. //t.testFindEmployeeLike(session);
  27. //t.testSelectEmployeeLike(session);
  28. //t.testUpdateEmployeeIfNecessary(session);
  29. //t.testSelectEmployeeIn(session);
  30. t.testSelectEmployeeLikeName(session);
  31. session.commit();
  32. session.close();
  33. }
  34. // 测试<select id="selectEmployeeByIdLike" >
  35. public void testSelectEmployeeByIdLike(SqlSession session){
  36. // 获得EmployeeMapper接口的代理对象
  37. EmployeeMapper em=session.getMapper(EmployeeMapper.class);
  38. // 创建一个HashMap存储参数
  39. HashMap<String, Object> params=new HashMap<String,Object>();
  40. // 设置id属性
  41. params.put("id", 1);
  42. // 调用EmployeeMapper接口的selectEmployeeByIdLike方法
  43. List<Employee> list=em.selectEmployeeByIdLike(params);
  44. // 查看返回结果
  45. list.forEach(employee -> System.out.println(employee));
  46. }
  47. public void testSelectEmployeeByLoginLike(SqlSession session){
  48. EmployeeMapper em=session.getMapper(EmployeeMapper.class);
  49. HashMap<String, Object> params = new HashMap<String, Object>();
  50. // 设置loginname和password属性
  51. params.put("loginname", "jack");
  52. params.put("password", "123456");
  53. List<Employee> list = em.selectEmployeeByLoginLike(params);
  54. list.forEach(employee -> System.out.println(employee));
  55. }
  56. public void testSelectEmployeeChoose(SqlSession session){
  57. EmployeeMapper em = session.getMapper(EmployeeMapper.class);
  58. HashMap<String, Object> params = new HashMap<String, Object>();
  59. // 设置id属性
  60. // params.put("id", 1);
  61. // params.put("loginname", "jack");
  62. // params.put("password", "123456");
  63. List<Employee> list = em.selectEmployeeChoose(params);
  64. list.forEach(employee -> System.out.println(employee));
  65. }
  66. public void testFindEmployeeLike(SqlSession session){
  67. EmployeeMapper em = session.getMapper(EmployeeMapper.class);
  68. HashMap<String, Object> params = new HashMap<String, Object>();
  69. params.put("id", 1);
  70. List<Employee> list = em.findEmployeeLike(params);
  71. list.forEach(employee -> System.out.println(employee));
  72. }
  73. public void testSelectEmployeeLike(SqlSession session){
  74. EmployeeMapper em = session.getMapper(EmployeeMapper.class);
  75. HashMap<String, Object> params = new HashMap<String, Object>();
  76. // 设置state属性和id属性
  77. params.put("id", 3);
  78. params.put("loginname", "jack");
  79. params.put("password", "123456");
  80. List<Employee> list = em.selectEmployeeLike(params);
  81. list.forEach(employee -> System.out.println(employee));
  82. }
  83. public void testUpdateEmployeeIfNecessary(SqlSession session){
  84. EmployeeMapper em=session.getMapper(EmployeeMapper.class);
  85. //查询id为3的员工
  86. Employee employee=em.selectEmployeeWithId(3);
  87. //设置需要修改的属性
  88. employee.setLoginname("mary");
  89. employee.setPassword("1234");
  90. employee.setName("玛丽");
  91. em.updateEmployeeIfNecessary(employee);
  92. }
  93. public void testSelectEmployeeIn(SqlSession session){
  94. EmployeeMapper em = session.getMapper(EmployeeMapper.class);
  95. // 创建List集合
  96. List<Integer> ids = new ArrayList<Integer>();
  97. // 往List集合中添加两个测试数据
  98. ids.add(1);
  99. ids.add(2);
  100. List<Employee> list = em.selectEmployeeIn(ids);
  101. list.forEach(employee -> System.out.println(employee));
  102. }
  103. public void testSelectEmployeeLikeName(SqlSession session){
  104. EmployeeMapper em = session.getMapper(EmployeeMapper.class);
  105. Employee employee = new Employee();
  106. // 设置模糊查询的参数
  107. employee.setName("o");
  108. List<Employee> list = em.selectEmployeeLikeName(employee);
  109. list.forEach(result -> System.out.println(result));
  110. }
  111. }

截图(发最后一个:模糊查询)

Center

发表评论

表情:
评论列表 (有 0 条评论,313人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis动态sql

    前言:本项目是使用idea进行开发,数据库使用的是Mysql。 本案例是基于对users表进行动态的增删改查的案例。 项目模块图 ![在这里插入图片描述][wate