一、使用mybatis-spring-boot-starter
1、添加依赖
1
2
3
4
5
|
< dependency >
< artifactId >mybatis-spring-boot-starter</ artifactId >
< version >1.0.0</ version >
</ dependency >
|
2、启动时导入指定的sql(application.properties
)
1
|
spring.datasource.schema= import .sql
|
3、annotation形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@SpringBootApplication
@MapperScan ( "sample.mybatis.mapper" )
public class SampleMybatisApplication implements CommandLineRunner {
@Autowired
private CityMapper cityMapper;
public static void main(String[] args) {
SpringApplication.run(SampleMybatisApplication. class , args);
}
@Override
public void run(String... args) throws Exception {
System.out.println( this .cityMapper.findByState( "CA" ));
}
}
|
4、xml方式
mybatis-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
|
<? xml version = "1.0" encoding = "UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
< configuration >
< typeAliases >
< package name = "sample.mybatis.domain" />
</ typeAliases >
< mappers >
< mapper resource = "sample/mybatis/mapper/CityMapper.xml" />
</ mappers >
</ configuration >
|
application.properties
1
2
|
spring.datasource.schema= import .sql
mybatis.config=mybatis-config.xml
|
mapper
1
2
3
4
5
6
7
8
9
10
11
|
@Component
public class CityMapper {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public City selectCityById( long id) {
return this .sqlSessionTemplate.selectOne( "selectCityById" , id);
}
}
|
二、手工集成
1、annotation方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
@Configuration
@MapperScan ( "com.xixicat.modules.dao" )
@PropertySources ({ @PropertySource (value = "classpath:application.properties" , ignoreResourceNotFound = true ), @PropertySource (value = "file:./application.properties" , ignoreResourceNotFound = true ) })
public class MybatisConfig {
@Value ( "${name:}" )
private String name;
@Value ( "${database.driverClassName}" )
private String driverClass;
@Value ( "${database.url}" )
private String jdbcUrl;
@Value ( "${database.username}" )
private String dbUser;
@Value ( "${database.password}" )
private String dbPwd;
@Value ( "${pool.minPoolSize}" )
private int minPoolSize;
@Value ( "${pool.maxPoolSize}" )
private int maxPoolSize;
@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding( "UTF-8" );
characterEncodingFilter.setForceEncoding( true );
return characterEncodingFilter;
}
@Bean (destroyMethod = "close" )
public DataSource dataSource(){
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName(driverClass);
hikariConfig.setJdbcUrl(jdbcUrl);
hikariConfig.setUsername(dbUser);
hikariConfig.setPassword(dbPwd);
hikariConfig.setPoolName( "springHikariCP" );
hikariConfig.setAutoCommit( false );
hikariConfig.addDataSourceProperty( "cachePrepStmts" , "true" );
hikariConfig.addDataSourceProperty( "prepStmtCacheSize" , "250" );
hikariConfig.addDataSourceProperty( "prepStmtCacheSqlLimit" , "2048" );
hikariConfig.addDataSourceProperty( "useServerPrepStmts" , "true" );
hikariConfig.setMinimumIdle(minPoolSize);
hikariConfig.setMaximumPoolSize(maxPoolSize);
hikariConfig.setConnectionInitSql( "SELECT 1" );
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setFailFast( true );
sessionFactory.setConfigLocation( new ClassPathResource( "mybatis-config.xml" ));
return sessionFactory.getObject();
}
}
|
点评
这种方式有点别扭,而且配置不了拦截式事务拦截,只能采用注解声明,有些冗余
2、xml方式
数据源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:p = "http://www.springframework.org/schema/p"
xmlns:tx = "http://www.springframework.org/schema/tx"
xmlns:aop = "http://www.springframework.org/schema/aop"
xmlns:context = "http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
< context:property-placeholder ignore-unresolvable = "true" />
< bean id = "hikariConfig" class = "com.zaxxer.hikari.HikariConfig" >
< property name = "poolName" value = "springHikariCP" />
< property name = "connectionTestQuery" value = "SELECT 1" />
< property name = "dataSourceClassName" value = "${database.dataSourceClassName}" />
< property name = "maximumPoolSize" value = "${pool.maxPoolSize}" />
< property name = "idleTimeout" value = "${pool.idleTimeout}" />
< property name = "dataSourceProperties" >
< props >
< prop key = "url" >${database.url}</ prop >
< prop key = "user" >${database.username}</ prop >
< prop key = "password" >${database.password}</ prop >
</ props >
</ property >
</ bean >
<!-- HikariCP configuration -->
< bean id = "dataSource" class = "com.zaxxer.hikari.HikariDataSource" destroy-method = "close" >
< constructor-arg ref = "hikariConfig" />
</ bean >
< bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" >
< property name = "dataSource" ref = "dataSource" />
<!-- 配置mybatis配置文件的位置 -->
< property name = "configLocation" value = "classpath:mybatis-config.xml" />
< property name = "typeAliasesPackage" value = "com.xixicat.domain" />
<!-- 配置扫描Mapper XML的位置 -->
< property name = "mapperLocations" value = "classpath:com/xixicat/modules/dao/*.xml" />
</ bean >
<!-- 配置扫描Mapper接口的包路径 -->
< bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = "sqlSessionFactoryBeanName" value = "sqlSessionFactory" />
< property name = "basePackage" value = "com.xixicat.repository.mapper" />
</ bean >
< bean id = "sqlSessionTemplate" class = "org.mybatis.spring.SqlSessionTemplate" >
< constructor-arg ref = "sqlSessionFactory" />
</ bean >
< bean id = "transactionManager"
class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref = "dataSource" />
< aop:aspectj-autoproxy expose-proxy = "true" proxy-target-class = "true" />
< tx:advice id = "txAdvice" transaction-manager = "transactionManager" >
< tx:attributes >
< tx:method name = "start*" propagation = "REQUIRED" />
< tx:method name = "submit*" propagation = "REQUIRED" />
< tx:method name = "clear*" propagation = "REQUIRED" />
< tx:method name = "create*" propagation = "REQUIRED" />
< tx:method name = "activate*" propagation = "REQUIRED" />
< tx:method name = "save*" propagation = "REQUIRED" />
< tx:method name = "insert*" propagation = "REQUIRED" />
< tx:method name = "add*" propagation = "REQUIRED" />
< tx:method name = "update*" propagation = "REQUIRED" />
< tx:method name = "delete*" propagation = "REQUIRED" />
< tx:method name = "remove*" propagation = "REQUIRED" />
< tx:method name = "execute*" propagation = "REQUIRED" />
< tx:method name = "del*" propagation = "REQUIRED" />
< tx:method name = "*" read-only = "true" />
</ tx:attributes >
</ tx:advice >
< aop:config proxy-target-class = "true" expose-proxy = "true" >
< aop:pointcut id = "pt" expression = "execution(public * com.xixicat.service.*.*(..))" />
< aop:advisor order = "200" pointcut-ref = "pt" advice-ref = "txAdvice" />
</ aop:config >
</ beans >
|
aop依赖
1
2
3
4
|
< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-aop</ artifactId >
</ dependency >
|
mybatis-spring等依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<!-- boot dependency mybatis -->
< dependency >
< groupId >org.mybatis</ groupId >
< artifactId >mybatis</ artifactId >
< version >3.3.0</ version >
< scope >compile</ scope >
</ dependency >
< dependency >
< groupId >org.mybatis</ groupId >
< artifactId >mybatis-spring</ artifactId >
< version >1.2.2</ version >
< scope >compile</ scope >
</ dependency >
< dependency >
< groupId >mysql</ groupId >
< artifactId >mysql-connector-java</ artifactId >
< version >5.1.6</ version >
</ dependency >
<!--<dependency>-->
<!--<groupId>org.hsqldb</groupId>-->
<!--<artifactId>hsqldb</artifactId>-->
<!--<scope>runtime</scope>-->
<!--</dependency>-->
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java6</ artifactId >
< version >2.3.8</ version >
</ dependency >
|
指定xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
@Configuration
@ComponentScan ( basePackages = { "com.xixicat" } )
@ImportResource ( "classpath:applicationContext-mybatis.xml" )
@EnableAutoConfiguration
public class AppMain {
// 用于处理编码问题
@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding( "UTF-8" );
characterEncodingFilter.setForceEncoding( true );
return characterEncodingFilter;
}
//文件下载
@Bean
public HttpMessageConverters restFileDownloadSupport() {
ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
return new HttpMessageConverters(arrayHttpMessageConverter);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(AppMain. class , args);
}
}
|
点评
跟传统的方式集成最为直接,而且事务配置也比较容易上手
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://segmentfault.com/a/1190000004275305