1.1 typeHandlers类型转换器

  每当MyBatis 设置参数到PreparedStatement 或者从ResultSet 结果集中取得值时,就会使用TypeHandler 来处理数据库类型与java 类型之间转换。下表描述了默认

TypeHandlers

MyBatis详解 一篇就够啦

 1.1.1 自定义类型转换器

假设表中字段是int类型,而实体类与之对应的属性是boolean类型,此时可以采用自定义类型转换器进行对应

(1)实体类

 1 package com.chenyanbin.beans;
 2 
 3 public class Dept {
 4     private Integer deptNo;
 5     private String dname;
 6     private String loc;
 7     private boolean flag;
 8     public Integer getDeptNo() {
 9         return deptNo;
10     }
11     public boolean isFlag() {
12         return flag;
13     }
14     public void setFlag(boolean flag) {
15         this.flag = flag;
16     }
17     public void setDeptNo(Integer deptNo) {
18         this.deptNo = deptNo;
19     }
20     public String getDname() {
21         return dname;
22     }
23     public void setDname(String dname) {
24         this.dname = dname;
25     }
26     public String getLoc() {
27         return loc;
28     }
29     public void setLoc(String loc) {
30         this.loc = loc;
31     }
32 }

(2) 表中字段

MyBatis详解 一篇就够啦

 (3) 开发自定义类型转换器:MyTypeHandler.java

继承并实现接口:TypeHandler.java

 1 package com.chenyanbin.util;
 2 
 3 import java.sql.CallableStatement;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 
 8 import org.apache.ibatis.jdbc.Null;
 9 import org.apache.ibatis.type.JdbcType;
10 import org.apache.ibatis.type.TypeHandler;
11 /*
12  * setParameter:这个方法在生成SQL语句时才被调用
13  * 
14  * getResult:查询结束之后,在将ResultSet数据行转换为实体类对象时,通知TypeHandler将当前数据行某个字段转换为何种类型
15  * 
16  * 
17  */
18 public class MyTypeHandler implements TypeHandler {
19 
20     public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
21         if (parameter==null) { //dept.flag=null insertsql flag设置0
22             ps.setInt(i, 0);
23             return;
24         }
25         Boolean flag=(Boolean)parameter;
26         if (flag==true) {
27             ps.setInt(i, 1);
28         }
29         else {
30             ps.setInt(i, 0);
31         }
32     }
33 
34     public Object getResult(ResultSet rs, String columnName) throws SQLException {
35         int flag = rs.getInt(columnName); //1 or 0
36         Boolean myFlag=Boolean.FALSE;
37         if (flag==1) {
38             myFlag=Boolean.TRUE;
39         }
40         return myFlag;
41     }
42 
43     public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
44         // TODO Auto-generated method stub
45         return null;
46     }
47 
48     public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
49         // TODO Auto-generated method stub
50         return null;
51     }
52 
53 }

(4) 在MyBatis核心配置文件注册自定义类型转换器:

myBatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 属性配置 -->
 7     <properties resource="config.properties"></properties>
 8     <!-- 别名配置 -->
 9     <typeAliases>
10         <package name="com.chenyanbin.beans" />
11         <package name="com.chenyanbin.dao" />
12     </typeAliases>
13     <!-- 类型处理器 -->
14     <typeHandlers>
15         <!-- 从java中的Boolean转jdbc中的NUMERIC -->
16         <typeHandler handler="com.chenyanbin.util.MyTypeHandler"
17             javaType="Boolean" jdbcType="NUMERIC" />
18     </typeHandlers>
19     <!-- 环境配置 -->
20     <environments default="development">
21         <!-- 环境配置 -->
22         <environment id="development">
23             <!-- 事务管理器 -->
24             <transactionManager type="JDBC"></transactionManager>
25             <!-- 数据源 -->
26             <dataSource type="pooled">
27                 <property name="driver" value="${jdbc.driver}" />
28                 <property name="url" value="${jdbc.url}" />
29                 <property name="username" value="${jdbc.username}" />
30                 <property name="password" value="${jdbc.password}" />
31             </dataSource>
32         </environment>
33     </environments>
34     <!-- 映射器 -->
35     <mappers>
36         <package name="com.chenyanbin.dao" />
37     </mappers>
38 </configuration>

config.properties

1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/sam
3 jdbc.username=root
4 jdbc.password=root

(5) 创建接口:DeptMapper.java

 1 package com.chenyanbin.dao;
 2 
 3 import java.util.List;
 4 import com.chenyanbin.beans.Dept;
 5 
 6 public interface DeptMapper {
 7     public void deptSave(Dept dept);
 8 
 9     public List<Dept> deptFind();
10 }

(6)  DeptMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.chenyanbin.dao.DeptMapper">
 6     <insert id="deptSave">
 7         insert into dept (DEPTNO,DNAME,LOC,flag)
 8         values(#{deptNo},#{dname},#{loc},#{flag})
 9     </insert>
10     <select id="deptFind" resultType="Dept">
11         select deptNo,dname,loc,flag from dept
12     </select>
13 </mapper>
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 属性配置 -->
 7     <properties resource="config.properties"></properties>
 8     <!-- 别名配置 -->
 9     <typeAliases>
10         <package name="com.chenyanbin.beans" />
11         <package name="com.chenyanbin.dao" />
12     </typeAliases>
13     <!-- 环境配置 -->
14     <environments default="development">
15         <!-- 环境配置 -->
16         <environment >
17             <!-- 事务管理器 -->
18             <transactionManager type="JDBC"></transactionManager>
19             <!-- 数据源 -->
20             <dataSource type="pooled">
21                 <property name="driver" value="${jdbc.driver}" />
22                 <property name="url" value="${jdbc.url}" />
23                 <property name="username" value="${jdbc.username}" />
24                 <property name="password" value="${jdbc.password}" />
25             </dataSource>
26         </environment>
27     </environments>
28     <!-- 映射器 -->
29     <mappers>
30         <package name="com.chenyanbin.dao" />
31     </mappers>
32 </configuration>
方式二:myBatis-config.xml

相关文章:

  • 2022-01-10
  • 2021-08-15
  • 2022-12-23
  • 2021-04-04
  • 2021-10-20
  • 2022-02-11
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2023-02-21
  • 2021-04-30
  • 2021-06-10
相关资源
相似解决方案