⑴ mybatis jar包下載
可畝粗以按照找個教程到官做森網下載Mybatis官網下載多個純耐畝版本jar步驟
⑵ 如何使用SqlSessionTemplate
工作中,需要學習一下MyBatis sqlSession的產生過程,翻看了mybatis-spring的源碼,閱讀了一些mybatis的相關doc,對mybatis sqlSession有了一些認知和理解,這里簡單的總結和整理一下。
首先, 通過翻閱源碼,我們來整理一下mybatis進行持久化操虧彎碧作時重要的幾個類:
SqlSessionFactoryBuilder:build方法創建SqlSessionFactory實例。
SqlSessionFactory:創建SqlSession實例的工廠。
SqlSession:用於執行持久化操作的對象,類似於jdbc中的Connection。
SqlSessionTemplate:MyBatis提供的持久層訪問模板化的工具,線程安全,可通過構造參數或依賴注入SqlSessionFactory實例。
Hibernate是與MyBatis類似的orm框架,這里與Hibernate進行一下對比,Hibernate中對於connection的管理,是通過以下幾個重要的類:
SessionFactory:創建Session實例的工廠,類似於MyBatis中的SqlSessionFactory。
Session:用來執行持久化操作的對象,類似於jdbc中的Connection。
HibernateTemplate:Hibernate提供的持久層訪問模板化的工具,線程安全,可通過構造參數或依賴注入SessionFactory實例。
在日常的開發中,我們經常需要這樣對MyBatis和Spring進行集成,把sqlSessionFactory交給Spring管理,通常情況下,我們這樣配置:
?
1
2
3
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
通過上面的配置,Spring將自動創建一個SqlSessionFactory對象,其中使用到了org.mybatis.spring.SqlSessionFactoryBean,其 是MyBatis為Spring提供的用於創建SqlSessionFactory的類,將在Spring應用程序的上下鬧脊文建議一下可共享的銷舉 MyBatis SqlSessionFactory實例,我們可以通過依賴注入將SqlSessionFactory傳遞給MyBatis的一些介面。
如果通過Spring進行事務的管理,我們需要增加Spring註解的事務管理機制,如下配置:
?
1
2
3
4
5
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven/>
這樣,我們就可以使用Spring @Transactional註解,進行事務的控制,表明所注釋的方法應該在一個事務中運行。 Spring將在事務成功完成後提交事務,在事務發生錯誤時進行異常回滾,而且,Spring會將產生的MyBatis異常轉換成適當的 DataAccessExceptions,從而提供具體的異常信息。
下面,我們通過分析SqlSessionUtils中getSession的源碼,來詳細的了解一下sqlSession的產生過程,源碼如下:
public static SqlSession getSqlSession(SqlSessionFactory sessionFactory, ExecutorType executorType, exceptionTranslator) {
notNull(sessionFactory, "No SqlSessionFactory specified");
notNull(executorType, "No ExecutorType specified");
SqlSessionHolder holder = (SqlSessionHolder) getResource(sessionFactory);
if (holder != null && holder.isSynchronizedWithTransaction()) {
if (holder.getExecutorType() != executorType) {
throw new ("Cannot change the ExecutorType when there is an existing transaction");
}
holder.requested();
if (logger.isDebugEnabled()) {
logger.debug("Fetched SqlSession [" + holder.getSqlSession() + "] from current transaction");
}
return holder.getSqlSession();
}
if (logger.isDebugEnabled()) {
logger.debug("Creating a new SqlSession");
}
SqlSession session = sessionFactory.openSession(executorType);
// Register session holder if synchronization is active (i.e. a Spring TX is active)
//
// Note: The DataSource used by the Environment should be synchronized with the
// transaction either through DataSourceTxMgr or another tx synchronization.
// Further assume that if an exception is thrown, whatever started the transaction will
// handle closing / rolling back the Connection associated with the SqlSession.
if (isSynchronizationActive()) {
Environment environment = sessionFactory.getConfiguration().getEnvironment();
if (environment.getTransactionFactory() instanceof ) {
if (logger.isDebugEnabled()) {
logger.debug("Registering transaction synchronization for SqlSession [" + session + "]");
}
holder = new SqlSessionHolder(session, executorType, exceptionTranslator);
bindResource(sessionFactory, holder);
registerSynchronization(new SqlSessionSynchronization(holder, sessionFactory));
holder.(true);
holder.requested();
} else {
if (getResource(environment.getDataSource()) == null) {
if (logger.isDebugEnabled()) {
logger.debug("SqlSession [" + session + "] was not registered for synchronization because DataSource is not transactional");
}
} else {
throw new (
"SqlSessionFactory must be using a in order to use Spring transaction synchronization");
}
}
} else {
if (logger.isDebugEnabled()) {
logger.debug("SqlSession [" + session + "] was not registered for synchronization because synchronization is not active");
}
}
return session;
}
上面的getSession方法,會從Spring的事務管理器中獲取一個SqlSession或創建一個新的SqlSession,將試圖從當前事務中得到一個SqlSession,然後,如果配置有事務管理器的工廠並且Spring 的事務管理器是活躍的,它將會鎖定當前事務的SqlSession,保證同步。主要是通過以下幾個步驟進行SqlSession的創建:
它會首先獲取SqlSessionHolder,SqlSessionHolder用於在中保持當前的SqlSession。
如果holder不為空,並且holder被事務鎖定,則可以通過holder.getSqlSession()方法,從當前事務中獲取sqlSession,即 Fetched SqlSession from current transaction。
如果不存在holder或沒有被事務鎖定,則會創建新的sqlSession,即 Creating a new SqlSession,通過sessionFactory.openSession()方法。
如果當前線程的事務是活躍的,將會為SqlSession注冊事務同步,即 Registering transaction synchronization for SqlSession。
⑶ SpringMVC+Spring+Mybatis實踐總結
本文源碼見 https://github.com/peng66cheng/ssmDemo ,請參考。
最近開發一個後台系統,使用ssm從頭搭建。這次開發,有幾點值得總悶搭結,以便後續開發提高效率。 (此處只提供方法,具體做法還需自行搜索)
1)利用mybatis-generator-core自動生成domain、介面、**Mapper.xml。
2)使用org.mybatis.spring.mapper.MapperScannerConfigurer 和 @MapperScan註解,自動掃描介面注冊。無需開發具體螞櫻拿的實現類。
3)介面 同 **Mapper.xml 參數映射,使用@Param註解。如果參數多於4個,則建議定義參數對象。
參考: http://www.2cto.com/kf/201501/368973.html
http://www.cnblogs.com/wangmingshun/p/5674633.html
1)前端String類型轉為後台Date類型,藉助,編寫自動轉換類。
2)後台Date類型轉為前端String類型,藉助@JsonFormat完成。
參考頌握: http://www.cnblogs.com/lcngu/p/5785805.html
使用maven的profile特性,完成不同配置的打包。
(其他問題待續)
⑷ MyBatisPlus快速入門源碼筆記共享,拿走吧你
為什麼要學習它呢?
答:MyBatisPlus可以節省我們大量工作時間,所有的CRUD代碼它都可以自動化完成!
優點:
1. 易於上手和掌握。
2. sql寫在xml里,便於統一管理和優化。
3. 解除sql與程序代碼的耦合。
4. 提供映射標簽,支持對象與資料庫的orm欄位關系映射
5. 提供對象關系映射標簽,支持對象關系組建維護
6. 提供xml標簽,支持編寫動態sql。
MyBatis Plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
就像 魂斗羅 中的 1P、2P,基友搭配,效率翻倍。
特性:
無侵入 :只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑。
損耗小 :啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作 強大的 CRUD 操作 :內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求 支持 Lambda 形式調用 :通過 Lambda 表達式,方便地編寫各類查詢條件,無需再擔心欄位寫錯。
支持組件自動生成 :支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 Sequence),可自由配置,完美解決主鍵問題。
支持 ActiveRecord 模式 :支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作。
支持自定義全局通用操作 :支持全局通用方法注入( Write once, use anywhere )。
內置代碼生成器 :採用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用 內置分頁插件 :基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於普通 List查詢。
分頁插件支持多種資料庫 :支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫。
內置性能分析插件 :可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢。
內置全局攔截插件 :提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作。
1.1 、引入mybatis-plus相關maven依賴
引入mybatis-plus在spring boot中的場景啟動器
ps:切記不可再在pom.xml文件中引入mybatis與mybatis-spring的maven依賴,這一點,mybatis-plus的官方文檔中已經說明的很清楚了.
1.2、創建數據表
(1)SQL語句
(2) 數據表結構
1.3、 創建java bean
根據數據表新建相關實體類
1 package com.example.demo.pojo
1.4、 配置application.proprties
數據源使用druid
ps:在進行crud實驗之前,簡單對mybatis與mybatis-plus做一個簡單的對比
2.1、mybatis與mybatis-plus實現方式對比
(1)提出問題: 假設我們已存在一張 tbl_employee 表,且已有對應的實體類 Employee,實現 tbl_employee 表的 CRUD操作我們需要做什麼呢?
(2)實現方式: 基於 Mybatis 需要編寫 EmployeeMapper 介面,並手動編寫 CRUD 方法 提供 EmployeeMapper.xml 映射文件,並手動編寫每個方法對應的 SQL 語句. 基於 Mybatis-plus 只需要創建 EmployeeMapper 介面, 並繼承BaseMapper 介面.這就是使用 mybatis-plus 需要完成的所有操作,甚至不需要創建 SQL 映射文件。
2.2、BaseMapper介面介紹
(1)如何理解核心介面BaseMapper?
在使用Mybatis-Plus時,核心操作類是BaseMapper介面,其最終也是利用的Mybatis介面編程的實現機制,其默認提供了一系列的增刪改查的基礎方法,並且開發人員對於這些基礎操作不需要寫SQL進行處理操作(Mybatis提供的機制就是需要開發人員在mapper.xml中提供sql語句),那樣我們可以猜測肯定是Mybatis-Plus完成了BaseMapper介面提供的方法的SQL語句的生成操作。
(2)BaseMapper介面為我們定義了哪些方法?
BaseMapper介面源碼:
(3) mybatis-plus中常用的註解 1
由於我們的數據表名於實體類的類名不一致,並且實體類於數據表還存在欄位名不對應的情況,因此我們需要引入mybatis-plus的註解.
編寫EmployeeMapper介面繼承BaseMapper介面
准備考試環境:
(1)插入
(2)修改
控制台列印出的sql語句
如果我們不設置實體類的email與gender屬性,結果是怎樣的呢?
控制台sql語句:
顯然,mybatis-plus為我們做了非空判斷,空值的話,默認不更新對應的欄位.想一想,這是不是類似於mybatis中的動態sql呢?
這種處理效果又會帶來什麼好處呢?
(3)查詢
selectById方法
selectBatchIds方法
ps:發現該方法底層使用的竟然是sql的in關鍵字
selectByMap方法
(4)刪除
3、不得不提的條件構造器---Wrapper
3.1.wrapper及其子類介紹
(1)Wrapper :條件構造抽象類,最頂端父類,抽象類中提供3個方法以及其他方法.
⑸ 一文教您如何通過 Docker 快速搭建各種測試環境
目錄
一、鏡像加速
Docker 默認是從官方鏡像地址 Docker Hub 下下載鏡像,由於伺服器在國外的緣故,導致經常下載速度非常慢。為了提升鏡像的下載速度,我們可以手動配置國內鏡像加速器,讓下載速度飈起來。
國內的鏡像加速器選項較多,如:阿里雲,DaoCloud 等。
本文主要說說如何配置阿里雲的鏡像加速器。
2.1 登錄阿里雲獲取加速信息
https://dev.aliyun.com/
2.2 配置 Docker
2.2.1 確定 Docker Client 版本
在配置之前,首先需要 確定 Docker Client 的版本,推薦是 1.10.0+ :
2.2.2 配置鏡像加速器
PS: 這里以 CentOS 系統為例,如果你是別的系統,可以參考阿里雲配置加速器官方文檔。
通過修改 daemon 配置文件 /etc/docker/daemon.json 來使用加速器:
執行下面命令:
2.3 驗證一下速度
以下載 mongodb 為例,看下速度:
配置了加速器過後,速度終於飈起來了。
二、快速安裝&搭建 Mysql 環境
本節中,我們將學習如何通過 Docker 快速安裝與搭建 Mysql 環境。
2.1 下載 Mysql 鏡像
這里以 Mysql 5.7 為例:
下載完成後,通過 docker images 檢查一下鏡像是否下載成功:
2.2 先以最簡單方式啟動
先以簡單的方式啟動:
命令執行完成後,你也可以通過 docker ps 命令來確認下容器是否啟動成功。若成功,我們需要將容器中的目錄文件復制到宿主機中,分別包括:
完成這一切後,讓我們將剛剛運行的容器刪除掉。
PS: mysql 是我們運行容器時,指定的名稱,當然,你也可以先執行 docker ps , 通過容器 ID 來刪除。
2.3 正式運行 Mysql 容器
接下來,正式運行 Mysql 容器:
其他不變,額外添加了兩個掛載子命令:
執行命令完成後,查看下容器是否啟動:
可以看到,容器運行成功
2.4 通過 Mysql 客戶端連接一下試試
通過 MySQL 客戶端連接剛剛創建的 mysql, 看看能否連接成功:
連接成功了!
三、快速安裝&搭建 Redis 環境
本節中,我們將學習如何利用 Docker 安裝&搭建 Redis 環境。
3.1 下載 Redis 鏡像
首先拉取 Redis 鏡像, 這里我選擇的是 redis:alpine 輕量級鏡像版本:
下載完成後,通過 docker images 確認鏡像是否已經下載到本地:
3.2 運行 Redis 容器
命令說明:
命令運行完成後,查看容器是否啟動成功:
可以看到 redis 容器已經啟動成功了!
3.3 連接剛剛創建好的容器
執行如下命令,連接 redis:
四、快速安裝&搭建 MongDB 環境
本節中,我們將學習如何通過 Docker 快速安裝與搭建 MongoDB 環境。
4.1 下載 MongoDB 鏡像
這里以 mongo 4 版本為例,下載鏡像:
下載完成後,確認一下鏡像是否下載成功:
4.2 運行 MongoDB 鏡像
下載成功後,運行 mongoDB 鏡像:
執行命令完成後,查看下容器是否啟動:
4.3 添加管理員賬號
執行命令:
然後,創建一個擁有最高許可權 root 賬號:
創建成功後,你會看到 Successfully added user :
4.4 用新創建的 root 賬戶連接,測試一下
連接成功後,我們可以執行相關 sql:
顯示所有的資料庫:
使用某個資料庫:
輸入命令 exit ,退出連接!
五、快速安裝&搭建 Elasticsearch 環境
本節中,我們將學習如何通過 Docker 快速安裝與搭建 Elasticsearch 環境。
5.1 下載 Elasticsearch 鏡像
這里以 Elasticsearch 6.5.0 為快速安裝&搭建 Elasticsearch 環境例:
下載完成後,通過 docker images 檢查一下鏡像是否下載成功:
5.2 先簡單運行 Elasticsearch 鏡像
下載成功後,簡單運行 Elasticsearch 鏡像:
命令執行完成後,你也可以通過 docker ps 命令來確認下容器是否啟動成功。
可以看到 es 容器運行成功了,接下來,進入容器中:
安裝 analysis-ik 中文分詞插件:
PS: es 從 v5.5.1 版本開始支持自帶的 es 插件命令來安裝,如果你安裝的版本不是 6.5.0,需要將命令中的版本號修改一下,具體參考 https://github.com/medcl/elasticsearch-analysis-ik
安裝成功後,退出容器:
刪除剛剛運行的容器:
PS: 當然了,你也可以通過容器的 ID 來刪除。
5.3 復制相關文件
5.4 修改 es 相關配置
進入我們剛剛指定的 config 配置目錄,修改 jvm.options 文件:
PS: 因為小哈測試伺服器就 2G 內存,這里我改成了 JVM 內存佔用 300m, 如果你的內存夠用,可不用改。
修改 elasticsearch.yml 文件, 添加如下配置:
解釋一下添加的配置,設置節點為 master 節點,並允許跨域訪問,以便後面使用 head 插件圖形化界面訪問。
5.5 運行 Elasticsearch 容器
這次,我們額外添加了相關掛載命令:
5.6 測試一下,瞅瞅 es 是否能夠正常訪問
測試一下,看 es 是否啟動成功:
OK, 到此 es 的單節點環境就搭建好了!
歡迎工作一到五年的Java工程師朋友們加入Java程序員開發: 721575865
群內提供免費的Java架構學習資料(裡面有高可用、高並發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間「來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
⑹ 為什麼搜不到mybatis-spring.jar這個框架整合包了呢,是不是最新的spring3支持了
到maven官方查哦。
<ahref="http://search.maven.org">官方連裂正衡接<a>
<ahref="http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.mybatis%22%20AND%20a%3A%22mybatis-spring%22"><a>肆做
url容易攔清隱截,你復制吧。
⑺ org.mybatis.spring.sqlsessionfactorybean 是哪個包的
SqlSessionFactoryBean
在基猜櫻本的 MyBatis 中,session 工廠可以卜談使用 SqlSessionFactoryBuilder 來創建。而在 MyBatis-Spring 中,則使用 SqlSessionFactoryBean 來替型兆碰代。
⑻ SpringBoot整合Mybatis自定義攔截器不起作用解決方案!!!
該方式和Spring無關,是通過反射的形式創建插件對象,此時雀猜會執行 org.apache.ibatis.plugin.Interceptor#setProperties 方法,以讀取配置參數。
在resource目錄下配置mybatis的全局配置:
然後找到了 springboot配置多數據源後mybatis攔截器失效 文章,說是自定義配置了數據源導致了攔截器頃斗型失效。
源碼位置: org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
上面源碼中:自動注入了 Interceptor[] 數組(我們只需將mybatis的自定義攔截器對象放入到Spring容器中)。後續放入了 sqlSessionFactory 中。
但是項目中雖然自定義配置了 sqlSessionFactory 類,但卻未設置 factory.setPlugins(this.interceptors); 。導致即使將自定義攔截器放入到Spring容器,但卻不生效。
這種情況下,mybatis自定義攔截器會被執行兩次。即在mybatis-config.xml配置的攔截器銷廳會通過反射的方式創建攔截器,放入Spring容器的攔截器也會被初始化。
源碼位置: org.mybatis.spring.SqlSessionFactoryBean#buildSqlSessionFactory
最終會執行到:
⑼ Mybatis-Spring:SqlSessionFactoryBean
環境:mybatis-spring 2.0.3
可以通過如下方式向在Spring中集成Mybatis,通余擾凳過向Spring注冊 SqlSessionFactoryBean 和 @MapperScan 啟用Mybatis的功能
Mybatis利用Spring提供的 BeanFactory 介面,實現豎旅了 SqlSessionFactoryBean ,簡單來說它就是一個構建 SqlSessionFactory 的工廠類,雖然注冊的是 SqlSessionFactoryBean ,但是它生產的對象也會注冊李空到Spring容器中
簡而言之,Mybatis藉助 SqlSessionFactoryBean 完成了在不集成Spring的情況下 SqlSessionFactory 的創建,同時可以藉助這個類裝配 Interceptor 、 TypeHandler 等組件
⑽ 求《深入淺出MyBatis技術原理與實戰》全文免費下載百度網盤資源,謝謝~
《深入淺出MyBatis技術原理與實戰》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1LxgP-ibmyXjclY23yXMN-Q