Mybatis---04Mybatis配置文件浅析(二)
本文参考:https://www.cnblogs.com/yulinfeng/p/5991170.html
1.typeHandlers:类型处理器,设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,将获取到的值以合适的方式转换成 Java 类型;4;官网给出了很多的默认类型处理,点我去看
1)举个例子:假设数据库表我设计一个字段为date,类型为varchar,这个字段我要存储时间,但是我的对应的数据库表实体类中date属性 的类型Date类型;一般的思路是把属性date获取时间后,转变为String类型,这样后再插入数据库表中;Mybatis给我们提供了更好的方法【typeHandlers】来解决这个问题
2)操作:
A:创建一个数据库表testth,
B:创建实体类
public class TestTH {
private int id;
private Date date;
public TestTH() {
}
public TestTH(int id, Date date) {
this.id = id;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "TestTH{" +
"id=" + id +
", date=" + date +
'}';
}
}
C:【***】重写已有的类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型,具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler,这里我们使用继承org.apache.ibatis.type.BaseTypeHandler类,创建自己的类型处理类MyHandler
public class MyHandler extends BaseTypeHandler<Date> {
/**
* 设置非空参数
*
* @param preparedStatement
* @param i
* @param date
* @param jdbcType
* @throws SQLException
*/
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i,String.valueOf(date.getTime()));
}
/**
* 根据列名,获取可以为空的结果
*
* @param resultSet
* @param s
* @return
* @throws SQLException
*/
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
String date = resultSet.getString(s);
if (null != date) {
return new Date(Long.parseLong(date));
}
return null;
}
/**
* 根据列索引,获取可以为空的结果
*
* @param resultSet
* @param i
* @return
* @throws SQLException
*/
@Override
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
String date = resultSet.getString(i);
if (null != date) {
return new Date(Long.parseLong(date));
}
return null;
}
/**
* 存储过程,
*
* @param callableStatement
* @param i
* @return
* @throws SQLException
*/
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
String date = callableStatement.getString(i);
if (null != date) {
return new Date(Long.parseLong(date));
}
return null;
}
}
D:写好自定义类型处理类后,我们在mybatis配置文件mybatis-config.xml中去注册这个类
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybook?characterEncoding=UTF-8"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="root"/>
</properties> <typeHandlers>
<!--
handler:填写自定义类型处理类的全限定类名
javaType:实体类中需要处理的类型
jdbcType:数据库中需要处理的类型
-->
<typeHandler handler="com.james.mybatis.handler.MyHandler" javaType="java.util.Date" jdbcType="VARCHAR" />
</typeHandlers> <environments default="test">
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!--告知持久层接口的映射文件在哪里-->
<mappers>
<mapper resource="com/james/mybatis/dao/ITestTHDao.xml"/>
</mappers>
</configuration>
E:写与数据库交互Dao层的ITestTHDao接口跟数据库映射文件ITestTHDao.xml
public interface ITestTHDao {
/**
* 插入数据
* @param testTH
*/
void insertTest(TestTH testTH);
/**
* 根据id查询数据
* @param id
* @return
*/
TestTH selectById(int id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.james.mybatis.dao.ITestTHDao">
<select id="selectById" resultType="com.james.mybatis.domain.TestTH" parameterType="int">
select * from testth where id = #{id}
</select>
<insert id="insertTest" parameterType="com.james.mybatis.domain.TestTH">
insert into testth (id, date) values(#{id}, #{date,typeHandler=com.james.mybatis.handler.MyHandler})
</insert>
</mapper>
F:测试:
public class Main {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
ITestTHDao testTHDao = session.getMapper(ITestTHDao.class);
//6.使用代理对象执行方法
/*
TestTH testTH = new TestTH(1, new Date());
testTHDao.insertTest(testTH);
session.commit();
*/
TestTH testTH = testTHDao.selectById(1);
System.out.println(testTH);
//7.释放资源
session.close();
in.close();
}
}
补充:在D操作中,要设置javaType实体类中需要处理的类型,jdbcType:数据库中需要处理的类型;可以设置自定义类型处理类中使用注解@MappedJdbcTypes设置数据库中的类型,使用@MappedTypes 注解指定与其关联的 Java 类型列表;其余操作都一样;不过当你使用parameterMap设置时,要把注解@MappedJdbcTypes中的属性includeNullJdbcType=true
Mybatis---04Mybatis配置文件浅析(二)的更多相关文章
- Mybatis配置信息浅析 MyBatis简介(二)
官方文档入门篇中有明确说明 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的. SqlSessionFactory 的实例可以通过 SqlSessionF ...
- MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射
在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...
- MyBatis 实用篇(二)配置文件
MyBatis 实用篇(二)配置文件 一.全局配置 全局配置:http://www.mybatis.org/mybatis-3/zh/configuration.html <?xml versi ...
- mybatis源码-解析配置文件(二)之解析的流程
目录 1. 简介 2. 配置文件解析流程分析 2.1 调用 2.2 解析的目的 2.3 XML 解析流程 2.3.1 build(parser) 2.3.2 new XMLConfigBuilder( ...
- mybatis 详解(二)------入门实例(基于XML)
通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...
- Mybatis主配置文件常见使用讲解
在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件. 其实最后mybatis解析的还是一个主配置文件. 而映射文件会通过我们配置<mappers>属性,或 ...
- 详解mybatis映射配置文件
一 mybatis 映射文件结构 mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义. cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的 ...
- Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)
一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)
用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...
- Springboot & Mybatis 构建restful 服务二
Springboot & Mybatis 构建restful 服务二 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务一 2 restful ...
随机推荐
- 20190531模拟赛总结&反思
T1: 来源:Codeforces - Classroom Watch Describe: 给出一个正整数 n,现在问存在多少个 x,使得 x在十进制下的每一位之和加上 x 等于 n. Solut ...
- MySQL二进制备份恢复
一.开启二进制日志1.进入配置文件[mysqld]下添加配置 方案一 vim /etc/my.cnf log-bin = /usr/local/mysql/logs/mysql_binmax_binl ...
- git如何上传文件夹
git是不支持上传空文件夹的,文件夹里面必须有文件才可以 1.本地仓库上传文件夹到远程 在本地仓库新建一个文件夹,如果里面没有文件,那么$ git push origin master 不能将文件夹p ...
- Redis 4.0.2安装与卸载
安装 使用root用户安装: 1.wget http://download.redis.io/releases/redis-4.0.2.tar.gz 2.tar -zxvf redis-4.0.2.t ...
- Centos-归档文件或目录-tar
tar 对文件或者目录进行打包归档成一个文件,不是压缩 相关选项 -c 新建文件 -r 将目标文件追加都档案文件末尾 -t 列出归档文件中已经归档文件列表 -x 从归档文件中还原文件 -u 新文件更新 ...
- Python-输入输出-input ouput
输入.输出? 这种统称为IO流,也就是数据流向,在标准中,从终端输入称为标准输入 sidin,从终端输出为标准输出 stdout,从终端错误输出则为标准错误输出 stderr.这些只是IO流中终端方面 ...
- 061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结
061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结 本文知识点:一维数组总结 总结 注意点
- NOIP提高组2016 D1T2 【天天爱跑步】
码了一个下午加一个晚上吧...... 题目描述: 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成 ...
- MySql 关闭 bin 和 log 日志
mysql 的 bin 和 .log 日志文件会非常占用磁盘空间和 IO,修改 mysql 配置文件可以关闭这两种日志的记录. 关闭 bin 日志,将下面三项配置注释掉: #log_bin = mys ...
- Vue.js 学习笔记之四:Vue 组件基础
到目前为止,这个系列的笔记所展示的都是一些极为简单的单页面 Web 应用程序,并且页面上通常只有几个简单的交互元素.但在实际生产环境中,Web 应用程序的用户界面往往是由多个复杂的页面共同组成的.这时 ...