先吐槽下博客园,每天都推荐水帖不说,正经的分享技术的博客还他妈的不让上首页,我在那里投入了那么多汗水,什么垃圾东西。
spring+ibatis实现读写分离
特点
无缝结合spring+ibatis,对于程序员来说,是透明的
除了修改配置信息之外,程序的代码不需要修改任何东西
支持spring的容器事务
规则:
基于spring配置的容器事务
读写事务到主库
只读事务到从库
如果没有配置事务,更新语句全部到主库,查询语句均衡到从库
源码地址
qq讨论群:261502547
快速入门
maven依赖
<dependency>
<groupId>org.springmore</groupId>
<artifactId>springmore-core</artifactId>
<version>1.0.0</version>
</dependency>
1
2
3
4
5
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.xsd
http://www.springframework.org/schema/context
http://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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
整合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>
1
2
3
4
5
6
7
8
9
10
11
12
事务配置(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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dao代码示例:
@Repository("UserMapperImpl")
public class UserMapperImpl implements UserMapper{
@Autowired
private DynamicSqlSessionTemplate sqlSessionTemplate;
//从库
public List<User> selectByUserNameAndPwd(User user) {
return sqlSessionTemplate.selectList("selectByUserNameAndPwd", user);
}
//主库
public void insert(User user) {
sqlSessionTemplate.insert("insert", user);
}
}
分享到:
相关推荐
在IT行业中,Spring、SpringMVC和MyBatis是三个非常重要的开源框架,它们分别用于企业级应用的依赖管理、Web层控制和数据持久层操作。本项目将这些框架进行了整合,并进行了数据库读写分离的配置,以提高系统的稳定...
本项目结合了Spring、SpringMVC、MyBatis和Maven等技术,与MySQL数据库一起实现读写分离,以提升应用的处理能力。下面将详细解释这些技术及其在读写分离中的作用。 首先,Spring是一个开源的Java平台,它提供了全面...
在现代Web应用开发中,数据库读写分离和缓存技术是提高...通过以上组件的整合,项目能够实现高效、稳定的数据库读写分离和缓存策略,从而提高系统的响应速度和并发处理能力。同时,这种架构也便于后期的维护和扩展。
Druid是阿里巴巴开源的数据库连接池,它不仅提供了性能监控、SQL解析、防SQL注入等功能,还支持多数据源的配置,非常适合用于实现读写分离。在SpringBoot中,我们可以通过Druid的数据源代理,设置主数据源(用于写...
通过这个项目,你可以深入理解Spring全家桶和Mybatis如何协同工作,以及如何在实际项目中实现数据库的分库分表策略。同时,博文链接提供的详细教程会进一步帮助你理解和实践这些概念。在学习过程中,务必动手实践,...
之后,每次API请求都会携带JWT,Redis和Spring Security共同完成身份验证,MyBatis则负责与MySQL数据库的交互,实现数据的读写操作。这样的设计提高了系统的安全性、性能和可扩展性,是现代Web应用开发中的典型架构...
在IT领域,尤其是在Java开发中,Spring、Mybatis和Druid是常见的开源框架和技术,而POI则是处理Microsoft Office文档的库。以下是对这些技术及其整合应用的详细说明: 1. **Spring框架**:Spring是一个全面的企业级...
【标题】"spring+mybatis+sharding-jdbc"是一个基于Spring框架,结合MyBatis持久层框架和Sharding-JDBC分库分表组件的示例项目。该项目旨在展示如何在实际开发中处理大数据量场景下的数据库扩展问题,通过水平扩展...
本项目基于Java、SpringBoot、MyBatis以及ShardingJDBC实现了一个分库分表的解决方案,旨在帮助开发者理解并掌握这一技术。以下是关于这些技术的详细介绍: **Java**: Java是一种广泛使用的面向对象的编程语言,...
在Spring Boot项目中,MyBatis可以作为数据访问层,通过Spring Boot的自动配置,实现与数据库的无缝对接。 Redis则是一个开源的、高性能的键值数据库,常被用作缓存服务。它的读写速度非常快,适合处理大量数据的...
SpringMVC、德鲁伊(Druid)、MyBatis 和 MySQL 是四个在Java Web开发中常用的组件,它们各自承担着不同的职责,而将它们结合在一起则可以构建出一个高效、可扩展的数据库读写分离解决方案。 SpringMVC是Spring框架...
Spring MVC是Spring框架的一个子模块,专门用于构建Web应用程序,它通过模型-视图-控制器(Model-View-Controller,MVC)模式实现了业务逻辑、数据处理和用户界面的分离。 MyBatis是一个持久层框架,它将SQL语句与...
在这个项目中,MySQL作为后端数据存储,存储了所有应用程序需要的数据,与MyBatis配合实现数据的读写。 Log4jdbc是Apache Log4j的一个扩展,专门用于记录Java应用程序执行的SQL语句。它可以在不改变代码的情况下,...
Apache POI是Apache软件基金会的开源项目,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在我们的场景中,我们将主要关注POI对于Excel的处理能力,它能读取、创建、修改Excel文件,并且提供...
本文将深入探讨如何利用Spring、SpringMVC和MyBatis这三大开源框架,构建一个高效、稳定的湖北电信渠道营销支撑系统,并结合MySQL数据库,实现数据的持久化存储。 首先,Spring框架作为Java企业级应用的核心,提供...
本项目采用了Spring 4、Spring MVC、MyBatis 3、Redis 2.8 和 Spring Session 进行集成,构建了一个高效且可扩展的系统。下面将详细解释这些组件及其在项目中的作用。 1. **Spring 4**: Spring 是一个开源的应用...
Sharding-JDBC是阿里巴巴开源的轻量级Java框架,它可以在不修改业务代码的情况下,通过配置实现数据库的水平扩展,支持分库分表、读写分离等功能。 接下来,我们详细探讨如何使用Spring、MyBatis和Sharding-JDBC来...
2. **引入依赖**:在你的项目中,你需要引入Spring、MyBatis和Sharding-JDBC的相关依赖库。这通常通过Maven或Gradle的依赖管理来完成。例如,在Maven的pom.xml文件中,添加如下依赖: ```xml <groupId>org....
【标题】"spring + springMVC + mybatis + poi"是一个经典的Java企业级开发组合,它们共同构建了一个功能强大的后端系统。Spring框架是整个体系的基础,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得...
本项目涉及的是一个基于Java的Web开发框架集成,包括Spring MVC、Spring、Mybatis以及Redis。以下是对这些技术及其集成的详细阐述: 1. **Spring MVC**: Spring MVC是Spring框架的一部分,它是一个模型-视图-控制...