很久没有写博客,最近项目中用到了springboot、mybatis,看到现在网上也有开源的mybatis-plus,干脆整合过来,该项目最终作为实现后台的模块的基础CRUD功能,在项目中可以不用修改任何地方就可以直接使用。下面从开始来看如何搭建与使用。
参考文档:spring-boot mybatis-plus
准备工作:
springboot版本1.5.10.RELEASE
mybatisPlus版本3.0.1
1、由于是通过idea构建项目,像平时一样,先构建一个空的maven项目,其中包括一些idea的配置,然后就是一个pom.xml文件和src源码文件夹,如下图:
2、打开pom.xml引入我们依赖的各种jar,此项目中需要的依赖库如下:
<properties>
<mybatisplus.version>3.0.1</mybatisplus.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 子引入mybatis相关的包 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springboot开发工具 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 处理实体getter setter -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- springboot胚子文件自动提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<!-- 不用spring-boot-starter-parent -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.10.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
jar包相关说明已经注明,现在开始正式的代码编辑。
3、由于代码是通过数据库反向生成,数据库我们使用mysql,先在间几张表,USER、DEPT
CREATE TABLE `USER` (
`USER_ID` varchar(36) NOT NULL ,
`USER_NAME` varchar(56) NULL ,
`USER_CAPTION` varchar(56) NULL ,
`PASSWORD` varchar(56) NULL ,
`AGE` int NULL ,
`ADDRESS` varchar(128) NULL ,
`TELEPHONE` varchar(20) NULL ,
`EMAIL` varchar(56) NULL ,
`STATUS` char(2) NULL ,
`MEMO` varchar(255) NULL ,
PRIMARY KEY (`USER_ID`)
);
CREATE TABLE `DEPT` (
`ID` varchar(36) NOT NULL ,
`DEPT_NO` varchar(24) NULL ,
`DEPT_NAME` varchar(56) NULL ,
`DEPT_PARENT_NO` varchar(24) NULL ,
`DUTY` varchar(56) NULL ,
`CONTACT` varchar(24) NULL ,
PRIMARY KEY (`ID`)
);
4、通过mybatis-plus代码生成器生成代码,可以参考官方文档,生成的代码主要包括entity、mapper、service、comtroller,这样我们基本的代码就有了,当然,如果有对生成代码的地方有需要修改的,一方面通过配置处理,如果对代码定制化的地方,就需要我们更改模板了,模板具体位置在mybatis-plus-generator/templates中,我们将该文件夹整个拷贝到java/main/resources中,里面有.vm,.ftl后缀的文件,这个分别对应模板引擎Volecity,Freemaker使用不同的模板文件,我们可以直接在上面做一些修改。
根据需要我已经将模板做了一些更改,主要是根据需要会添加一些东西。
5、生成代码后,根据需修改真假一些扩展功能,以后只用维护一下,后台代码就可以得到复用了。
6、配置项目基础模块
目前只是用到基本的一些功能,所以配置的比较少,如果有新的需要,可以根据官方文档进行扩展,引入需要的功能模块。
server:
port: 8081
context-path: /mp
spring:
messages:
encoding: utf-8
basename: i18n.messages
mybatis-plus:
mapper-locations: classpath*:com/sucl/sbmp/*/mapper/**Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.sucl.sbmp.*.entity
global-config:
refresh: true
db-config:
db-type: mysql
# id-type: uuid
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
# config-location: classpath:mybatis-config.xml
mp:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/sbmp?useUnicode=true&useSSL=false&characterEncoding=utf8
username: sbmp
password: 123456
这些都是一些基础的配置
@SpringBootApplication
@MapperScan("com.sucl.sbmp.*.mapper")
@EnableTransactionManagement
public class MpStartApplication {
public static void main(String[] args) {
SpringApplication.run(MpStartApplication.class,args);
}
}
springboot启动类配置,加上mybatis mapper接口扫描
@Bean("dataSource")
@ConfigurationProperties(prefix = "mp.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
添加安装标准在配置文件中引入数据库,只用标记对应的前缀即可
/***
* plus 的性能优化,开发模式使用
* @return
*/
@Bean
@ConditionalOnProperty(name = "spring.profiles.active",havingValue = "dev")
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1000);//sql 最大执行时长
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
/**
* 分页插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// paginationInterceptor.setDialectType("mysql");
return paginationInterceptor;
}
两个插件,一个是复杂打印sql的,一个是分页插件
在生成代码的时候,我们用到了BaseEntity、BaseController,其中BaseEntity我们可以定义一些公共字段,同时通过实现MetaObjectHandler接口来完成公共字段的填充;而baseController我们可以定义一些基础的增删改查接口
public class BaseEntity implements Domain {
// @TableField(value = "CREATOR",fill = FieldFill.INSERT)
// private String creator;
//
// @TableField(value = "CREATE_DATE",fill = FieldFill.INSERT)
// private Date createDate;
}
@Service
public class DefaultMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
if(metaObject.hasSetter("creator") && StringUtils.isEmpty(metaObject.getValue("creator")))
setFieldValByName("creator","admin",metaObject);
if(metaObject.hasSetter("createDate") && StringUtils.isEmpty(metaObject.getValue("createDate")))
metaObject.setValue("createDate",new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
}
}
这样就不用在在接口中处理公共字段了
public class BaseController<S extends IService<M>,M extends Domain> {
/**
* 业务服务
*/
@Autowired
protected S service;
/**
* 根据主键查询
* @param id
* @return
*/
@GetMapping("/{id}")
protected M get(@PathVariable("id") String id){
return service.getById(id);
}
}
这里可以定义我们常用的接口服务,如果有特殊的服务,可以在生产的代码对应的controller去进行添加
7、直接通过postman可以进行测试了
到这里,一个基本的后台服务架构就已经搭建完成了。
代码源码可以参考:sbmp