Browse Source

add spring-boot-mybatis-annotation-mulidatasource

ityouknow 8 years ago
parent
commit
8d6a84c6ec

+ 1 - 0
README.md

@@ -8,6 +8,7 @@ Spring boot使用的各种示例,以最简单、最实用为标准
 - [spring-boot-mybaits-annotation](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-mybatis-annotation):注解版本
 - [spring-boot-mybaits-xml](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-mybatis-xml):xml配置版本
 - [spring-boot-mybatis-mulidatasource](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-mybatis-mulidatasource):springboot+mybatis多数据源最简解决方案
+- [spring-boot-mybatis-annotation-mulidatasource](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-mybatis-annotation-mulidatasource):springboot+mybatis(注解版)多数据源最简解决方案
 - [spring-boot-rabbitmq](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-rabbitmq):spring boot和rabbitmq各种消息应用案例
 - [spring-boot-scheduler](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-scheduler):spring boot和定时任务案例
 - [spring-boot-web](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-web):web开发综合使用案例

+ 69 - 0
spring-boot-mybatis-annotation-mulidatasource/pom.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>com.neo</groupId>
+	<artifactId>spring-boot-mybatis-annotation-mulidatasource</artifactId>
+	<version>1.0.0</version>
+	<packaging>jar</packaging>
+
+	<name>spring-boot-mybatis-annotation-mulidatasource</name>
+	<description>Demo project for Spring Boot and mybatis with annotation</description>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>1.4.2.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+	        <groupId>org.springframework.boot</groupId>
+	        <artifactId>spring-boot-starter-web</artifactId>
+	    </dependency>
+		<dependency>
+			<groupId>org.mybatis.spring.boot</groupId>
+			<artifactId>mybatis-spring-boot-starter</artifactId>
+			<version>1.1.1</version>
+		</dependency>
+	     <dependency>
+	        <groupId>mysql</groupId>
+	        <artifactId>mysql-connector-java</artifactId>
+	    </dependency>
+	     <dependency>
+	        <groupId>org.springframework.boot</groupId>
+	        <artifactId>spring-boot-devtools</artifactId>
+	        <optional>true</optional>
+		</dependency>
+	</dependencies>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+	                <fork>true</fork>
+	            </configuration>
+			</plugin>
+		</plugins>
+	</build>
+	
+
+</project>

+ 14 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/Application.java

@@ -0,0 +1,14 @@
+package com.neo;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan("com.neo.mapper")
+public class Application {
+
+	public static void main(String[] args) {
+		SpringApplication.run(Application.class, args);
+	}
+}

+ 52 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/datasource/DataSource1Config.java

@@ -0,0 +1,52 @@
+package com.neo.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;
+
+/**
+ * Created by summer on 2016/11/25.
+ */
+@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);
+    }
+
+}

+ 47 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/datasource/DataSource2Config.java

@@ -0,0 +1,47 @@
+package com.neo.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;
+
+/**
+ * Created by summer on 2016/11/25.
+ */
+@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);
+    }
+
+}

+ 73 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/entity/UserEntity.java

@@ -0,0 +1,73 @@
+package com.neo.entity;
+
+import java.io.Serializable;
+
+import com.neo.enums.UserSexEnum;
+
+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;
+
+	public UserEntity() {
+		super();
+	}
+
+	public UserEntity(String userName, String passWord, UserSexEnum userSex) {
+		super();
+		this.passWord = passWord;
+		this.userName = userName;
+		this.userSex = userSex;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getPassWord() {
+		return passWord;
+	}
+
+	public void setPassWord(String passWord) {
+		this.passWord = passWord;
+	}
+
+	public UserSexEnum getUserSex() {
+		return userSex;
+	}
+
+	public void setUserSex(UserSexEnum userSex) {
+		this.userSex = userSex;
+	}
+
+	public String getNickName() {
+		return nickName;
+	}
+
+	public void setNickName(String nickName) {
+		this.nickName = nickName;
+	}
+
+	@Override
+	public String toString() {
+		// TODO Auto-generated method stub
+		return "userName " + this.userName + ", pasword " + this.passWord + "sex " + userSex.name();
+	}
+
+}

+ 5 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/enums/UserSexEnum.java

@@ -0,0 +1,5 @@
+package com.neo.enums;
+
+public enum UserSexEnum {
+	MAN, WOMAN
+}

+ 35 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/mapper/test1/User1Mapper.java

