1、加入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
2、application.yml
spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/testdb1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
minIdle: 1
maxActive: 100
initialSize: 10
timeBetweenEvictionRunsMillis: 3000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
secondary:
url: jdbc:mysql://localhost:3306/testdb2?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
minIdle: 1
maxActive: 100
initialSize: 10
timeBetweenEvictionRunsMillis: 3000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
mybatis:
primary:
mapperLocations: classpath*:com/wz/mapper/primary/*.xml
typeAliasesPackage: com.wz.model
secondary:
mapperLocations: classpath*:com/wz/mapper/secondary/*.xml
typeAliasesPackage: com.wz.model
3、创建配置类:
/**
* Created by wangzi on 2017/4/19.
*/
@Configuration
public class DruidConfiguration {
@Bean(name = "primaryDataSource")
public DataSource primaryDataSource(
@Value("${spring.datasource.primary.driver-class-name}") String driver,
@Value("${spring.datasource.primary.url}") String url,
@Value("${spring.datasource.primary.username}") String username,
@Value("${spring.datasource.primary.password}") String password,
@Value("${spring.datasource.primary.minIdle}") int minIdle,
@Value("${spring.datasource.primary.maxActive}") int maxActive,
@Value("${spring.datasource.primary.initialSize}") int initialSize,
@Value("${spring.datasource.primary.timeBetweenEvictionRunsMillis}") long timeBetweenEvictionRunsMillis,
@Value("${spring.datasource.primary.minEvictableIdleTimeMillis}") long minEvictableIdleTimeMillis,
@Value("${spring.datasource.primary.validationQuery}") String validationQuery,
@Value("${spring.datasource.primary.testWhileIdle}") boolean testWhileIdle,
@Value("${spring.datasource.primary.testOnBorrow}") boolean testOnBorrow,
@Value("${spring.datasource.primary.testOnReturn}") boolean testOnReturn){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setMaxActive(maxActive);
druidDataSource.setInitialSize(initialSize);
druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
druidDataSource.setValidationQuery(validationQuery);
druidDataSource.setTestWhileIdle(testWhileIdle);
druidDataSource.setTestOnBorrow(testOnBorrow);
druidDataSource.setTestOnReturn(testOnReturn);
return druidDataSource;
}
@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource(
@Value("${spring.datasource.secondary.driver-class-name}") String driver,
@Value("${spring.datasource.secondary.url}") String url,
@Value("${spring.datasource.secondary.username}") String username,
@Value("${spring.datasource.secondary.password}") String password,
@Value("${spring.datasource.secondary.minIdle}") int minIdle,
@Value("${spring.datasource.secondary.maxActive}") int maxActive,
@Value("${spring.datasource.secondary.initialSize}") int initialSize,
@Value("${spring.datasource.secondary.timeBetweenEvictionRunsMillis}") long timeBetweenEvictionRunsMillis,
@Value("${spring.datasource.secondary.minEvictableIdleTimeMillis}") long minEvictableIdleTimeMillis,
@Value("${spring.datasource.secondary.validationQuery}") String validationQuery,
@Value("${spring.datasource.secondary.testWhileIdle}") boolean testWhileIdle,
@Value("${spring.datasource.secondary.testOnBorrow}") boolean testOnBorrow,
@Value("${spring.datasource.secondary.testOnReturn}") boolean testOnReturn){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setMaxActive(maxActive);
druidDataSource.setInitialSize(initialSize);
druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
druidDataSource.setValidationQuery(validationQuery);
druidDataSource.setTestWhileIdle(testWhileIdle);
druidDataSource.setTestOnBorrow(testOnBorrow);
druidDataSource.setTestOnReturn(testOnReturn);
return druidDataSource;
}
}
/**
* Created by wangzi on 2017/4/19.
*/
@Configuration
@MapperScan(basePackages = {"com.wz.mapper.primary"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryMybatisConfiguration {
@Autowired
@Qualifier("primaryDataSource")
private DataSource dataSource;
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactoryBean sqlSessionFactory(
@Value("${mybatis.primary.mapperLocations}") String mapperLocations,
@Value("${mybatis.primary.typeAliasesPackage}") String typeAliasesPackage) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);
return sessionFactoryBean;
}
@Bean(name = "primaryTransactionManager")
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
/**
* Created by wangzi on 2017/4/19.
*/
@Configuration
@MapperScan(basePackages = {"com.wz.mapper.secondary"}, sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryMybatisConfiguration {
@Autowired
@Qualifier("secondaryDataSource")
private DataSource dataSource;
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactoryBean sqlSessionFactory(
@Value("${mybatis.secondary.mapperLocations}") String mapperLocations,
@Value("${mybatis.secondary.typeAliasesPackage}") String typeAliasesPackage) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);
return sessionFactoryBean;
}
@Bean(name = "secondaryTransactionManager")
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
4、实体对象:
/**
* Created by wangzi on 2017/4/19.
*/
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
/**
* Created by wangzi on 2017/4/19.
*/
public class Address {
private int id;
private String province;
private String city;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
5、Mapper:
/**
* Created by wangzi on 2017/4/19.
*/
public interface UserMapper {
User queryByPrimaryKey(@Param("id") int id);
List<User> queryByUserName(@Param("name") String name);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.wz.mapper.primary.UserMapper">
<resultMap id="BaseResultMap" type="com.wz.model.User" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="age" property="age" jdbcType="INTEGER" />
</resultMap>
<select id="queryByPrimaryKey" resultMap="BaseResultMap">
select id,name,age from user where id = #{id}
</select>
<select id="queryByUserName" resultMap="BaseResultMap">
select id,name,age from user where name = #{name}
</select>
</mapper>
public interface AddressMapper {
Address queryByPrimaryKey(@Param("id") int id);
List<Address> queryByProvince(@Param("province") String province);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.wz.mapper.secondary.AddressMapper">
<resultMap id="BaseResultMap" type="com.wz.model.Address" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="province" property="province" jdbcType="VARCHAR" />
<result column="city" property="city" jdbcType="VARCHAR" />
</resultMap>
<select id="queryByPrimaryKey" resultMap="BaseResultMap">
select id,province,city from address where id = #{id}
</select>
<select id="queryByProvince" resultMap="BaseResultMap">
select id,province,city from address where province = #{province}
</select>
</mapper>
6、Controller:
@RestController
@RequestMapping("address")
public class AddressController {
@Autowired
private AddressMapper addressMapper;
@RequestMapping("/queryById")
public Address queryById(int id){
return addressMapper.queryByPrimaryKey(id);
}
@RequestMapping("/queryByProvince")
public List<Address> queryByProvince(String province){
return addressMapper.queryByProvince(province);
}
}
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/queryById")
public User queryById(int id){
return userMapper.queryByPrimaryKey(id);
}
@RequestMapping("/queryByUserName")
public List<User> queryByUserName(String name){
return userMapper.queryByUserName(name);
}
}
7、启动:
@SpringBootApplication
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class })
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
整个工程的目录结构:
项目源码:点击打开链接