spring+mybatis實現讀寫分離

springmore-core

spring+ibatis實現讀寫分離

  • 特點
    無縫結合spring+ibatis,對于程序員來說,是透明的
    除了修改配置信息之外,程序的代碼不需要修改任何東西
    支持spring的容器事務

  • 規則:
  1. 基于spring配置的容器事務
  2. 讀寫事務到主庫
  3. 只讀事務到從庫
  4. 如果沒有配置事務,更新語句全部到主庫,查詢語句均衡到從庫
    實現源碼:https://gitcafe.com/tangyanbo/springmore
    下載spring-core即可
  • 快速入門
    maven依賴
<dependency><groupId>org.springmore</groupId><artifactId>springmore-core</artifactId><version>1.0.0</version>
</dependency>

dataSource配置(applicationContext.xml中)

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- C3P0連接池配置 --><bean id="master" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass"><value>com.mysql.jdbc.Driver</value></property><property name="jdbcUrl"><value>jdbc:mysql://192.168.1.246:3306/db1</value></property><property name="user"><value>ysb</value></property><property name="password"><value>ysb</value></property><property name="initialPoolSize"><value>20</value></property><property name="minPoolSize"><value>20</value></property><property name="maxPoolSize"><value>200</value></property><property name="maxIdleTime"><value>255000</value></property></bean><bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass"><value>com.mysql.jdbc.Driver</value></property><property name="jdbcUrl"><value>jdbc:mysql://192.168.1.246:3306/db2</value></property><property name="user"><value>ysb</value></property><property name="password"><value>ysb</value></property><property name="initialPoolSize"><value>20</value></property><property name="minPoolSize"><value>20</value></property><property name="maxPoolSize"><value>200</value></property><property name="maxIdleTime"><value>255000</value></property></bean><bean id="dataSource3" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass"><value>com.mysql.jdbc.Driver</value></property><property name="jdbcUrl"><value>jdbc:mysql://192.168.1.246:3306/db3</value></property><property name="user"><value>ysb</value></property><property name="password"><value>ysb</value></property><property name="initialPoolSize"><value>20</value></property><property name="minPoolSize"><value>20</value></property><property name="maxPoolSize"><value>200</value></property><property name="maxIdleTime"><value>255000</value></property></bean><bean id="dataSource" class="org.springmore.core.datasource.DynamicDataSource"><property name="master" ref="master" />     <property name="slaves"><list><ref bean="dataSource2"/><ref bean="dataSource3"/></list>         </property></bean>
</beans>

整合mybatis配置(applicationContext.xml中)

    <!-- ibatis3 工廠類 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:sqlMapConfig.xml" /></bean><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory" /></bean><bean id="dynamicSqlSessionTemplate" class="org.springmore.core.datasource.DynamicSqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionTemplate" /></bean>

事務配置(applicationContext.xml中)

    <!-- 定義單個jdbc數據源的事務管理器 --><bean id="transactionManager"class="org.springmore.core.datasource.DynamicDataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 以 @Transactional 標注來定義事務  --><tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true" />        <!-- 配置事務的傳播特性 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="insert*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="delete*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="update*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="proc*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="select*" read-only="true" /><tx:method name="*" read-only="false" /><!-- <tx:method name="*" read-only="true" /> --></tx:attributes></tx:advice><!-- 那些類的哪些方法參與事務 --><aop:config><aop:pointcut id="allManagerMethod" expression="execution(* org.springmore.core.dao..*(..))" /><aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" /></aop:config>

dao代碼示例:

@Repository("UserMapperImpl")
public class UserMapperImpl implements UserMapper{@Autowiredprivate DynamicSqlSessionTemplate sqlSessionTemplate;//從庫public List<User> selectByUserNameAndPwd(User user) {return sqlSessionTemplate.selectList("selectByUserNameAndPwd", user);}//主庫public void insert(User user) { sqlSessionTemplate.insert("insert", user);      }
}

轉載于:https://www.cnblogs.com/tangyanbo/p/4601220.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257130.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257130.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257130.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DEV C++如何不需要通過建項目可以調試程序

1點擊文件 2、開始寫一段類的程序 #include<iostream>using namespace std;class Point //點類定義 { int x,y; //點的x和y坐標public: void lnitPoint(int,int); //設置坐標 int GetX(){ return x;} //取x坐標 int GetY() {return y;} //取y坐標 void …

創建數據庫

先創建數據庫&#xff1a; CREATE DATABASE SCUTCS; 接著&#xff0c;創建表&#xff1a; CREATE TABLE STUDENT ( SNO CHAR(7) NOT NULL, SNAME VARCHAR(8) NOT NULL, SEX CHAR(2) NOT NULL, BDATE DATE NOT NULL, HEIGHT DEC(5,2) DEFAULT 000.00, PRIMARY KEY(SNO) ); 然后插…

2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結

2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結 教材學習內容總結 作為我們處理器實現的運行實例&#xff0c;因為受x86-64指令集的啟發&#xff0c;它被俗稱為“x86”&#xff0c;所以我們稱我們的指令集為“Y86-64”&#xff0c;與“x86-64”相比&#xff0c;Y…

[學習筆記]面向對象VS面向過程

1.編程范式 為了實現同一個任務不同的編程方式類別稱為編程范式 2.面向過程編程 面向過程從上到下運行&#xff0c;將一個大問題分解成小問題&#xff0c;再將小問題繼續分解成足夠簡單在一定范圍內可以解答的小問題為止&#xff01;3.面向對象編程 面向對象簡稱為OOP&#x…

批處理系統和分時系統各具有什么特點?為什么分時系統的響應比較快?

