typeHandler

typeHandler有什么用?

你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。 具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 然后可以选择性地将它映射到一个 JDBC 类型

用法

参考官网的示例:

package com.xh.mybatisLearn.utils;import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** Created by root on 3/2/18.*/
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(String.class)
public class ExampleTypeHandler extends BaseTypeHandler<String> {public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {preparedStatement.setString(i, "in>>" + s);}public String getNullableResult(ResultSet resultSet, String s) throws SQLException {return resultSet.getString(s);}public String getNullableResult(ResultSet resultSet, int i) throws SQLException {return resultSet.getString(i);}public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return callableStatement.getString(i);}
}

注册TypeHandler

    <typeHandlers><typeHandler  handler="com.xh.mybatisLearn.utils.ExampleTypeHandler"/></typeHandlers>

插入时指定TypeHandler

    <insert id="addUser" useGeneratedKeys="true"keyProperty="id">insert into user_tb (username,age) VALUES (#{username,typeHandler=com.xh.mybatisLearn.utils.ExampleTypeHandler},#{age})</insert>

结果:

getAll>>User{id=17, username='in>>u1', age=21}

plugin

plugin有什么用?

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)

用法

通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定了想要拦截的方法签名即可。
参考官网示例:

package com.xh.mybatisLearn.utils;import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Properties;/*** Created by root on 3/2/18.*/
@Intercepts({@Signature(type = Executor.class,method = "query",args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class ExamplePlugin implements Interceptor {private final Logger logger = LoggerFactory.getLogger(ExamplePlugin.class);public Object intercept(Invocation invocation) throws Throwable {MappedStatement ms = (MappedStatement) invocation.getArgs()[0];BoundSql boundSql = ms.getBoundSql(invocation.getArgs()[1]);logger.info("==================== sql:{}", boundSql.getSql());return invocation.proceed();}public Object plugin(Object target) {return Plugin.wrap(target, this);}public void setProperties(Properties properties) {String some_string = properties.getProperty("some_string");logger.info("==================== some_string:{}", some_string);}
}

这个插件就是打印查询的sql,
其中type对应:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
method对应:上面各项括号的方法
args对应:method的参数

plugin注册

    <plugins><plugin interceptor="com.xh.mybatisLearn.utils.ExamplePlugin"><property name="some_string" value="some_string_xxxxxx"/></plugin></plugins>

logger

        <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.21</version></dependency>

输出

[main] INFO com.xh.mybatisLearn.utils.ExamplePlugin - ==================== some_string:some_string_xxxxxx
[main] INFO com.xh.mybatisLearn.utils.ExamplePlugin - ==================== sql:select * from user_tb where id=?
getOne>>User{id=12, username='u1', age=21}

转载于:https://www.cnblogs.com/lanqie/p/8493704.html

MyBatis-进阶2相关推荐

  1. MyBatis进阶——高级使用1

    第一节:输入参数和输出参数 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 1.1 环境准备 第一步:创建项目添加依赖 项 ...

  2. 【Java】Mybatis进阶篇(一)

    Mybatis进阶篇 核心配置文件 1.mybatis-config.xml 2.Mybatis 的配置文件包含了会深深影响Mybatis行为的设置和属性信息 Configuration(配置) pr ...

  3. mybatis进阶--一对一查询

    所谓的一对一查询,就是说我们在查询一个表的数据的时候,需要关联查询其他表的数据. 需求 首先说一个使用一对一查询的小需求吧:假设我们在查询某一个订单的信息的时候,需要关联查询出创建这个订单对应的用户信 ...

  4. JavaWeb——Mybatis进阶mapper代理

    一.引言 前篇的文章中没有使用mapper代理的方式,调用方法比较麻烦,造成很多代码重复,所以mybatis在输入输出映射的基础上又添加了mapper代理的配置方式方便使用. 先上张图,这张图是说明m ...

  5. MyBatis进阶七:MyBatis整合C3P0连接池;

    Mybatis整合其他连接池,本篇博客以整合C3P0连接池为例. 目录 MyBatis整合C3P0连接池的步骤: (1)第一步:通过maven引入C3P0的依赖: (2)第二步:创建C3P0和Myba ...

  6. mybatis多表查询出来的实体如何映射_mybatis进阶案例之多表查询

    mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...

  7. 数据库开发技术java方向_Java开发工程师(Web方向) - 03.数据库开发 - 第5章.MyBatis...

    第5章--MyBatis MyBatis入门 Abstract: 数据库框架的工作原理和使用方法(以MyBatis为例) 面向对象的世界与关系型数据库的鸿沟: 面向对象世界中的数据是对象: 关系型数据 ...

  8. 基于 MyBatis 手撸一个分表插件

    背景 事情是酱紫的,上级leader负责记录信息的业务,每日预估数据量是15万左右,所以引入sharding-jdbc做分表. 上级leader完成业务的开发后,走了一波自测,git push后,就忙 ...

  9. MyBatis第一天

    MyBatis第一天 学习目标 能够了解什么是框架 掌握Mybatis框架开发快速入门 掌握Mybatis框架的基本CRUD操作 掌握SqlMapConfig.xml配置文件 掌握Mybatis的pa ...

  10. SSM-Mybatis进阶了解(动态SQL和多表操作)

    Mybatis进阶 MyBatis 接口代理方式实现 Dao 层 接口代理方式-实现规则 ​ 传统方式实现 Dao 层,我们既要写接口,还要写实现类.而 MyBatis 框架可以帮助我们省略编写 Da ...

最新文章

  1. 【GCN】万字长文带你入门 GCN
  2. 2021略阳天津高级中学高考成绩查询,2021年天津高考成绩查询网站查分网址:http://www.zhaokao.net/...
  3. yum被锁Another app is currently holding the yum lock; waiting for it to exit...
  4. SharePoint中文WiKi
  5. 南京邮电大学电工电子基础B实验二(电气参数测量和伏安特性)
  6. 人工智能、机器学习、深度学习 -- 学习摘记
  7. [18调剂]中国科学院深圳先进技术研究院“视频信号处理”课题组招聘
  8. 联想新计算机开机黑屏,联想笔记本电脑开机黑屏没反应的原因及解决办法攻略【维修总结】...
  9. ecshop手机号码归属地
  10. 2-14-Multiple Exemplars-based Hallucination for Face Super-resolution and Editing(ACCV2020)
  11. ensp 防火墙 一对一映射
  12. java生成xml文件head,生成XML文件 - Glucose的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 安装 Windows 7 VM虚拟机
  14. CCD相机模数转换芯片时序简介
  15. pycharm PEP8规范(python)
  16. Lesson 10
  17. MUI框架-03-自定义MUI控件样式
  18. 10个最好用的在线配色网站推荐
  19. Java基础|一图总结Java File类(与IO密切相关)
  20. Mycat(6):mycat简单配置

热门文章

  1. C语言字符串分离数字和字母,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  2. 合并两个有序链表,合并后依然有序(C语言)
  3. 计算机基础知识上机操作excer,《计算机应用基础》Excel上机操作练习题.doc
  4. 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
  5. linux ospf 命令,OSPF单区域配置 - linuxprobe2020的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. mastercam加工报表生成_2020北京加工中心编程培训工厂教学行业
  7. 读excel_基础 | Excel中单元格的引用方式,读这篇就够了!
  8. 计算机组成原理实验软件仿真系统_计算机系统组成原理(基础)
  9. Windows 10环境下AndroidStudio安装教程(内含如何配置Http Proxy)
  10. 商标45类分类表明细表_2019版注册商标分类表,商标注册45类范围明细