四.SpringBoot集成实例系列-注解型多数据源mybatis
2017-07-18 19:59
411 查看
文章列表
本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。
具体文章系列如下:
一.SpringBoot集成实例系列-xml型单数据源mybatis
二.SpringBoot集成实例系列-xml型多数据源mybatis
三.SpringBoot集成实例系列-注解型单数据源mybatis
四.SpringBoot集成实例系列-注解型多数据源mybatis
五.SpringBoot集成实例系列-邮件email
六.SpringBoot集成实例系列-单数据源mongodb
七.SpringBoot集成实例系列-多数据源mongodb
八.SpringBoot集成实例系列-缓存redis
九.SpringBoot集成实例系列-数据库cassandra
十.SpringBoot集成实例系列-定时任务scheduler
十一.SpringBoot集成实例系列-消息队列kafka
十二.SpringBoot集成实例系列-消息推送websocket
上一篇文章我们简单实现了注解型的单数据源mybatis.本章将实现不同数据源即多数据源的注解型mybatis。整个代码实现与多数据源的xml型mybatis相差不大。
建表语句见博文或源码
配置多个数据源如:
spring.datasource.test1...
spring.datasource.test2...
以此类推
注解型的,配置文件去除mybatis相关配置。
1) @MapperScan(basePackages = "com.lm.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
配置需要扫描的mapper接口
2) @Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test1")
@Primary
定义datasource,以及已application.properties配置文件数据源对应的名称
@Primary,当多个数据源时,需要定义一个主数据源,即优先考虑被注解的对象注入
相对xml型的多数据源,去除配置数据源对应的myabtis中mapper.xml路径
将mapper.xml文件的相关sql脚本信息,移植到通过mapper接口注解来实现。
DataSource2Config文件
User2Mapper接口
本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。
具体文章系列如下:
一.SpringBoot集成实例系列-xml型单数据源mybatis
二.SpringBoot集成实例系列-xml型多数据源mybatis
三.SpringBoot集成实例系列-注解型单数据源mybatis
四.SpringBoot集成实例系列-注解型多数据源mybatis
五.SpringBoot集成实例系列-邮件email
六.SpringBoot集成实例系列-单数据源mongodb
七.SpringBoot集成实例系列-多数据源mongodb
八.SpringBoot集成实例系列-缓存redis
九.SpringBoot集成实例系列-数据库cassandra
十.SpringBoot集成实例系列-定时任务scheduler
十一.SpringBoot集成实例系列-消息队列kafka
十二.SpringBoot集成实例系列-消息推送websocket
上一篇文章我们简单实现了注解型的单数据源mybatis.本章将实现不同数据源即多数据源的注解型mybatis。整个代码实现与多数据源的xml型mybatis相差不大。
1.需求
输出库test中表user的记录和库test2中表user的记录总和建表语句见博文或源码
2.技术要点
2.1 springboot集成mybatis配置
配置多个数据源如:
spring.datasource.test1...
spring.datasource.test2...
以此类推
注解型的,配置文件去除mybatis相关配置。
2.2 多数据实现
1) @MapperScan(basePackages = "com.lm.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
配置需要扫描的mapper接口
2) @Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test1")
@Primary
定义datasource,以及已application.properties配置文件数据源对应的名称
@Primary,当多个数据源时,需要定义一个主数据源,即优先考虑被注解的对象注入
相对xml型的多数据源,去除配置数据源对应的myabtis中mapper.xml路径
2.3 mapper接口配置
将mapper.xml文件的相关sql脚本信息,移植到通过mapper接口注解来实现。
3.代码实现
3.1 项目结构
3.2 properties配置文件
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver spring.datasource.test1.url = jdbc:mysql://192.168.32.128:3306/test?useUnicode=true&characterEncoding=utf-8 spring.datasource.test1.username = root spring.datasource.test1.password = root spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver spring.datasource.test2.url = jdbc:mysql://192.168.32.128:3306/test2?useUnicode=true&characterEncoding=utf-8 spring.datasource.test2.username = root spring.datasource.test2.password = root
3.3 datasource数据源实现
DataSource1Config文件package com.lm.datasource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; /** * test1数据源 * * @author liangming.deng * @date 2017年6月30日 * */ @Configuration @MapperScan(basePackages = "com.lm.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate") public class DataSource1Config { @Bean(name = "test1DataSource") @ConfigurationProperties(prefix = "spring.datasource.test1") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "test1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean(name = "test1TransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test1SqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
DataSource2Config文件
package com.lm.datasource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; /** * test2数据源 * * @author liangming.deng * @date 2017年6月30日 * */ @Configuration @MapperScan(basePackages = "com.lm.mapper.test2", sqlSessionTemplateRef = "test2SqlSessionTemplate") public class DataSource2Config { @Bean(name = "test2DataSource") @ConfigurationProperties(prefix = "spring.datasource.test2") public DataSource testDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "test2SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean(name = "test2TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test2SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
3.4 User1Mapper和User2Mapper接口
User1Mapper接口package com.lm.mapper.test1; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.lm.entity.UserEntity; import com.lm.enums.SexEnums; /** * mybatis中mapper接口 * @author liangming.deng * @date 2017年6月21日 * */ public interface User1Mapper { @Select("select * from user") @Results({ @Result(id=true,property="id",column="id"), @Result(property="userName",column="userName"), @Result(property="nickName",column="nickName"), @Result(property="passWord",column="passWord"), @Result(property="email",column="email"), @Result(property="regTime",column="regTime"), @Result(property="sexEnums",column="sex",javaType=SexEnums.class)}) List<UserEntity> getAll(); @Select("select * from user where id=#{id}") @Results({ @Result(id=true,property="id",column="id"), @Result(property="userName",column="userName"), @Result(property="nickName",column="nickName"), @Result(property="passWord",column="passWord"), @Result(property="email",column="email"), @Result(property="regTime",column="regTime"), @Result(property="sexEnums",column="sex",javaType=SexEnums.class)}) UserEntity getUserById(Long id); @Insert("INSERT INTO user(userName,nickName,passWord,email,regTime,sex) " + "VALUES(#{userName}, #{nickName}, #{passWord}, #{email}, #{regTime}, #{sex}) ") void insert(UserEntity user); @Update("UPDATE user SET userName=#{userName},nickName=#{nickName} where id=#{id}") void update(UserEntity user); @Delete("DELETE FROM user where id=#{id}") void delete(Long id); }
User2Mapper接口
package com.lm.mapper.test2; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.lm.entity.UserEntity; import com.lm.enums.SexEnums; /** * mybatis中mapper接口 * @author liangming.deng * @date 2017年6月21日 * */ public interface User2Mapper { @Select("select * from user") @Results({ @Result(id=true,property="id",column="id"), @Result(property="userName",column="userName"), @Result(property="nickName",column="nickName"), @Result(property="passWord",column="passWord"), @Result(property="email",column="email"), @Result(property="regTime",column="regTime"), @Result(property="sexEnums",column="sex",javaType=SexEnums.class)}) List<UserEntity> getAll(); @Select("select * from user where id=#{id}") @Results({ @Result(id=true,property="id",column="id"), @Result(property="userName",column="userName"), @Result(property="nickName",column="nickName"), @Result(property="passWord",column="passWord"), @Result(property="email",column="email"), @Result(property="regTime",column="regTime"), @Result(property="sexEnums",column="sex",javaType=SexEnums.class)}) UserEntity getUserById(Long id); @Insert("INSERT INTO user(userName,nickName,passWord,email,regTime,sex) " + "VALUES(#{userName}, #{nickName}, #{passWord}, #{email}, #{regTime}, #{sex}) ") void insert(UserEntity user); @Update("UPDATE user SET userName=#{userName},nickName=#{nickName} where id=#{id}") void update(UserEntity user); @Delete("DELETE FROM user where id=#{id}") void delete(Long id); }
3.5 前端控制器controller
package com.lm.web; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.lm.entity.UserEntity; import com.lm.mapper.test1.User1Mapper; import com.lm.mapper.test2.User2Mapper; /** * 前端控制器 * @author liangming.deng * @date 2017年6月21日 * */ @RestController public class UserController { @Autowired private User2Mapper user2Mapper; @Autowired private User1Mapper user1Mapper; @RequestMapping("/getUsers") public List<UserEntity> getUsers() { List<UserEntity> users = user2Mapper.getAll(); return users; } @RequestMapping("/getAllUserCount") public String getAllUserCount(){ int user1Count = user1Mapper.getAll().size(); int user2Count = user2Mapper.getAll().size(); return "user1Count:" + user1Count + " add " + "user2Count:" + user2Count + " = " + (user1Count+user2Count); } @RequestMapping("/getUser") public UserEntity getUser(Long id) { UserEntity user = user2Mapper.getUserById(id); return user; } @RequestMapping("/add") public void save(UserEntity user) { user2Mapper.insert(user); } @RequestMapping(value = "update") public void update(UserEntity user) { user2Mapper.update(user); } @RequestMapping(value = "/delete/{id}") public void delete(@PathVariable("id") Long id) { user2Mapper.delete(id); } }
3.6 运行效果
4. 代码地址
Github: https://github.com/a123demi/spring-boot-integration相关文章推荐
- 三.SpringBoot集成实例系列-注解型单数据源mybatis
- 一. SpringBoot集成实例系列-xml型单数据源mybatis
- 七.SpringBoot集成实例系列-多数据源mongodb+lombok(二)
- 二.SpringBoot集成实例系列-xml型多数据源mybatis
- SpringBoot集成mybatis实例
- Spring Boot 集成Mybatis实现主从(多数据源)分离方案
- springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用
- 六.SpringBoot集成实例系列-单数据源mongodb(权限控制)
- 简单快速的用SpringBoot集成多数据源(mybatis)
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
- 从0开始学习SpringCould(5)--SpringBoot 集成Mybatis使用Druid数据源
- Spring Boot系列教程七:Spring boot集成MyBatis
- springboot集成mybatis实例代码
- springboot之集成mybatis之多数据源
- SpringBoot系列: 集成MyBatis
- Spring Boot 系列 | 第四篇:构建一个Restful API以及集成Mybatis访问数据库
- 五.SpringBoot集成实例系列-邮件email文章列表
- Spring Boot系列教程十:Spring boot集成MyBatis
- Spring Boot 集成Mybatis实现主从(多数据源)分离方案示例
- Spring Boot : 集成mybatis、pagehelper插件、开启事务、druid数据源配置、mybatis-generator(十一)