批處理系統的特點如下 優點&#xff1a;系統的吞吐率較高。 &#xff08;作業的調度由系統控制&#xff0c;并允許幾道程序同時投入運行&#xff0c;只要合理的搭配作業&#xff08;例如把計算量大的作業和I/O量大的作業搭配&#xff09;就可以充分利用系統的資源&#xff09; …

怎么解決word敲空格刪掉后面的字的問題

將word左下角的改寫改為插入&#xff0c;或者筆記本的按下insert的按鈕

Dubbo原理解析-監控

Dubbo發布代碼中&#xff0c;自帶了一個簡易的監控中心實現。對于一般的小業務這個監控中心應該能夠滿足需求&#xff0c;對于那些大業務量的大公司一般都會有自己的監控中心&#xff0c;更加豐富的功能如常用的報警短信通知等等。這章講解分析使得讀者能夠了解一般的監控中心實…

學習筆記(04):Python網絡編程并發編程-什么是socket

立即學習:https://edu.csdn.net/course/play/24458/296233?utm_sourceblogtoedu 1.什么是網絡編程&#xff1f; 答&#xff1a;網絡編程也叫做socket編程即套接字編程&#xff0c;基于遵循socket套接字的規定進行的編程 2.什么是socket&#xff1f; 答&#xff1a;socket就是…

mysql 獲取自增主鍵

MyBatis 3.2.6插入時候獲取自增主鍵方法有二以MySQL5.5為例&#xff1a;方法1&#xff1a;<insert id"insert" parameterType"Person" useGeneratedKeys"true" keyProperty"id">insert into person(name,pswd) values(#{name},#…

虛擬主機用戶ftp和apache用戶文件互操作權限解決方法

方法1.用戶組控制方法 先給所有的虛擬主機主機中的虛擬用戶(ftp用戶)加入到apache這個組.然后設置umask為002.這樣用戶和組都有讀寫執行權限。這個是比較容易的方法.但不安全。不同的用戶可以刪除對方的文件&#xff0c;因為是同一個組,組有讀寫執行的權限. 方法2.使用linux高級…

數學的列向量內積計算方法

x(cos x1 y(-sinx1sinx1) cosx1) [x,y]cosx1*(-sinx1)sinx1*cosx1

遍歷枚舉

/// <summary> /// 卡卷類型 /// </summary> public enum CardTypeEnum {代金券 1,優惠卷 2 } foreach (int myCode in Enum.GetValues(typeof(CardTypeEnum))){string strName Enum.GetName(typeof(CardTypeEnum), myCode); //文本 keystring strValue myCode…

前端工程師必須要知道的SEO技巧(2):制作比設計還要漂亮的代碼(內容和語義化代碼)上...

前言:現在的網站設計,大多數不僅僅要求美觀,前端代碼往往發揮著重要的作用.這意味著很大一部分搜索引擎優化或搜索引擎優化責任應該落在設計師身上.然而,有大量的網頁設計師不理解這個問題以及如何在建立一個網站初期就達到是完全的搜尋引擎優化.當然,要達到這個高度,肯定離不開…

學習筆記(05):Python網絡編程并發編程-基于socket實現簡單套接字通信

立即學習:https://edu.csdn.net/course/play/24458/296234?utm_sourceblogtoedu 1.服務器端 #以打電話通訊為例子進行說明 #導入相應的模塊 import socket#1、設置套接字的類型以及協議(買手機)&#xff0c;其實就是設置一個套接字&#xff0c;phone即為一個套接字 #設置為網…

JeeSite 4.0 說說前端的那些事

2019獨角獸企業重金招聘Python工程師標準>>> 引言 一個不得不說的話題&#xff0c;經過近幾年的發展&#xff0c;Web前端開發已經不是一個新有的崗位了&#xff0c;前端技術發展非常迅速&#xff0c;技術更新換代也很快&#xff0c;對于前端工程師來說是一個很大的挑…

筆記本換固態硬盤

我換固態硬盤是讓熟人修電腦換的&#xff0c;結果跟我要100塊錢的服務費&#xff0c;在這我絕得太坑了&#xff0c;所以建議大家自己換固態硬盤 1、首先自己在網上買一塊相對較好的固態硬盤&#xff0c;盡量買大點 2、還需要買一個硬盤的托盤&#xff0c;這個是直接換筆記本上的…

Bootstrap富文本編輯器-bootstrap-wysiwyg

在進行英語試題的錄入中&#xff0c;因為英語試題經常會有類似如下的試題&#xff1a; My friend watches dragon boat races at the Dragon Boat Festival.(對劃線部分提問) ——_______ is the Double Ninth Festival? ——It is in October. 在上面的題目中&#xff0c;我們…

學習筆記(06):Python網絡編程并發編程-在簡單套接字基礎上加上通信循環

立即學習:https://edu.csdn.net/course/play/24458/296235?utm_sourceblogtoedu 1.服務器端 #以打電話通訊為例子進行說明 #導入相應的模塊 import socket#1、設置套接字的類型以及協議(買手機)&#xff0c;其實就是設置一個套接字&#xff0c;phone即為一個套接字 #設置為網…

怎么把word轉換pdf,pdf轉換word ,pdf轉換成高清圖片

方法一&#xff1a;一個成套的軟件&#xff0c;包含了&#xff0c;word -->pdf ,Pdf—>word,pdf-->圖片 迅捷PDF在線轉換器 地址在這 &#xff08;http://app.xunjiepdf.com/ &#xff09;&#xff0c; 但是上面這個有個限制&#xff0c;只能轉一定大小的文件&#x…

程序包com.sun.istack.internal不存在

添加一下依賴 <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl --><dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.11</version></dependency&…