关于springBoot集成mybatis的方式,其实有很多,网上也有很多的案例,经过一系列参考和实践,大致有以下几种方式。
方式一
(使用注解形式,全程无MyBatis与Spring的配置文件)
1、添加依赖
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2、配置文件 application.yml
#配置数据源
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
3、Controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.chenqi.springboot.service.TestService;
@RestController
public class SpringBootController {
@Autowired
TestService testService;
@GetMapping("/hello")
public String hello(){
return testService.test();
}
}
4、service
public interface TestService {
public String test();
}
5、serviceImpl
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.chenqi.springboot.dao.TestMapper;
import com.chenqi.springboot.service.TestService;
@Service
public class TestServiceImpl implements TestService {
@Autowired
TestMapper testMapper;
@Override
public String test() {
return testMapper.test();
}
}
6、dao
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface TestMapper {
@Select("select * from test")
String test();
}
7、数据库
这里就简单建一张表 一个字段
启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
方式二(使用注解+xml)
在上面的基础上修改
1、配置文件 application.yml
#配置数据源
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#指定mybatis映射文件的地址
mybatis:
mapper-locations: classpath:mapper/*.xml
2、dao
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TestMapper {
String test();
}
3、mapper.xml (注意文件名需与dao中的mapper相同)
<?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.chenqi.springboot.dao.TestMapper" >
<select id="test" resultType="java.lang.String">
select * from test
</select>
</mapper>
启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
方式三(自定义dataSource,适合集成springcloud-config)
1、添加依赖
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
2、配置文件application.properties
#jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test1?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
jdbc.maxActive=50
jdbc.maxWait=30000
3、自定义配置类
DataSourceConfiguration.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.alibaba.druid.pool.DruidDataSource;
@Configuration
@PropertySource("classpath:application.properties")
public class DataSourceConfiguration {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.maxActive}")
private int maxActive;
@Value("${jdbc.maxWait}")
private long maxWait;
@Bean
public DruidDataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMaxActive(maxActive);
dataSource.setMaxWait(maxWait);
return dataSource;
}
}
MyBatisConfig.java
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
@Configuration
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {
@Autowired
private DataSource dataSource;
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
MyBatisMapperScannerConfig.java
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//因为这个对象的扫描,需要在MyBatisConfig的后面注入,所以加上下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
//获取之前注入的beanName为sqlSessionFactory的对象
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
//指定dao的路径
mapperScannerConfigurer.setBasePackage("com.chenqi.springboot.dao");
return mapperScannerConfigurer;
}
}
启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
方式四(多数据源的mybatis)
1、配置文件 application.yml
mysql:
server:
test1:
url: jdbc:mysql://127.0.0.1:3306/test1?useSSL=false&useUnicode=true&characterEncoding=utf8
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
initialSize: 1
minIdle: 5
maxActive: 50
test2:
url: jdbc:mysql://127.0.0.1:3306/test2?useSSL=false&useUnicode=true&characterEncoding=utf8
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
initialSize: 1
minIdle: 5
maxActive: 50
2、数据库创建
3、dao 和 xml
Test1Mapper.java
package com.chenqi.springboot.dao.test1;
public interface Test1Mapper {
String test();
}
Test2Mapper.java
package com.chenqi.springboot.dao.test2;
public interface Test2Mapper {
String test();
}
Test1Mapper.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="com.chenqi.springboot.dao.test1.Test1Mapper" >
<select id="test" resultType="java.lang.String">
select * from test
</select>
</mapper>
Test2Mapper.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="com.chenqi.springboot.dao.test2.Test2Mapper" >
<select id="test" resultType="java.lang.String">
select * from test
</select>
</mapper>
3、serviceImpl
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.chenqi.springboot.dao.test1.Test1Mapper;
import com.chenqi.springboot.dao.test2.Test2Mapper;
import com.chenqi.springboot.service.TestService;
@Service
public class TestServiceImpl implements TestService {
@Autowired
Test1Mapper test1Mapper;
@Autowired
Test2Mapper test2Mapper;
@Override
public String test() {
return test1Mapper.test() + "---" + test2Mapper.test();
}
}
4、 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import com.chenqi.springboot.config.MyBadisLoader;
@MyBadisLoader({"test1 = com.chenqi.springboot.dao.test1 = classpath:mapper/test1/*xml" ,
"test2 = com.chenqi.springboot.dao.test2 = classpath:mapper/test2/*.xml"})
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
好了,暂时就写这么多了,这四种足够应付大部分使用场景了
版权声明:本文为weixin_40623736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。