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.pswp.cn/news/539288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539288.shtml
英文地址,請注明出處:http://en.pswp.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;也好回答。一方…