typeHandlers类型处理器

实现java类型与数据库类型之间的转换,可以使用系统提供的类型处理器,也可以自定义类型处理器,这里介绍的是实现自定义类型处理器处理数据库类型与java类型的转换
比如:List —>VARCHAR

1、定义自定义类型处理器

package org.zhouym.typehandlers;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class MyTypeHandler extends BaseTypeHandler<List<String>> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, List<String> list, JdbcType jdbcType)throws SQLException {//对占位符进行处理StringBuilder sb = new StringBuilder();for (String hobby : list) {sb.append(hobby);sb.append(";");}String hobbys = sb.toString();//为占位符设值ps.setString(i, hobbys.substring(0, hobbys.length()-1));}@Overridepublic List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {String hobby = rs.getString(columnName);if (hobby == null) {return null;}String[] split = hobby.split(";");      return Arrays.asList(split);}@Overridepublic List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String hobby = rs.getString(columnIndex);if (hobby == null) {return null;}String[] split = hobby.split(";");       return Arrays.asList(split);}@Overridepublic List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return null;}}

2、配置文件中配置类型处理器信息

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 引入数据库信息的配置文件 --><properties resource="db.properties"></properties><!-- 引入类型处理器 --><typeHandlers><typeHandler handler="org.zhouym.typehandlers.MyTypeHandler"></typeHandler></typeHandlers><environments default="development"><environment id="development"><transactionManager type="JDBC" /><!-- 配置数据源信息 --><dataSource type="POOLED"><!-- 引入配置文件中的内容 --><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment></environments><!-- 与映射文件建立联系 --><mappers><!-- 这里注意的是,资源路径是映射文件的地址,不能以点分隔 --><mapper resource="org/zhouym/dao/IUserDao.xml" /></mappers>
</configuration>

添加集合属性

映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 利用接口实现,namespace必须为接口的全路径 -->
<mapper namespace="org.zhouym.dao.IUserDao"><!-- 将数据库查询的结果保存到对象中 --><select id="query" resultType="com.zhouym.javabean.User"><!-- 书写sql语句,没有分号 -->select * from tb_user</select><select id="queryById" resultType="com.zhouym.javabean.User"><!-- 书写sql语句,没有分号 -->select * from tb_user where id=#{id}</select><!-- 增加数据 --><insert id="addUser" parameterType="com.zhouym.javabean.User">insert into tb_user(name,age,address,hobby) values(#{name},#{age},#{address},#{hobby})</insert><!-- 修改数据 --><update id="updateUser" parameterType="com.zhouym.javabean.User">update tb_user set name=#{name},age=#{age},address=#{address} where id=#{id}</update><!-- 删除数据 --><delete id="deleteById" parameterType="int">delete from tb_user where id=#{id}</delete>
</mapper>

测试类

package com.zhouym.junit;import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.zhouym.dao.IUserDao;
import org.zhouym.dbutils.DButils;import com.zhouym.javabean.User;public class JunitTestInterface {private static Logger logger = Logger.getLogger(JunitTestInterface.class);@Testpublic void test1() {SqlSessionFactory factory = DButils.getSqlSessionFactory();SqlSession sqlSession = factory.openSession();//获取的IUserDao的实现 其实就是一个代理类IUserDao iUserDao = sqlSession.getMapper(IUserDao.class);User user = new User();user.setName("老胡");user.setAge(28);user.setAddress("河南");List<String> list = new ArrayList<>();list.add("篮球");list.add("跑步");list.add("游泳");user.setHobby(list);int result = iUserDao.addUser(user);if (result > 0) {logger.info("增加成功!!!");}sqlSession.commit();}}

测试结果

查询数据

package com.zhouym.junit;import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.zhouym.dao.IUserDao;
import org.zhouym.dbutils.DButils;import com.zhouym.javabean.User;public class JunitTestInterface {private static Logger logger = Logger.getLogger(JunitTestInterface.class);@Testpublic void test() {SqlSessionFactory factory = DButils.getSqlSessionFactory();SqlSession sqlSession = factory.openSession();//获取的IUserDao的实现 其实就是一个代理类IUserDao iUserDao = sqlSession.getMapper(IUserDao.class);//调用接口中的方法List<User> list = iUserDao.query();for (User user : list) {logger.info(user);}}}

测试结果

MyBatis之类型处理器typeHandlers相关推荐

  1. mybatis TypeHandler 类型处理器

    目录 1. 自定义日期类型处理器 2. 配置自定义日期处理器 3. 新增,查询 1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法, 来转换Java和数据库中的 ...

  2. MyBatis自定义类型处理器(typeHandler)

    MyBatis自定义类型处理器(typeHandler) 我们执行sql语句通过PreparedStatement语句实现,PreparedStatement会设置?值,类型处理器帮PreparedS ...

  3. MyBatis自定义类型处理器 TypeHandler

    在项目开发中经常会遇到一个问题: 当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为jav ...

  4. MyBatis的类型处理器

    类型处理器(类型转换器) 1.MyBatis自带一些常见的类型处理器 int - number String - varchar() 2.自定义MyBatis类型处理器 java - 数据库(jdbc ...

  5. 【Mybatis】类型处理器TypeHandler的作用与自定义

    一.什么是类型处理器 1.类型处理器(TypeHandler) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合 ...

  6. Mybatis——类型处理器TypeHandler

    在日常开发中使用mybatis时,mybatis的mapper.xml.mapper接口.entity实体一般会由mybatis-generator自动生成,其中实体的每个属性与数据库表的列一一对应, ...

  7. Mybatis-自定义类型处理器

    类型转换器:mybatis中有一些常用的类型转换器,比如把Java中的short类型转换为mysql中的short类型:但是如果现在是Java中的Date类型,但是我想要存储到数据库中转换为Long类 ...

  8. mybatis date类型映射_Mybatis中类型映射处理器详解

    上一篇梳理了Configuration初始化分析,今天继续typeHandlers部分. 数据库厂商标识 接上一篇文章分析,下一个解析的是databaseIdProvider节点,这个节点好理解,从字 ...

  9. desc 枚举类型id_想让代码更优雅?Mybatis类型处理器了解一下!

    明确需求 在设计之初,sys_role表的enabled字段有2个可选值,其中0 代表禁用,1代表启用,而且实体类中我们使用的是Interger类型: 源码展示 /** * 有效标志 */ priva ...

最新文章

  1. ubuntu设置securecrt串口权限
  2. 禁用当前的账户win7_拯救你的win7系统,电脑优化到位,打游戏才会流畅
  3. HTML5 的知识分享(二):HTML5 的常用标签
  4. 编程计算并输出1~50之间的所有数的阶乘(大数阶乘)
  5. appium+java(五)微信小程序自动化测试实践
  6. Golang 项目布局浅析
  7. S:date 的使用方法
  8. woocommerce产品选项描述修改_简历修改服务:中文修改、英文修改、中英互译、简历定制,名师一对一指导修改!...
  9. String s = new String(“xyz“);创建了几个字符串对象?
  10. js生成二维码,中间有logo
  11. 教你快速攻破小区门禁系统
  12. Unity3D 保姆级安装教程与收费方案和版本、下载地址,看不会算我输
  13. console接口跟Telnet命令初步调试交换机
  14. 如何学好图像处理——从小白到大神?
  15. 油溶性CdSeTe/ZnS量子点(以CdSeTe为核心,ZnS为壳层)
  16. 扫码跳转微信网页 网络出错 轻触屏幕重新加载-1001
  17. MySQL5.7修改默认root密码
  18. 江苏学计算机软件哪个专科大学好,江苏 我学软件技术可以报考哪些学校
  19. 前序、中序、后序排列
  20. 【Linux】用户和用户组|将用户添加到root组中

热门文章

  1. 【个人笔记】SQL操作基础
  2. linux下无法删除文件夹,Linux 文件/文件夹无法删除问题解决方案
  3. 【SSO单点登录】ticket+token+redis 实现sso单点登录 防重放、防盗用、防篡改
  4. android平板进recovery,recovery模式进不去正确进入方法详解
  5. vue中Mixin和extends详解
  6. 忙里偷闲写道acwing 1170 ~差分约束
  7. getelementbyid属性与用法
  8. 程序员如何获得中级工程师高级工程师职称
  9. 不想拿到”root“的黑客,不是好黑客
  10. FVCOM地下水输入