四.SpringBoot集成实例系列-注解型多数据源mybatis
来源:互联网 发布:旅游市场调查数据 编辑:程序博客网 时间:2024/06/13 05:07
文章列表
本系列将通过实例分别实现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.Driverspring.datasource.test1.url = jdbc:mysql://192.168.32.128:3306/test?useUnicode=true&characterEncoding=utf-8spring.datasource.test1.username = rootspring.datasource.test1.password = rootspring.datasource.test2.driverClassName = com.mysql.jdbc.Driverspring.datasource.test2.url = jdbc:mysql://192.168.32.128:3306/test2?useUnicode=true&characterEncoding=utf-8spring.datasource.test2.username = rootspring.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")@Primarypublic DataSource testDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "test1SqlSessionFactory")@Primarypublic SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}@Bean(name = "test1TransactionManager")@Primarypublic DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "test1SqlSessionTemplate")@Primarypublic 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日 * */@RestControllerpublic class UserController {@Autowiredprivate User2Mapper user2Mapper;@Autowiredprivate 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
阅读全文
0 0
- 四.SpringBoot集成实例系列-注解型多数据源mybatis
- 二.SpringBoot集成实例系列-xml型多数据源mybatis
- 三.SpringBoot集成实例系列-注解型单数据源mybatis
- 七.SpringBoot集成实例系列-多数据源mongodb(一)
- 七.SpringBoot集成实例系列-多数据源mongodb+lombok(二)
- SpringBoot集成多数据源
- springboot + mybatis + 多数据源
- SpringBoot+Mybatis多数据源
- springboot + mybatis + 多数据源
- 一. SpringBoot集成实例系列-xml型单数据源mybatis
- springboot集成mybatis实例
- SpringBoot、MyBatis配置多数据源
- springboot+mybatis配置多数据源
- springboot多数据源(mybatis)
- Springboot MyBatis多数据源切换
- springboot-mybatis—多数据源
- Springboot配置Mybatis多数据源
- SpringBoot整合Mybatis多数据源
- Glide图片加载库的使用
- C++中的virtual关键字---补充(1)《Effective C++》
- iOS CI 自动生成IPA
- iOS架构设计-URL缓存(上)
- 数组和切片作为函参传递的不同
- 四.SpringBoot集成实例系列-注解型多数据源mybatis
- java程序性能优化之设计优化--设计模式:单例模式(1)
- 安装单个Nginx
- Java是传值还是传引用
- 前后端交互项目总结
- ArcMap坐标转换及投影详解
- 在HTML中使用Javascript (第二章)
- HTML语义化
- 面向对象笔记(Object)