文章目录
1. Springboot整合JdbcTemplate
创建新的项目,依赖如下:
pom.xml
修改这两个地方
整体结构:
application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/sky
User
package org.sky.jdbctemplate.bean;
/**
* @author sky
* @date 2020/7/29 9:34
*/
public class User {
private Integer id;
private String username;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
}
1.1 新增操作
UserService
package org.sky.jdbctemplate.service;
import org.sky.jdbctemplate.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
/**
* @author sky
* @date 2020/7/29 9:35
*/
@Service
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
public Integer addUser(User user){
return jdbcTemplate.update("insert into user (username, address) values (?, ?);",
user.getUsername(), user.getAddress());
}
}
JdbctemplateApplicationTests
package org.sky.jdbctemplate;
import org.junit.jupiter.api.Test;
import org.sky.jdbctemplate.bean.User;
import org.sky.jdbctemplate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class JdbctemplateApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
User user = new User();
user.setUsername("sky");
user.setAddress("China");
userService.addUser(user);
}
}
运行测试类,查看数据库数据:
1.2 更新操作
UserService
中添加
public Integer updateUserNameById(User user) {
return jdbcTemplate.update("update user set username = ? where id=?;",
user.getUsername(), user.getId());
}
JdbctemplateApplicationTests
中添加
@Test
void test1(){
User user = new User();
user.setId(1);
user.setUsername("sky-2");
userService.updateUserNameById(user);
}
结果:
1.3 删除操作
UserService
中添加
public Integer deleteUserById(int id) {
return jdbcTemplate.update("delete from user where id=?;", id);
}
JdbctemplateApplicationTests
中添加
@Test
void test2(){
userService.deleteUserById(1);
}
结果:
1.4 查询操作
UserService
中添加
public List<User> getAllUsers(){
return jdbcTemplate.query("select * from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setAddress(resultSet.getString("address"));
return user;
}
});
}
JdbctemplateApplicationTests
中添加
@Test
void test3(){
List<User> allUsers = userService.getAllUsers();
System.out.println(allUsers);
}
结果:(记得提前在数据库加几条数据)
1.5 查询操作(简便)
UserService
中添加
public List<User> getAllUsers2(){
return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
}
JdbctemplateApplicationTests
中添加
@Test
void test4(){
List<User> allUsers = userService.getAllUsers2();
System.out.println(allUsers);
}
结果:(记得提前在数据库加几条数据)
2. Springboot整合JdbcTemplate 多数据源
情景:多个JdbcTemplate操作多个数据库。
数据库准备:
sky
sky2
整体架构:
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
User
和上一节一样
DataSourceConfig
package org.sky.jdbctemplate2.config;
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 javax.sql.DataSource;
/**
* @author sky
* @date 2020/7/29 10:26
*/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
DataSource dsOne(){
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
DataSource dsTwo(){
return DataSourceBuilder.create().build();
}
}
JdbcTemplateConfig
package org.sky.jdbctemplate2.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* @author sky
* @date 2020/7/29 10:29
*/
@Configuration
public class JdbcTemplateConfig {
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dsOne){
return new JdbcTemplate(dsOne);
}
@Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dsTwo){
return new JdbcTemplate(dsTwo);
}
}
application.properties
spring.datasource.one.jdbc-url=jdbc:mysql://127.0.0.1:3306/sky
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.jdbc-url=jdbc:mysql://127.0.0.1:3306/sky2
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
Jdbctemplate2ApplicationTests
package org.sky.jdbctemplate2;
import org.junit.jupiter.api.Test;
import org.sky.jdbctemplate2.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
class Jdbctemplate2ApplicationTests {
@Autowired
@Qualifier("jdbcTemplateOne")
JdbcTemplate jdbcTemplateOne;
@Resource(name = "jdbcTemplateTwo")
JdbcTemplate jdbcTemplateTwo;
@Test
void contextLoads() {
List<User> list1 = jdbcTemplateOne.query("select * from user;", new BeanPropertyRowMapper<>(User.class));
System.out.println(list1);
List<User> list2 = jdbcTemplateTwo.query("select * from user;", new BeanPropertyRowMapper<>(User.class));
System.out.println(list2);
}
}
启动测试类:
3. Springboot整合Mybatis
创建新的项目,依赖:
修改pom.xml
下面是共有的东西
User
与上一节一样
application.properties
与上一节一样
MybatisApplication
扫描Mapper接口
package org.sky.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "org.sky.mybatis.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
UserMapper
package org.sky.mybatis.mapper;
import org.sky.mybatis.bean.User;
import java.util.List;
/**
* @author sky
* @date 2020/7/29 11:37
*/
public interface UserMapper {
List<User> getAllUser();
Integer addUser(User user);
Integer updateUserById(User user);
Integer deleteUserById(Integer id);
}
mapper.xml
<?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.sky.mybatis.mapper.UserMapper">
<select id="getAllUser" resultType="org.sky.mybatis.bean.User">
select * from user;
</select>
<insert id="addUser" parameterType="org.sky.mybatis.bean.User">
insert into user (username,address) values (#{username},#{address});
</insert>
<update id="updateUserById" parameterType="org.sky.mybatis.bean.User">
update user set username=#{username},address=#{address} where id=#{id}
</update>
<delete id="deleteUserById">
delete from user where id=#{id}
</delete>
</mapper>
UserMapper2
:注解方式
package org.sky.mybatis.mapper;
import org.apache.ibatis.annotations.*;
import org.sky.mybatis.bean.User;
import java.util.List;
/**
* @author sky
* @date 2020/7/29 11:37
*/
//@Mapper
public interface UserMapper2 {
@Select("select * from user")
List<User> getAllUsers();
@Results({
@Result(property = "id", column = "id"),
@Result(property = "username", column = "u"),
@Result(property = "address", column = "a")
})
@Select("select username as u,address as a,id as id from user where id=#{id}")
User getUserById(Integer id);
@Select("select * from user where username like concat('%',#{name},'%')")
List<User> getUsersByName(String name);
@Insert({"insert into user(username,address) values(#{username},#{address})"})
@SelectKey(statement = "select last_insert_id()", keyProperty = "id", before = false, resultType = Integer.class)
Integer addUser(User user);
@Update("update user set username=#{username},address=#{address} where id=#{id}")
Integer updateUserById(User user);
@Delete("delete from user where id=#{id}")
Integer deleteUserById(Integer id);
}
3.1 xml文件与mapper放在一起
注意:修改pom.xml
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
MybatisApplicationTests
package org.sky.mybatis;
import org.junit.jupiter.api.Test;
import org.sky.mybatis.bean.User;
import org.sky.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisApplicationTests {
@Autowired
UserMapper userMapper;
@Test
void contextLoads() {
List<User> users = userMapper.getAllUser();
System.out.println(users);
}
}
运行结果:
3.2 xml文件放在resource下
结构:
此时,需要修改pom.xml
mybatis.mapper-locations=classpath:mapper/*.xml
运行结果一样、
4. Springboot整合Mybatis多数据源
创建新的项目,依赖、pom文件修改与上一节一致。
整体结构:
application.properties
spring.datasource.one.url=jdbc:mysql://127.0.0.1:3306/sky
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.url=jdbc:mysql://127.0.0.1:3306/sky2
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
User
package org.sky.mybatis2.bean;
/**
* @author sky
* @date 2020/7/29 22:47
*/
public class User {
private Integer id;
private String username;
private String address;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String usrename) {
this.username = usrename;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
DataSourceConfig
package org.sky.mybatis2.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @author sky
* @date 2020/7/29 22:39
*/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSource dsOne(){
return new DruidDataSourceBuilder().create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource dsTwo(){
return new DruidDataSourceBuilder().create().build();
}
}
MybatisConfig1
package org.sky.mybatis2.config;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;
/**
* @author sky
* @date 2020/7/29 22:42
*/
@Configuration
@MapperScan(basePackages = "org.sky.mybatis2.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1",
sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MybatisConfig1 {
@Resource(name = "dsOne")
DataSource dataSource1;
@Bean
public SqlSessionFactory sqlSessionFactory1(){
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
try {
factoryBean.setDataSource(dataSource1);
return factoryBean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Bean
public SqlSessionTemplate sqlSessionTemplate1(){
return new SqlSessionTemplate(sqlSessionFactory1());
}
}
MybatisConfig2
package org.sky.mybatis2.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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.sql.DataSource;
/**
* @author sky
* @date 2020/7/29 22:42
*/
@Configuration
@MapperScan(basePackages = "org.sky.mybatis2.mapper2", sqlSessionFactoryRef = "sqlSessionFactory2",
sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MybatisConfig2 {
@Resource(name = "dsTwo")
DataSource dataSource2;
@Bean
public SqlSessionFactory sqlSessionFactory2(){
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
try {
factoryBean.setDataSource(dataSource2);
return factoryBean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Bean
public SqlSessionTemplate sqlSessionTemplate2(){
return new SqlSessionTemplate(sqlSessionFactory2());
}
}
UserMapper1
package org.sky.mybatis2.mapper1;
import org.sky.mybatis2.bean.User;
import java.util.List;
/**
* @author sky
* @date 2020/7/29 22:48
*/
public interface UserMapper1 {
public List<User> getAllUser();
}
mapper1
<?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.sky.mybatis2.mapper1.UserMapper1">
<select id="getAllUser" resultType="org.sky.mybatis2.bean.User">
select * from user;
</select>
</mapper>
UserMapper2
package org.sky.mybatis2.mapper2;
import org.sky.mybatis2.bean.User;
import java.util.List;
/**
* @author sky
* @date 2020/7/29 22:50
*/
public interface UserMapper2 {
public List<User> getAllUser();
}
UserMapper2.xml
<?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.sky.mybatis2.mapper2.UserMapper2">
<select id="getAllUser" resultType="org.sky.mybatis2.bean.User">
select * from user;
</select>
</mapper>
Mybatis2ApplicationTests
package org.sky.mybatis2;
import org.junit.jupiter.api.Test;
import org.sky.mybatis2.bean.User;
import org.sky.mybatis2.mapper1.UserMapper1;
import org.sky.mybatis2.mapper2.UserMapper2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Mybatis2ApplicationTests {
@Autowired
UserMapper1 userMapper1;
@Autowired
UserMapper2 userMapper2;
@Test
void contextLoads() {
List<User> allUser = userMapper1.getAllUser();
System.out.println(allUser);
List<User> allUser1 = userMapper2.getAllUser();
System.out.println(allUser1);
}
}
执行结果: