springboot自定义应用开发框架三 —— 整合mybatis plus+集成druid+模版自动生成代码文件

147 阅读4分钟

框架结构

按照笔记一的做法,项目分为元件库、框架、项目开发,元件库和框架可以在不同的项目中重复使用,也即以后不同的项目只要引入这2个jar文件即可使用spring boot一系列的功能,项目只用专注于本身的业务即可,如本案例的结构如下
项目结构

hn-component

元件库,也是最顶层的jar,主要是一些基础类和工具类

hn-framework

项目的基础框架,包括springboot ,mybatis,mybatisplus,redis 等集成封装环境,也包含一些自定义的功能,例如日志、mybatisplus的二次封装、排程、后台的路由权限等等。

demo

本次案例的项目,在实际中就是待开发的项目

整合mybatis plus

打开hn-framework 中的pom.xml, 引入相应的jar包

        <!--元件库-->
        <dependency>
			<groupId>com.hnexm.component</groupId>
			<artifactId>hn-component</artifactId>
			<version>1.0.0-SNAPSHOT</version>
		</dependency>		
		<!--mysql-->
        <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- MyBatis-plus插件-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!--代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- 模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
		<!-- alibaba的druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.16</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
		

上面相应的jar看名称就能知道是干什么用的,就不多做说明了

修改项目的pom.xml ,这里就是demo

   		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>		
		<dependency>
			<groupId>com.hnexm.framework</groupId>
			<artifactId>hn-framework</artifactId>
			<version>1.0.0-SNAPSHOT</version>
		</dependency>

这里主要就是引入我们自己的框架即可,(spring-boot-starter-test 是用于做junit测试所用)

编写配置文件 application.yml

server:
  port: 8888
#数据源配置
spring:
  datasource:
    name: test
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&serverTimezone=GMT&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
    username: root
    password: 123456
    # 使用druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: select 'x'
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxOpenPreparedStatements: 20
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙,此处是filter修改的地方
      filters: stat,wall,log4j
      statViewServlet:
        enabled: true
        allow: 127.0.0.1 #允许哪些ip访问,没有配置或者为空,则允许所有访问
        url-pattern: /druid/* 
        loginUsername: admin
        loginPassword: 123456
      webStatFilter:
        enabled: true
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        url-pattern: /*
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 合并多个DruidDataSource的监控数据
      useGlobalDataSourceStat: true
## 独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
mybatis-plus:
  mapper-locations: classpath*:mapping/**/*Mapper.xml  #注意:一定要对应mapper映射xml文件的所在路径
  type-aliases-package: com.hnexm.**.entity  # 注意:对应实体类的路径
  configuration:
    mapUnderscoreToCamelCase: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

以上代码关键的地方都有注释,都是通用的,大家看看名字也就明白了。

数据库

创建一个名称为:test 的数据库,创建2个基本的表。如下图
sys_user : 用户表 ; log: 日志表
通过模版文件,自动生成相应的代码
运行 MysqlGenerator.java ,查看控制台,按照提示输入相应的内容即可,如下图
自动生成代码
生成好后,刷新项目目录,则会发现出现相应的各层的代码,如下图
代码
这里要将实体类修改下,加上主键ID,将对应的Mapper.java文件加上注解
在这里插入图片描述
在这里插入图片描述
PS:实体类上默认可以不加@TableName,我的习惯是加上。
接下来模拟新增一个账号的程序。

controller

@RestController
@RequestMapping("sysUser")
public class SysUserController {
	@Autowired
	ISysUserService sysUserService;
	@PostMapping("create")
	public AjaxResponse create(@RequestBody final SysUser user) {
		return sysUserService.create(user);
	}
}

service

@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
	@Autowired
	ILogService logService;
	@Override
	public AjaxResponse create(final SysUser user) {
		try {
			final Log log = new Log();
			log.setId(HnIdUtils.getNewId());
			log.setUrl("sysUser/user");
			logService.save(log);
			user.setId(HnIdUtils.getNewId());
			this.save(user);
		} catch (final Exception e) {
			throw new HnException("新增用户异常:" + e.getMessage());
		}
		return new SucceedResponse("新增用户成功");
	}
}

这里的主键是自定义的,大家可以自行编写,网上很多。
用postman提交模拟数据。
在这里插入图片描述
如上图所示,用户添加成功,打开数据库查看内容
在这里插入图片描述

查看druid

在浏览器中输入:http://127.0.0.1:8888/druid/login.html
如果能够打开登录页面,说明配置成功,然后用配置文件里设置的帐号密码登录,登录后如下图所示:
在这里插入图片描述
以上就初步的完成了springboot \mybatis plus\druid 的初级集合,后续还有很多需要完善的地方,例如数据库事务、日志的自动处理、新增修改数据时自动更新数据的编写者和时间,删除的状态统一处理,这些都是要通过框架的二次封装来完成的。

本文已参与「新人创作礼」活动,一起开启掘金创作之路。