• spring-boot-mybatis-多数据源


    sql 语句

    DROP TABLE IF EXISTS `users`;
    CREATE TABLE `users` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
      `userName` varchar(32) DEFAULT NULL COMMENT '用户名',
      `passWord` varchar(32) DEFAULT NULL COMMENT '密码',
      `user_sex` varchar(32) DEFAULT NULL,
      `nick_name` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
    

    配置文件

    spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
    spring.datasource.test1.url = jdbc:mysql://localhost: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://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8
    spring.datasource.test2.username = root
    spring.datasource.test2.password = root
    

    数据源一

    @Configuration
    @MapperScan(basePackages = "com.neo.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);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
            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);
        }
    
    }
    

    数据源二

    @Configuration
    @MapperScan(basePackages = "com.neo.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);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml"));
            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);
        }
    
    }
    
    

    目录结构

    测试

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class User1MapperTest {
    
        @Autowired
        private User1Mapper userMapper;
    
        @Autowired
        private User2Mapper userMapper2;
    
    
        @Test
        public void testInsert() throws Exception {
            userMapper.insert(new UserEntity("aa", "a123456", UserSexEnum.MAN));
            userMapper.insert(new UserEntity("bb", "b123456", UserSexEnum.WOMAN));
            userMapper.insert(new UserEntity("cc", "b123456", UserSexEnum.WOMAN));
    
            userMapper2.insert(new UserEntity("aa", "a123456", UserSexEnum.MAN));
            userMapper2.insert(new UserEntity("bb", "b123456", UserSexEnum.WOMAN));
            userMapper2.insert(new UserEntity("cc", "b123456", UserSexEnum.WOMAN));
    
    
            //Assert.assertEquals(3, userMapper.getAll().size());
            //Assert.assertEquals(3, userMapper2.getAll().size());
        }
    }
    

    小结

    • 实体类中用枚举
    public class UserEntity implements Serializable {
    
    	private static final long serialVersionUID = 1L;
    	private Long id;
    	private String userName;
    	private String passWord;
            
    	private UserSexEnum userSex;
    	private String nickName; 
    。。。。。。。。
    }
    
    • sql 中定义的是 varchar 类型
    • mapper xml 中定义
    <resultMap id="BaseResultMap" type="com.neo.entity.UserEntity" >
            <id column="id" property="id" jdbcType="BIGINT" />
            <result column="userName" property="userName" jdbcType="VARCHAR" />
            <result column="passWord" property="passWord" jdbcType="VARCHAR" />
            //指定 枚举类
            <result column="user_sex" property="userSex" javaType="com.neo.enums.UserSexEnum"/>
            <result column="nick_name" property="nickName" jdbcType="VARCHAR" />
        </resultMap>
    

    mybatis 使用注释形式多数据源

    数据源一

    @Configuration
    @MapperScan(basePackages = "com.neo.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);
        }
    
    }
    

    数据源二

    @Configuration
    @MapperScan(basePackages = "com.neo.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);
        }
    
    }
    
    

    注解mapper

    public interface User2Mapper {
    
    
    	@Select("SELECT * FROM users")
    	@Results({
    			//因为 UserEntity 实体 有枚举类型 所以要指定枚举类型
    			@Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
    			@Result(property = "nickName", column = "nick_name")
    	})
    	List<UserEntity> getAll();
    
    	@Select("SELECT * FROM users WHERE id = #{id}")
    	@Results({
    			@Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
    			@Result(property = "nickName", column = "nick_name")
    	})
    	UserEntity getOne(Long id);
    
    	@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
    	void insert(UserEntity user);
    
    	@Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
    	void update(UserEntity user);
    
    	@Delete("DELETE FROM users WHERE id =#{id}")
    	void delete(Long id);
    
    }
    

    目录结构

  • 相关阅读:
    JS函数浅析(一)
    H5_canvas与svg
    h5+js视频播放器控件
    【BZOJ3622】已经没有什么好害怕的了
    【9.29 模拟】T3 小清新最优化(easy)
    9.27模拟
    9.26 模拟
    4062 -- 【清华集训2012】串珠子
    【SNOI2017】炸弹
    P3216 [HNOI2011]数学作业
  • 原文地址:https://www.cnblogs.com/zhangjianbin/p/10100932.html
Copyright © 2020-2023  润新知