zoukankan      html  css  js  c++  java
  • 6、SpringBoot+Mybatis整合------参数传递

    开发工具:STS

    代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis/tree/7892801d804d2060774f3720f82e776ff318e3ba

    前言:

    在调用mybatis的查询条件时,之前,遇到需要验证多个参数的查询时,往往需要把所有参数都绑定到一个实体中去,然后调用获取。

    现在,我们来详细描述mybatis传递参数的细节。


    一、单个参数:

    1.定义mapper接口:

     1 package com.xm.mapper;
     2 
     3 import java.util.List;
     4 
     5 import com.xm.pojo.Student;
     6 
     7 public interface StudentMapper {
     8 
     9 
    10     /**
    11      * 根据name查询
    12      * @param name
    13      * @return
    14      */
    15     public Student getByName(String name);
    16     
    17 }
    StudentMapper.java

    2.实现mapper映射:

     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 <mapper namespace="com.xm.mapper.StudentMapper">
     4 
     5     
     6     
     7     <!-- 根据name查询 -->
     8     <select id="getByName" resultType="student">
     9     select * from student where name=#{name}
    10     </select>
    11 </mapper>
    StudentMapper.xml

    3.定义测试用例:

     1 package com.xm;
     2 
     3 import org.junit.Test;
     4 import org.junit.runner.RunWith;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.boot.test.context.SpringBootTest;
     7 import org.springframework.test.context.junit4.SpringRunner;
     8 
     9 import com.xm.mapper.StudentMapper;
    10 import com.xm.pojo.Student;
    11 
    12 @RunWith(SpringRunner.class)
    13 @SpringBootTest
    14 public class StudentTest {
    15     @Autowired
    16     private StudentMapper studentMapper;
    17     
    18     @Test
    19     public void selectStudent() {
    20         
    21         Student student = studentMapper.getByName("郭小明");
    22         System.out.println(student);
    23         
    24     }
    25     
    26 
    27 }
    StudentTest.java

    4.测试结果:

    (1)数据库查询结果:

    (2)测试结果输出:

     注意在mapper映射中,单个参数类型,也可以不写 parameterType="",参数名可以随意写,比如#{names}

    实现mapper映射:

     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 <mapper namespace="com.xm.mapper.StudentMapper">
     4 
     5     
     6     
     7     <!-- 根据name查询 -->
     8     <select id="getByName" resultType="student">
     9     <!-- select * from student where name=#{name} -->
    10     select * from student where name=#{names}
    11     </select>
    12 </mapper>
    StudentMapper.xml

    二、多个参数

    1.根据参数名查询

    (1)定义mapper接口:

     1 package com.xm.mapper;
     2 
     3 import java.util.List;
     4 
     5 import com.xm.pojo.Student;
     6 
     7 public interface StudentMapper {
     8 
     9     
    10     /**
    11      * 根据用户名和id同时查询
    12      * @param id
    13      * @param name
    14      * @return
    15      */
    16     public Student getStudentByIdAndName(Integer id,String name);
    17     
    18 }
    StudentMapper.java

    (2)实现mapper映射:

     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 <mapper namespace="com.xm.mapper.StudentMapper">
     4 
     5     
     6     <!-- 根据用户名和id同时查询 -->
     7     <select id="getStudentByIdAndName" resultType="student">
     8     select * from student where name=#{name} and id=#{id} 
     9     </select>
    10 </mapper>
    StudentMapper.xml

    (3)定义测试用例:

     1 package com.xm;
     2 
     3 import org.junit.Test;
     4 import org.junit.runner.RunWith;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.boot.test.context.SpringBootTest;
     7 import org.springframework.test.context.junit4.SpringRunner;
     8 
     9 import com.xm.mapper.StudentMapper;
    10 import com.xm.pojo.Student;
    11 
    12 @RunWith(SpringRunner.class)
    13 @SpringBootTest
    14 public class StudentTest {
    15     @Autowired
    16     private StudentMapper studentMapper;
    17     
    18     
    19     @Test
    20     public void selectStudent() {
    21         
    22         /*Student student = studentMapper.getByName("郭小明");*/
    23         Student student = studentMapper.getStudentByIdAndName(1, "郭小明");
    24         System.out.println(student);
    25         
    26     }
    27     
    28 
    29 }
    StudentTest.java

    (4)测试结果:

    说明:这种简单的根据参数名传参是失败的

    2.根据参数key值获取,获取规则为param1,param2,param3.........:

    (1)实现mapper映射:

     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 <mapper namespace="com.xm.mapper.StudentMapper">
     4 
     5 
     6     <!-- 根据用户名和id同时查询 -->
     7     <select id="getStudentByIdAndName" resultType="student">
     8     <!-- select * from student where name=#{name} and id=#{id}  -->
     9     select * from student where name=#{param2} and id=#{param1} 
    10     </select>
    11 </mapper>
    StudentMapper.xml

    (2)测试结果:

    说明:针对这种情况,如果参数较多的情况下,获取准确的参数名更好一些

    3.绑定参数名

    (1)定义mapper接口:

     1 package com.xm.mapper;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.annotations.Param;
     6 
     7 import com.xm.pojo.Student;
     8 
     9 public interface StudentMapper {
    10 
    11     
    12     
    13     /**
    14      * 根据用户名和id同时查询
    15      * @param id
    16      * @param name
    17      * @return
    18      */
    19     public Student getStudentByIdAndName(@Param("id")Integer id,@Param("name")String name);
    20     
    21 }
    StudentMapper.java

     

    (2)实现mapper映射:

     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 <mapper namespace="com.xm.mapper.StudentMapper">
     4 
     5 
     6     <!-- 根据用户名和id同时查询 -->
     7     <select id="getStudentByIdAndName" resultType="student">
     8     select * from student where name=#{name} and id=#{id} 
     9     <!-- select * from student where name=#{param2} and id=#{param1}  -->
    10     </select>
    11 </mapper>
    StudentMapper.xml

    (3)测试结果:

    说明:针对参数较多,且参数都属于同一个pojo类的时候,可以把参数先封装入实体,再获取

    4.封装实体参数:

    (1)定义mapper接口:

     1 package com.xm.mapper;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.annotations.Param;
     6 
     7 import com.xm.pojo.Student;
     8 
     9 public interface StudentMapper {
    10 
    11     
    12     
    13     /**
    14      * 根据用户名和id同时查询
    15      * @param id
    16      * @param name
    17      * @return
    18      */
    19     public Student getStudentByIdAndName(Student student);
    20     
    21 }
    StudentMapper.java

     

    (2)定义测试用例:

     1 package com.xm;
     2 
     3 import org.junit.Test;
     4 import org.junit.runner.RunWith;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.boot.test.context.SpringBootTest;
     7 import org.springframework.test.context.junit4.SpringRunner;
     8 
     9 import com.xm.mapper.StudentMapper;
    10 import com.xm.pojo.Student;
    11 
    12 @RunWith(SpringRunner.class)
    13 @SpringBootTest
    14 public class StudentTest {
    15     @Autowired
    16     private StudentMapper studentMapper;
    17     
    18     @Test
    19     public void selectStudent() {
    20         
    21         /*Student student = studentMapper.getByName("郭小明");*/
    22         /*Student student = studentMapper.getStudentByIdAndName(1, "郭小明");*/
    23         Student student = new Student();
    24         student.setName("郭小明");
    25         student.setId(1);
    26         Student student2 = studentMapper.getStudentByIdAndName(student);
    27         System.out.println(student2);
    28         
    29     }
    30     
    31 
    32 }
    StudentMapper.java

     

    (3)测试结果:


                                                                                     2018-07-02

  • 相关阅读:
    The Stanford Natural Language Processing Group
    HTTP和Socket
    数据挖掘之R与SQL
    redis运维的一些知识点
    ICTCLAS2011免费发布
    异步IO一定更好吗?
    试用wincvs2.0
    本地访问服务器上的wamp
    如何解决wamp中apache外部IP访问问题
    高级设置电脑系统windows7防火墙出错代码0×6D9原因与解决技巧
  • 原文地址:https://www.cnblogs.com/TimerHotel/p/springboot_matatis_06.html
Copyright © 2011-2022 走看看