提交 619f6d88 编写于 作者: 武汉红喜's avatar 武汉红喜

MyBatis multi-database demo

上级 17f52220
MyBatis multi-database demo.
\ No newline at end of file
<?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">
<parent>
<artifactId>whatsmars-spring-boot-samples</artifactId>
<groupId>org.hongxi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>whatsmars-boot-sample-mybatis</artifactId>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.hongxi.whatsmars.boot.sample.mybatis;
import lombok.extern.slf4j.Slf4j;
import org.hongxi.whatsmars.boot.sample.mybatis.dao.trade.OrderMapper;
import org.hongxi.whatsmars.boot.sample.mybatis.dao.user.UserMapper;
import org.hongxi.whatsmars.boot.sample.mybatis.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by shenhongxi on 2018/12/9.
*/
@Slf4j
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private UserMapper userMapper;
@Autowired
private OrderMapper orderMapper;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
User user = User.builder().username("javahongxi").nickname("hongxi").gender(1).age(29).build();
User u = userMapper.findByUsername(user.getUsername());
if (u != null) {
log.info("user.user exists, {}", u);
} else {
userMapper.insert(user);
}
u = orderMapper.findByUsername(user.getUsername());
if (u != null) {
log.info("trade.user exists, {}", u);
} else {
orderMapper.insert(user);
}
}
}
package org.hongxi.whatsmars.boot.sample.mybatis.config;
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by shenhongxi on 2018/12/9.
*/
@Configuration
public class MyBatisConfig {
@MapperScan(basePackages = "org.hongxi.whatsmars.boot.sample.mybatis.dao.user", sqlSessionTemplateRef = "userSqlSessionTemplate")
private class userMapperScan {}
@MapperScan(basePackages = "org.hongxi.whatsmars.boot.sample.mybatis.dao.trade", sqlSessionTemplateRef = "tradeSqlSessionTemplate")
private class tradeMapperScan {}
@Bean("userSqlSessionTemplate")
public SqlSessionTemplate userSqlSessionTemplate(
@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean("tradeSqlSessionTemplate")
public SqlSessionTemplate tradeSqlSessionTemplate(
@Qualifier("tradeSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean("userSqlSessionFactory")
public SqlSessionFactory userSqlSessionFactory(
@Qualifier("userDatasource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setTypeAliasesPackage("org.hongxi.whatsmars.boot.sample.mybatis.domain");
String[] mapperLocations = {"classpath:mapper/*.xml"};
factory.setMapperLocations(resolveMapperLocations(mapperLocations));
return factory.getObject();
}
@Bean("tradeSqlSessionFactory")
public SqlSessionFactory tradeSqlSessionFactory(
@Qualifier("tradeDatasource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setTypeAliasesPackage("org.hongxi.whatsmars.boot.sample.mybatis.domain");
String[] mapperLocations = {"classpath:mapper/*.xml"};
factory.setMapperLocations(resolveMapperLocations(mapperLocations));
return factory.getObject();
}
@Bean("userDatasource")
@ConfigurationProperties(prefix = "user.datasource")
public DataSource userDatasource() {
return DataSourceBuilder.create().build();
}
@Bean("tradeDatasource")
@ConfigurationProperties(prefix = "trade.datasource")
public DataSource tradeDatasource() {
return DataSourceBuilder.create().build();
}
private Resource[] resolveMapperLocations(String[] mapperLocations) {
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
List<Resource> resources = new ArrayList<Resource>();
if (mapperLocations != null) {
for (String mapperLocation : mapperLocations) {
try {
Resource[] mappers = resourceResolver.getResources(mapperLocation);
resources.addAll(Arrays.asList(mappers));
} catch (IOException e) {
// ignore
}
}
}
return resources.toArray(new Resource[resources.size()]);
}
}
package org.hongxi.whatsmars.boot.sample.mybatis.dao.trade;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.hongxi.whatsmars.boot.sample.mybatis.domain.User;
import java.util.List;
/**
* Created by shenhongxi on 2017/6/26.
*/
public interface OrderMapper {
void createIfNotExistsTable();
@Select("select * from user where username = #{username}")
User findByUsername(String username);
void insert(User user);
void insertBatch(List<User> users);
List<User> query();
void update(User user);
void delete(Long id);
List<User> findByNicknameAndGender(@Param("nickname") String nickname, @Param("gender") Integer gender);
}
package org.hongxi.whatsmars.boot.sample.mybatis.dao.user;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.hongxi.whatsmars.boot.sample.mybatis.domain.User;
import java.util.List;
/**
* Created by shenhongxi on 2017/6/26.
*/
public interface UserMapper {
void createIfNotExistsTable();
@Select("select * from user where username = #{username}")
User findByUsername(String username);
void insert(User user);
void insertBatch(List<User> users);
List<User> query();
void update(User user);
void delete(Long id);
List<User> findByNicknameAndGender(@Param("nickname") String nickname, @Param("gender") Integer gender);
}
package org.hongxi.whatsmars.boot.sample.mybatis.domain;
import lombok.Builder;
import lombok.Data;
import java.util.Date;
/**
* Created by shenhongxi on 2017/6/26.
*/
@Data
@Builder
public class User {
private Long id;
private String username;
private String nickname;
private Integer gender;
private Integer age;
private Date createDate;
private Date updateDate;
}
user:
datasource:
jdbc-url: jdbc:mysql://db.hongxi.org:3306/user?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
driver-class-name: com.mysql.jdbc.Driver
username: root
password: n36bxXMnHina
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
minimumIdle: 5
maximumPoolSize: 10
connection-test-query: SELECT 1
trade:
datasource:
jdbc-url: jdbc:mysql://db.hongxi.org:3306/trade?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
driver-class-name: com.mysql.jdbc.Driver
username: root
password: n36bxXMnHina
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
minimumIdle: 5
maximumPoolSize: 10
connection-test-query: SELECT 1
\ No newline at end of file
<?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="org.hongxi.whatsmars.boot.sample.mybatis.dao.trade.OrderMapper">
<update id="createIfNotExistsTable">
CREATE TABLE IF NOT EXISTS user (id BIGINT AUTO_INCREMENT, username VARCHAR(20) NOT NULL, nickname VARCHAR(20), gender TINYINT, age INT, create_date DATETIME, update_date DATETIME, PRIMARY KEY (id));
</update>
<!--<select id="findByUsername" parameterType="string" resultType="User">
select * from user where username = #username#
</select>-->
<insert id="insert" parameterType="User">
insert into user(username, nickname, gender, age, create_date, update_date)
values(#{username}, #{nickname}, #{gender}, #{age}, NOW(), NOW())
</insert>
<insert id="insertBatch" parameterType="list">
insert into user(username, nickname, gender, age, create_date, update_date) values
<foreach collection="list" item="item" separator=",">
(#{item.username}, #{item.nickname}, #{item.gender}, #{item.age}, #{item.createDate}, #{item.updateDate})
</foreach>
</insert>
<select id="query" resultType="User">
select * from user
</select>
<update id="update" parameterType="User">
update user set update_date = NOW
<if test="username != null">, username = #{username}</if>
<if test="nickname != null">, nickname = #{nickname}</if>
<if test="age != null">, age = #{age}</if>
where id = #{id}
</update>
<delete id="delete">
delete from user where id = #{id}
</delete>
<select id="findByNicknameAndGender" resultType="User">
select * from user where nickname = #{nickname} and gender = #{gender}
</select>
</mapper>
\ No newline at end of file
<?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="org.hongxi.whatsmars.boot.sample.mybatis.dao.user.UserMapper">
<update id="createIfNotExistsTable">
CREATE TABLE IF NOT EXISTS user (id BIGINT AUTO_INCREMENT, username VARCHAR(20) NOT NULL, nickname VARCHAR(20), gender TINYINT, age INT, create_date DATETIME, update_date DATETIME, PRIMARY KEY (id));
</update>
<!--<select id="findByUsername" parameterType="string" resultType="User">
select * from user where username = #username#
</select>-->
<insert id="insert" parameterType="User">
insert into user(username, nickname, gender, age, create_date, update_date)
values(#{username}, #{nickname}, #{gender}, #{age}, NOW(), NOW())
</insert>
<insert id="insertBatch" parameterType="list">
insert into user(username, nickname, gender, age, create_date, update_date) values
<foreach collection="list" item="item" separator=",">
(#{item.username}, #{item.nickname}, #{item.gender}, #{item.age}, #{item.createDate}, #{item.updateDate})
</foreach>
</insert>
<select id="query" resultType="User">
select * from user
</select>
<update id="update" parameterType="User">
update user set update_date = NOW
<if test="username != null">, username = #{username}</if>
<if test="nickname != null">, nickname = #{nickname}</if>
<if test="age != null">, age = #{age}</if>
where id = #{id}
</update>
<delete id="delete">
delete from user where id = #{id}
</delete>
<select id="findByNicknameAndGender" resultType="User">
select * from user where nickname = #{nickname} and gender = #{gender}
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册