@@ -0,0 +1,35 @@
+package com.neo.mapper.test1;
+
+import com.neo.entity.UserEntity;
+import com.neo.enums.UserSexEnum;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+public interface User1Mapper {
+
+
+	@Select("SELECT * FROM users")
+	@Results({
+			@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);
+
+}

+ 35 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/mapper/test2/User2Mapper.java

@@ -0,0 +1,35 @@
+package com.neo.mapper.test2;
+
+import java.util.List;
+
+import com.neo.entity.UserEntity;
+import com.neo.enums.UserSexEnum;
+import org.apache.ibatis.annotations.*;
+
+public interface User2Mapper {
+
+
+	@Select("SELECT * FROM users")
+	@Results({
+			@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);
+
+}

+ 50 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/java/com/neo/web/UserController.java

@@ -0,0 +1,50 @@
+package com.neo.web;
+
+import java.util.List;
+
+import com.neo.mapper.test1.User1Mapper;
+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.neo.entity.UserEntity;
+import com.neo.mapper.test2.User2Mapper;
+
+@RestController
+public class UserController {
+
+    @Autowired
+    private User1Mapper user1Mapper;
+
+	@Autowired
+	private User2Mapper user2Mapper;
+	
+	@RequestMapping("/getUsers")
+	public List<UserEntity> getUsers() {
+		List<UserEntity> users=user1Mapper.getAll();
+		return users;
+	}
+	
+    @RequestMapping("/getUser")
+    public UserEntity getUser(Long id) {
+    	UserEntity user=user2Mapper.getOne(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) {
+        user1Mapper.delete(id);
+    }
+    
+}

+ 13 - 0
spring-boot-mybatis-annotation-mulidatasource/src/main/resources/application.properties

@@ -0,0 +1,13 @@
+mybatis.type-aliases-package=com.neo.entity
+
+spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
+spring.datasource.test1.url = jdbc:mysql://localhost:3306/test1?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
+

+ 17 - 0
spring-boot-mybatis-annotation-mulidatasource/src/test/java/com/neo/ApplicationTests.java

@@ -0,0 +1,17 @@
+package com.neo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ApplicationTests {
+
+	@Test
+	public void contextLoads() {
+		System.out.println("hello world");
+	}
+
+}

+ 52 - 0
spring-boot-mybatis-annotation-mulidatasource/src/test/java/com/neo/mapper/User1MapperTest.java

@@ -0,0 +1,52 @@
+package com.neo.mapper;
+
+import java.util.List;
+
+import com.neo.mapper.test1.User1Mapper;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.neo.entity.UserEntity;
+import com.neo.enums.UserSexEnum;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class User1MapperTest {
+
+	@Autowired
+	private User1Mapper userMapper;
+
+	@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));
+
+		Assert.assertEquals(3, userMapper.getAll().size());
+	}
+
+	@Test
+	public void testQuery() throws Exception {
+		List<UserEntity> users = userMapper.getAll();
+		if(users==null || users.size()==0){
+			System.out.println("is null");
+		}else{
+			System.out.println(users.size());
+		}
+	}
+	
+	
+	@Test
+	public void testUpdate() throws Exception {
+		UserEntity user = userMapper.getOne(6l);
+		System.out.println(user.toString());
+		user.setNickName("neo");
+		userMapper.update(user);
+		Assert.assertTrue(("neo".equals(userMapper.getOne(6l).getNickName())));
+	}
+
+}

+ 51 - 0
spring-boot-mybatis-annotation-mulidatasource/src/test/java/com/neo/mapper/User2MapperTest.java

@@ -0,0 +1,51 @@
+package com.neo.mapper;
+
+import com.neo.entity.UserEntity;
+import com.neo.enums.UserSexEnum;
+import com.neo.mapper.test2.User2Mapper;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class User2MapperTest {
+
+	@Autowired
+	private User2Mapper userMapper;
+
+	@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));
+
+		Assert.assertEquals(3, userMapper.getAll().size());
+	}
+
+	@Test
+	public void testQuery() throws Exception {
+		List<UserEntity> users = userMapper.getAll();
+		if(users==null || users.size()==0){
+			System.out.println("is null");
+		}else{
+			System.out.println(users.toString());
+		}
+	}
+	
+	
+	@Test
+	public void testUpdate() throws Exception {
+		UserEntity user = userMapper.getOne(6l);
+		System.out.println(user.toString());
+		user.setNickName("neo");
+		userMapper.update(user);
+		Assert.assertTrue(("neo".equals(userMapper.getOne(6l).getNickName())));
+	}
+
+}