SpringBoot集成MybatisPlus
1.MybatisPlus
mybatisPlus是一款Mybatis高效工具,它的使用方便,上手快捷,可以帮助我们快速的搭建SSM框架,本次我们将通过SpringBoot,MybatisPlus实现SSM框架的快速搭建。我们可以在官方网站上获取详细的文档帮助。同时下面也将结合具体代码来做一个简单的介绍
2框架搭建
- 1 引入pom依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.6</version>
</dependency>
引入MyBatisPlus依赖将自动帮我们引入Mybatis框架的Pom.xml依赖
- 2 application.properties配置
#配置bei数据库#########################################################
#设置驱动
spring.datasource.bei.driverClass = com.microsoft.sqlserver.jdbc.SQLServerDriver
#数据库地址
spring.datasource.bei.url =jdbc:sqlserver://localhost:1433;databaseName=CH.BEI
#用户名密码
spring.datasource.bei.username = **
spring.datasource.bei.password = **
#mybatis配置
#数据库方言
spring.datasource.bei.dialectType = sqlserver2005
#数据库类型
spring.datasource.bei.dbType = sqlserver
#主键生成类型
spring.datasource.bei.idType = 3
我们在配置文件里面创建一系列以spring.datasource.bei的配置,那么我们要怎么样把这些配置加载进去呢
- 3 映射配置文件
- 首先创建一个父类对象,对象内包括了数据库链接的字段
package com.rcsit.qyd.core.db;
/**
* DESC: S基础数据库配置,所有数据库配置需要继承此类
* USER:hmily
* DATE:2017/11/5
* TIME:14:51
*/
public class BaseDB {
private String url;
private String username;
private String password;
private String driverClass;
private String dialectType = "mysql";
private String dbType = "mysql";
/**
* AUTO->`0`("数据库ID自增")
* INPUT->`1`(用户输入ID")
* ID_WORKER->`2`("全局唯一ID")
* UUID->`3`("全局唯一ID")
*/
private Integer idType = 3;
public String getDialectType() {
return dialectType;
}
public void setDialectType(String dialectType) {
this.dialectType = dialectType;
}
public String getDbType() {
return dbType;
}
public void setDbType(String dbType) {
this.dbType = dbType;
}
public Integer getIdType() {
return idType;
}
public void setIdType(Integer idType) {
this.idType = idType;
}
public String getDriverClass() {
return driverClass;
}
public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- 创建一个BeiDb类,来映射配置文件中的数据
package com.rcsit.qyd.core.db;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
*
* BEI数据库
* Created by hmily on 2017/8/29.
*/
@Profile("bei")
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.bei")
public class BeiDB extends BaseDB{
}
这样通过SpringBoot提供的
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.bei")
注解可以实现配置文件的映射,是不是方便又会计呢。
- Mybatis配置
配置我们的数据源,直接上代码
package com.rcsit.qyd.core.db.mybatisConfig;
import com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import com.rcsit.qyd.core.db.BeiDB;
import com.rcsit.qyd.core.db.DevDB;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
import java.sql.SQLException;
/**配置bei数据源
* Created by hmily on 2017/8/29.
*/
@Configuration
@Profile("bei")
@MapperScan(basePackages = "com.rcsit.qyd.dao.bei" ,sqlSessionTemplateRef = "beiSqlSessionTemplate")
public class BeiDB2Mybatis {
@Primary
@Bean(name = "beiDataSource")
public DataSource devDataSource(BeiDB dbConfig) throws SQLException {
AtomikosNonXADataSourceBean nonXADataSourceBean = new AtomikosNonXADataSourceBean();
nonXADataSourceBean.setUrl(dbConfig.getUrl());
nonXADataSourceBean.setDriverClassName(dbConfig.getDriverClass());
nonXADataSourceBean.setUser(dbConfig.getUsername());
nonXADataSourceBean.setPassword(dbConfig.getPassword());
nonXADataSourceBean.setUniqueResourceName("bei");
return nonXADataSourceBean;
}
@Bean(name = "beiSqlSessionFactory")
public SqlSessionFactory devSqlSessionFactory(@Qualifier("beiDataSource") DataSource dataSource, @Qualifier("beiGlobalConfiguration")GlobalConfiguration globalConfiguration, BeiDB dbConfig ) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType(dbConfig.getDialectType());
factoryBean.setPlugins(new Interceptor[]{paginationInterceptor});
factoryBean.setGlobalConfig(globalConfiguration);
factoryBean.setDataSource(dataSource);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/rcsit/qyd/dao/bei/xml/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "beiGlobalConfiguration")
public GlobalConfiguration devGlobalConfiguration(BeiDB dbConfig ){
GlobalConfiguration globalConfiguration = new GlobalConfiguration();
globalConfiguration.setDbType(dbConfig.getDbType());
globalConfiguration.setIdType(dbConfig.getIdType());
return globalConfiguration;
}
@Bean(name = "beiSqlSessionTemplate")
public SqlSessionTemplate devSqlSessionTemplate(@Qualifier("beiSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
从上面代码中可以看出,我们基于SpringBoot注解的配置,简单明了。
其中
@MapperScan(basePackages = "com.rcsit.qyd.dao.bei" ,sqlSessionTemplateRef = "beiSqlSessionTemplate")
给我们指定了dao层对应的包名,Spring将对包中类进行Bean的初始化
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/rcsit/qyd/dao/bei/xml/.xml"));
在这里,我们写明了我们的xml映射文件的具体配置位置,需要注意的是通过Maven进行的项目管理,我们需要写明打包时包含.xml文件,否则xml将会被抛弃。
到了这里,我们大抵就搭建起了一个简单SSM框架。有兴趣的同学还可以引入JPA,JTA数据库连接池等,本文的代码是基于spring-boot-starter-jta-atomikos,JTA的一个实例框架
3.实例代码
创建实体
@TableName("user")
public class User extends Model<User> {
/** 用户ID */
private Long id;
/** 用户名 */
private String name;
/** 用户年龄 */
private Integer age;
@TableField(exist = false)
private String state;
}
创建数据访问层
public interface UserMapper extends BaseMapper<User> {
@Select("selectUserList")
List<User> selectUserList(Pagination page,String state);
}
创建服务实现层
@Service
public class UserService extends ServiceImpl<UserMapper, User>{
public Page<User> selectUserPage(Page<User> page, String state) {
page.setRecords(baseMapper.selectUserList(page,state));
return page;
}
}
创建测试文件
EntityWrapper ew=new EntityWrapper();
ew.setEntity(new User());
String name="wang";
Integer age=16;
ew.where("name = {0}",name).andNew("age > {0}",age).orderBy("age");
List<User> list = userService.selectList(ew);
Page page = userService.selectPage(page, ew);
通过MybatisPlus给我们提供了多种多样的数据访问操作传统模式下,我们可以编写Mapper.xml进行SQL语句的编写,实现SQL统一管理。
MybatisPlus还给我们提供了一些基础的操作,我们可以通过继承BaseMapper 实现快速的数据库CRUD等操作,通过EntityWrapper脱离Xml文件。
4 总结
MybatisPlus是一款非常优质的开源软件,它给我们提供了Mybatis框架的多种解决方案,可以帮助我们进行项目的敏捷开发和快速实现。这里只是做了一些简单的介绍,还有其它丰富多彩的功能等着我们去探索。