1 整合JdbcTemplate
- Service
/**
* @Description TODO
* @Author tzb
* @Date 2021/8/22 10:23
* @Version 1.0
**/
@Service
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
public int addUser(User user) {
int update = jdbcTemplate.update("insert into user (username,address) values (?,?)", user.getUsername(), user.getAddress());
return update;
}
/**
* 插入数据后,获取id
*
* @param user
* @return
*/
public int addUser2(User user) {
GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
int update = jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement("insert into user (username,address) values (?,?)", Statement.RETURN_GENERATED_KEYS);
ps.setString(1, user.getUsername());
ps.setString(2, user.getAddress());
return ps;
}
}, keyHolder);
user.setId(keyHolder.getKey().longValue());
return update;
}
}
- 单测
@SpringBootTest
class JdbctemplateSpringbootApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
User user = new User();
user.setUsername("孙悟空");
user.setAddress("花果山");
int i = userService.addUser(user);
System.out.println(i);
}
@Test
void test01() {
User user = new User();
user.setUsername("孙悟空3");
user.setAddress("花果山");
int i = userService.addUser2(user);
System.out.println("i = " + i);
System.out.println("user.getId() = " + user.getId());
}
}
1.1 JdbcTemplate
多数据源配置
- 配置文件
# 应用名称
spring.application.name=jdbctemplate-springboot
# 应用服务 WEB 访问端口
server.port=8080
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.one.jdbcurl=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=UTF-8
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.two.jdbcurl=jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=UTF-8
spring.datasource.two.username=root
spring.datasource.two.password=root
- 数据源配置
/**
* @Description TODO
* @Author tzb
* @Date 2021/8/22 10:58
* @Version 1.0
**/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
DataSource dsOne(){
return new HikariDataSource();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
DataSource dsTwo(){
return new HikariDataSource();
}
}
/**
* @Description TODO
* @Author tzb
* @Date 2021/8/22 11:00
* @Version 1.0
**/
@Configuration
public class JdbcTemplateConfig {
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource ds){
return new JdbcTemplate(ds);
}
@Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource ds){
return new JdbcTemplate(ds);
}
}
@SpringBootTest
class JdbctemplateSpringbootApplicationTests {
@Autowired
@Qualifier("jdbcTemplateOne")
JdbcTemplate jdbctemplateOne;
@Resource(name = "jdbcTemplateTwo")
JdbcTemplate jdbctemplateTwo;
}
2 整合MyBatis
- 配置文件
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=UTF-8
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=root
2.1 注解版
2.1.1 注册Mapper
- 加
Mapper
注解 - 在启动类上配置扫描路径
package com.tzb.mybatisspringboot.mapper;
import com.tzb.mybatisspringboot.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("select * from user where id=#{id}")
User getUserById(Long id);
}
- 单测
@SpringBootTest
class MybatisSpringbootApplicationTests {
@Autowired
UserMapper userMapper;
@Test
void contextLoads() {
System.out.println(userMapper.getUserById(1L));
}
}
2.2 多数据源
- 配置文件
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库连接地址
spring.datasource.one.jdbcurl=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=UTF-8
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.two.jdbcurl=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=UTF-8
spring.datasource.two.username=root
spring.datasource.two.password=root
- 数据源
package com.tzb.mybatisspringboot.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @Description TODO
* @Author tzb
* @Date 2021/8/22 15:02
* @Version 1.0
**/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
DataSource dsOne(){
return new HikariDataSource();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
DataSource dsTwo(){
return new HikariDataSource();
}
}
package com.tzb.mybatisspringboot.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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @Description TODO
* @Author tzb
* @Date 2021/8/22 15:07
* @Version 1.0
**/
@Configuration
@MapperScan(basePackages = "com.tzb.mybatisspringboot.mapper1",
sqlSessionFactoryRef = " sqlSessionFactory1",
sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {
@Autowired
@Qualifier("dsOne")
DataSource ds;
@Bean
SqlSessionFactory sqlSessionFactory1(){
SqlSessionFactory sqlSessionFactory = null;
try {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(ds);
sqlSessionFactory = bean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
@Bean
SqlSessionTemplate sqlSessionTemplate1(){
return new SqlSessionTemplate(sqlSessionFactory1());
}
}
@Configuration
@MapperScan(basePackages = "com.tzb.mybatisspringboot.mapper2",
sqlSessionFactoryRef = " sqlSessionFactory2",
sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {
@Autowired
@Qualifier("dsTwo")
DataSource ds;
@Bean
SqlSessionFactory sqlSessionFactory2(){
SqlSessionFactory sqlSessionFactory = null;
try {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(ds);
sqlSessionFactory = bean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
@Bean
SqlSessionTemplate sqlSessionTemplate2(){
return new SqlSessionTemplate(sqlSessionFactory2());
}
}
package com.tzb.mybatisspringboot;
import com.tzb.mybatisspringboot.mapper1.UserMapper1;
import com.tzb.mybatisspringboot.mapper2.UserMapper2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class MybatisSpringbootApplicationTests {
@Autowired
UserMapper1 userMapper1;
@Autowired
UserMapper2 userMapper2;
@Test
void test(){
System.out.println("userMapper1.getAllUsers() = " + userMapper1.getAllUsers());
System.out.println("userMapper2.getAllUsers() = " + userMapper2.getAllUsers());
}
}