MyBatis-进阶2

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中 r是什么意思_python中rb含义理解

Python文件读写的几种模式&#xff1a; r,rb,w,wb 那么在读写文件时&#xff0c;有无b标识的的主要区别在哪里呢&#xff1f; 文件使用方式标识 r:默认值&#xff0c;表示从文件读取数据 w:表示要向文件写入数据&#xff0c;并截断以前的内容 a:表示要向文件写入数据&#xff0…

哈佛大学计算机生物科学,生命科学专业

【出国留学网】昨日&#xff0c;泰晤士报公布了最新版2018年世界大学生命科学排名&#xff0c;哈佛大学位列第一。本文是关于世界各国大学在本次生命科学排名中的具体表现&#xff0c;供你选校参考。The 2018 Times Higher Education World University Rankings’ table for li…

怎样呵护友谊_呵护真正的友情,助力漫长的人生

友情&#xff0c;即友谊&#xff0c;是指朋友和朋友之间的感情。它是一种很美妙的东西&#xff0c;可以让你在失落的时候变得高兴起来&#xff0c;可以让你走出苦海&#xff0c;去迎接新的人生。它就像一种你无法说出又可以感到快乐无比的东西。只有拥有真正朋友的人&#xff0…

【Day41】Python之路——AJAX

什么是AJAX AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 优点: 不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容 不需要任何浏览器插件&#xff0c;但需要用户允许JavaScript在浏览器上执行 同源…

LINUX重启MYSQL的命令

原文&#xff1a;http://blog.csdn.net/liuyong0818/article/details/5693336 ------------------------原文有错误&#xff0c;本文转载时已修改--------- 如何启动/停止/重启MySQL 一、启动方式 1、使用 service 启动&#xff1a;service mysql start 2、使用 mysql 脚…

html css子标签,HTML+CSS系列:CSS选择器(标签、ID、类、通配符、后代、子元素、并集、伪类)...

一.标签选择器Documenth1 {color: red;}h2{color: green;}Hello World!Hello World!Hello !Hello !二.类选择器Document.box {color: green;}.box1 {font-size: 26px;}Hello World!Hello World!三.ID选择器Document#box{color: green;}Hello World!四.通配符选择器Document*{ma…

aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?

OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文&#xff01;)命令行界面&#xff1a;openssl aes-256-cbc -salt -in filename -out filename.encPython以PyCrypto包的形式支持AES&#xff0c;但它只提供工具。如何使用Python / PyCrypto解密使用OpenSSL加密的文件&#…

什么是Hive

Hive 是建立在 Hadoop 上的数据仓库基础构架。 它提供了一系列的工具&#xff0c;可以用来进行数据提取转化加载&#xff08;ETL &#xff09;&#xff0c;这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。 Hive 定义了简单的类 SQL 查询语言&#xff0c…

VUE-搜索过滤器

VUE非常实用的搜索过滤&#xff0c;喜欢点个赞哦 废话不多说&#xff0c;先来看看效果 1 引入vue <script src"https://cdn.jsdelivr.net/npm/vue"></script>2 HTML <div id"app"><input v-modelsearch /><ul v-if"search…

单选按钮必填会有红色选中提示吗_为什么单选按钮和复选框不能共存?

以下内容由摹客团队翻译整理&#xff0c;仅供学习交流&#xff0c;摹客设计协作一站式云平台&#xff0c;从产品、设计到开发&#xff0c;摹客来解决。单选按钮和复选框长期以来一直都是容易导致用户困惑的组件。这两个组件通常用于相同的情景下&#xff0c;但看起来又完全不同…

用计算机进行服装设计,电脑服装设计(10制版1班)

《电脑服装设计》课程教学大纲课程名称:电脑服装设计(Corldraw和Photoshop)课程代码:10617313总学时&#xff1a;68课时适用专业&#xff1a;10制版方向学生开课单位&#xff1a;时装设计学院一、讲课内容第一章 CORELDROW软件整体的介绍第一节绪论, 与其他图形绘制软件的区别及…

程序包org.junit.jupiter.api不存在

在跑项目的时候遇到这个问题&#xff0c;去看pom文件一切正常&#xff0c;也引入了这个依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope&…

thrift介绍及应用(一)—介绍

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12157151 ------------------------------------------------------------------------------------ 一、概述 Thrift是Apache下的一个子项目&#xff0c;最早是Facebook的项目&#xff0c;后来Facebook提供给Apa…

matlab双目相机标定校正_基于双目视觉的无人机避障算法(一)

讲述在10月到12月所做的所有工作对于一个无人机自主避障来说&#xff0c;存在着以下流程&#xff1a;感知&#xff1a;障碍物检测、行人检测、目标检测SLAM&#xff1a;为无人机提供位置估计&#xff0c;构建稀疏环境地图路径规划&#xff1a;规划一条从当前位置到目标位置的移…

计算机无法播放,如果无法播放计算机mp4文件怎么办?

FireStar365接受1. 下载并安装最新版本的视频播放器(例如: Storm Video).2. 在硬盘中找到MP4视频文件.3. 右键单击该文件&#xff0c;然后选择打开方法“ Storm Video”.4. 可以双击打开页面.zxc942128835将mp4链接到计算机&#xff0c;打开磁盘&#xff0c;单击菜单栏上的工具…

thrift介绍及应用(二)—简单应用

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12162131 ----------------------------------------------------------------------------------- 【接上文“thrift介绍及应用&#xff08;一&#xff09;—介绍”】 六、一个最简单的实例 Thrift文件&#xf…

打游戏的教育意义

夜色已深&#xff0c;一个男孩子还在打游戏。门忽然开了&#xff0c;妈妈走了进来&#xff0c;她把一碗阳春面摆在桌子上。说&#xff1a;"歇息一会儿&#xff0c;趁热把这碗面吃了吧。"孩子嗯了一声&#xff0c;眼睛没有离开屏幕。妈妈生怕打搅孩子&#xff0c;悄悄…

python快速编程入门课本第六章_python编程快速上手第六章实践项目参考code

代码如下&#xff1a; 题目的意思是通过一个函数将列表的列表显示在组织良好的表格中&#xff0c;每列右对齐 tableData [[apples, oranges, cherries, banana], [Alice, Bob, Carol, David], [dogs, cats, moose, goose]]apples Alice dogs oranges Bob cats cherries Carol …

计算机硬件配置组件,配置vcenter server的硬件(默认指windows版本的)

一般来说vcenter的硬件需求与它管理的主机和VM有直接关系1. vcenter server的最低硬件配置Two 64-bit CPUs or a single dual-core 64-bit CPU.2 GHz processor or faster.4 GB of RAM or more.4 GB of free disk space.A network adapter (Gigabit Ethernet strongly recommen…

标准评分卡分数计算原理_评分卡的形式、刻度及应用场景

&#xfeff; 看到有伙伴提问&#xff1a;①我们的评分卡做好后&#xff0c;后续的使用策略是什么呀&#xff0c;都有哪些方向&#xff1f; ②评分卡分数切割点如何定&#xff0c;制定的业务逻辑是什么&#xff1f;其实&#xff0c;这个问题不好回答&#xff0c;也好回答。一方…