10、mybatis参数处理
生活随笔
收集整理的這篇文章主要介紹了
10、mybatis参数处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1、單個參數:mybatis不做任何處理
- 2、多個參數:mybatis會做特殊處理
- 3、命名參數:明確指定封裝參數時map的key:@Param("id")
- 3.1 EmployeeMapper接口
- 3.2 EmployeeMapper.xml
- 3.3 Test
- 4、POJO,
- 5、Map
- 5.1 EmployeeMapper
- 5.2 EmployeeMapper.xml
- 5.3 Test
- 6、TO
- 7、jdbcType通常需要在某種特定的條件下被設置
1、單個參數:mybatis不做任何處理
#{參數名}:取出參數2、多個參數:mybatis會做特殊處理
多個參數會被封裝成一個mapkey:param1...paramN,或者參數的索引也可以value:傳入的參數 #{}就是從map中獲取指定的key的值;3、命名參數:明確指定封裝參數時map的key:@Param(“id”)
多個參數會被封裝成一個mapkey:使用@Param注解指定的值value:參數值 #{指定的key}取出對應的參數值3.1 EmployeeMapper接口
package com.mi.dao;import com.mi.pojo.Employee; import org.apache.ibatis.annotations.Param;public interface EmployeeMapper {public Employee getEmployeeById(Integer id);public Integer addEmp(Employee employee);public Integer deleteEmp(Integer id);public Integer updateEmp(Employee employee);public Employee getEmployeeByParam(@Param("id") Integer id, @Param("lastName") String lastName);}3.2 EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--指定為接口的全類名--> <mapper namespace="com.mi.dao.EmployeeMapper"><!--id 為接口的方法名--><select id="getEmployeeById" resultType="com.mi.pojo.Employee">select * from employee where id = #{id}</select><insert id="addEmp" parameterType="com.mi.pojo.Employee"useGeneratedKeys="true" keyProperty="id">insert into employee (last_name,gender) values (#{lastName},#{gender})</insert><delete id="deleteEmp">delete from employee where id = #{id}</delete><update id="updateEmp" >update employee set last_name = #{lastName},gender = #{gender} where id = #{id}</update><select id="getEmployeeByParam" resultType="com.mi.pojo.Employee">select * from employee where id = #{id} and last_name = #{lastName}</select> </mapper>3.3 Test
@Testpublic void testGetParam() throws IOException {//1、獲取SqlSessionFactory對象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2、獲取Sqlsesion對象SqlSession sqlSession = sqlSessionFactory.openSession();try {//3、獲取接口的實現類對象//會為接口自動創建一個代理對象,代理對象去執行增刪改查方法EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmployeeByParam(3,"jerry");System.out.println(employee);}finally {sqlSession.close();}}4、POJO,
如果多個參數正好是我們業務邏輯的數據模型,我們就可以直接傳入pojo,
#{屬性名}:取出傳入的pojo的屬性值
5、Map
如果多個參數不是業務模型中的數據,沒有對應的pojo,為了方便,我們也可以傳入map
#{key}:取出map中對應的值
5.1 EmployeeMapper
package com.mi.dao;import com.mi.pojo.Employee; import org.apache.ibatis.annotations.Param;import java.util.Map;public interface EmployeeMapper {public Employee getEmployeeById(Integer id);public Integer addEmp(Employee employee);public Integer deleteEmp(Integer id);public Integer updateEmp(Employee employee);public Employee getEmployeeByParam(@Param("id") Integer id, @Param("lastName") String lastName);public Employee getEmployeeByMap(Map map);}5.2 EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--指定為接口的全類名--> <mapper namespace="com.mi.dao.EmployeeMapper"><!--id 為接口的方法名--><select id="getEmployeeById" resultType="com.mi.pojo.Employee">select * from employee where id = #{id}</select><insert id="addEmp" parameterType="com.mi.pojo.Employee"useGeneratedKeys="true" keyProperty="id">insert into employee (last_name,gender) values (#{lastName},#{gender})</insert><delete id="deleteEmp">delete from employee where id = #{id}</delete><update id="updateEmp" >update employee set last_name = #{lastName},gender = #{gender} where id = #{id}</update><select id="getEmployeeByParam" resultType="com.mi.pojo.Employee">select * from employee where id = #{id} and last_name = #{lastName}</select><select id="getEmployeeByMap" resultType="com.mi.pojo.Employee">select * from employee where id = #{id} and last_name = #{lastName}</select> </mapper>5.3 Test
@Testpublic void testGetByMap() throws IOException {//1、獲取SqlSessionFactory對象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2、獲取Sqlsesion對象SqlSession sqlSession = sqlSessionFactory.openSession();try {//3、獲取接口的實現類對象//會為接口自動創建一個代理對象,代理對象去執行增刪改查方法EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Map<String,Object> map = new HashMap<String, Object>();map.put("id",3);map.put("lastName","jerry");Employee employee = mapper.getEmployeeByMap(map);System.out.println(employee);}finally {sqlSession.close();}}6、TO
如果多個參數不是業務模型中的數據,但是經常使用,推薦來編寫一個TO(Transfer Object)
page{
int index;
int size;
}
7、jdbcType通常需要在某種特定的條件下被設置
在我們數據為null的時候,有些數據庫可能不能識別mybatis對null的默認處理,比如Oracle(報錯)
jdbcType OTHER 無效的類型:因為mybatis對所有的null都映射的是原生的Jdbc的 OTHER 類型,oracle不能正確處理。
由于全局配置中:jdbcTypeForNull=OTHER;oracle不支持,兩種辦法
1、#{email,jdbcType=OTHER};
2、jdbcTypeForNULL = NULL
總結
以上是生活随笔為你收集整理的10、mybatis参数处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCloud之微服务
- 下一篇: 11、mybatis返回List