【Java】springboot + vue前后端分离后台管理系统(二) -- 集成mybatis-plus

前言

很多人喜欢使用JPA的快捷开发,个人喜欢mybatis可以自己写sql。而mybaits plus可以很好的结合两者的有点,有基础的CRUD接口,还可以自定义mapper写sql,比较灵活。get it !

准备工作

既然要引入mybatis plus,那么久需要引入数据库相关依赖,还有一些工具包。这边还使用了lombok减少代码量,这个看情况引入,毕竟方便是方便,侵入性强一些,需要安装插件。然后开头先弄个mybatis plus代码生成器,毕竟自己手动建文件还是很累的。。。

引入maven依赖

完整的的pom.xml

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!--mysql驱动-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.22</version>

</dependency>

<!--druid数据源-->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid-spring-boot-starter</artifactId>

<version>1.2.4</version>

</dependency>

<!-- mybatis-plus 相关-->

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-boot-starter</artifactId>

<version>3.4.1</version>

</dependency>

<!-- 代码生成器 -->

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-generator</artifactId>

<version>3.4.1</version>

</dependency>

<!-- 模板引擎 -->

<dependency>

<groupId>org.apache.velocity</groupId>

<artifactId>velocity-engine-core</artifactId>

<version>2.2</version>

</dependency>

<!-- mybatis-plus 结束-->

<!--以下是工具包-->

<dependency>

<groupId>cn.hutool</groupId>

<artifactId>hutool-all</artifactId>

<version>5.5.7</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.75</version>

</dependency>

<!-- lombok -->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.18.12</version>

<scope>provided</scope>

</dependency>

</dependencies>

新建user表

CREATE TABLE `user` (

`id` varchar(32) NOT NULL,

`username` varchar(32) NOT NULL COMMENT '用户名',

`password` varchar(64) NOT NULL COMMENT '密码',

`sex` char(1) DEFAULT NULL COMMENT '性别 0 女| 1 男',

`locked` char(1) DEFAULT NULL COMMENT '是否锁住 0 否 | 1 是',

`create_time` datetime DEFAULT NULL COMMENT '创建时间',

`create_by` varchar(32) DEFAULT NULL COMMENT '创建者',

`update_time` datetime DEFAULT NULL COMMENT '更新时间',

`update_by` varchar(32) DEFAULT NULL COMMENT '更新者',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置代码生成器

新建一个CodeGenerator.java

public class CodeGenerator {

public static void create() throws FileNotFoundException {

String projectPath = System.getProperty("user.dir");

// 1、声明代码生成器

AutoGenerator generator = new AutoGenerator();

// 2、全局信息配置

GlobalConfig globalConfig = new GlobalConfig();

globalConfig

// 输出目录

.setOutputDir(projectPath + "/src/main/java")

// 是否覆盖原有文件 默认false

.setFileOverride(true)

// 是否打开输出目录 默认true

.setOpen(false)

// 作者

.setAuthor("ify")

// 设置实体类名称

.setEntityName("%s")

// 设置mapper 命名方式

.setMapperName("%sDao")

// Mapper xml 命名方式

.setXmlName("%sDao")

//service 命名方式

.setServiceName("%sService")

//service impl 命名方式

.setServiceImplName("%sServiceImpl")

//controller 命名方式

.setControllerName("%sController")

// Mapper xml 生成基础 查询列 可以不设置

.setBaseColumnList(true)

//Mapper xml 生成基础返回map 可以不设置

.setBaseResultMap(true);

// 3、数据源配置

DataSourceConfig dataSourceConfig = new DataSourceConfig();

// 设置数据库类型和数据源

dataSourceConfig.setDbType(DbType.MYSQL)

.setDriverName("com.mysql.cj.jdbc.Driver")

.setUrl("jdbc:mysql://localhost:3306/sample-admin?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8")

.setUsername("root")

.setPassword("123456");

// 4、策略配置

StrategyConfig strategyConfig = new StrategyConfig();

strategyConfig

// 数据库表映射实体 下划线转大写,驼峰命名方式

.setNaming(NamingStrategy.underline_to_camel)

// 数据库字段映射实体属性 下划线转大写,驼峰命名方式

.setColumnNaming(NamingStrategy.underline_to_camel)

// 生成 @RestController 控制器

.setRestControllerStyle(true)

// 设置controller继承的父类

.setSuperControllerClass(BaseController.class)

// entity继承的父类

.setSuperEntityClass(BaseEntity.class)

// entity继承类的字段

.setSuperEntityColumns("id", "create_by", "create_time", "update_by", "update_time")

// 是否生成lombok模式

.setEntityLombokModel(true)

//要生成的表名

.setInclude("user");

// 设置表前缀,生成的实体名称不包含前缀

// if (StrUtil.isNotEmpty() {

// strategyConfig.setTablePrefix();

// }

// 5、生成代码包信息配置

PackageConfig packageConfig = new PackageConfig();

packageConfig

// 设置生成的包名的父类名称

.setParent("com.ify.sampleAdmin.web")

.setController("controller")

.setEntity("entity")

.setMapper("dao")

.setService("service")

.setServiceImpl("service.impl");

//xml 自定义输出到java 文件夹下,所以下面自定义输出路径

// .setXml(mapper");

// 6、自定义要注入到模板的属性

InjectionConfig injectionConfig = new InjectionConfig() {

// 必须实现的方法, 内容可以放空

@Override

public void initMap() {

// Map<String, Object> map = new HashMap<>(4);

// map.put("moduleName", "");

// map.put("description", "");

// this.setMap(map);

}

};

List<FileOutConfig> fileOutConfigList = new ArrayList<>();

FileOutConfig fileOutConfig = new FileOutConfig("/templates/mapper.xml.vm") {

@Override

public String outputFile(TableInfo tableInfo) {

return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Dao" + StringPool.DOT_XML;

}

};

fileOutConfigList.add(fileOutConfig);

injectionConfig.setFileOutConfigList(fileOutConfigList);

// 7 自定义模板~~~~

TemplateConfig templateConfig = new TemplateConfig();

// xml自定义输出路径,所以设置为null

templateConfig.setXml(null);

// 8、整合配置

generator.setGlobalConfig(globalConfig)

.setDataSource(dataSourceConfig)

.setStrategy(strategyConfig)

.setPackageInfo(packageConfig)

.setTemplate(templateConfig)

.setCfg(injectionConfig);

//9、执行

generator.execute();

}

public static void main(String[] args) throws FileNotFoundException {

create();

}

}

公共字段提取到BaseEntity.java

@Data

public class BaseEntity {

/**

* id 生成策略为UUID

*/ @TableId(type = IdType.ASSIGN_UUID)

private String id;

/**

* 创建者 填充策略为插入自动填充

*/

@TableField(fill = FieldFill.INSERT)

private String createBy;

/**

* 创建时间 填充策略为插入自动填充

*/

@TableField(fill = FieldFill.INSERT)

private LocalDateTime createTime;

/**

* 更新者 填充策略为更新自动填充

*/

@TableField(fill = FieldFill.UPDATE)

private String updateBy;

/**

* 更新时间 填充策略为更新自动填充

*/

@TableField(fill = FieldFill.UPDATE)

private LocalDateTime updateTime;

}

然后新建一个自动填充策略类MpMetaObjectHandler.java

public class MpMetaObjectHandler implements MetaObjectHandler {

/**

* 插入时的填充策略

* @param metaObject

*/

@Override

public void insertFill(MetaObject metaObject) {

// 起始版本 3.3.0(推荐使用)

this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());

this.strictInsertFill(metaObject, "createBy", String.class, "ify");

}

/**

* 更新时的填充策略

* @param metaObject

*/

@Override

public void updateFill(MetaObject metaObject) {

// 起始版本 3.3.0(推荐)

this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());

this.strictUpdateFill(metaObject, "updateBy", String.class, "ify");

}

}

新建一个mybatis plus的配置类注入填充策略Bean

@Configuration

public class MybatisPlusConfig {

/**

* 相当于顶部的:@MapperScan("com.ify.sample.module.*.dao")

* {@code @MapperScan("com.ify.sample.module.*.dao")}

* 这里可以扩展,比如使用配置文件来配置扫描Mapper的路径

*/

@Bean

public MapperScannerConfigurer mapperScannerConfigurer() {

MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();

scannerConfigurer.setBasePackage("com.ify.sampleAdmin.web.dao");

return scannerConfigurer;

}

/**

* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)

*/ @Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

return interceptor;

}

/**

* 公共字段自动填充策略

*

* @return

*/

@Bean

public MpMetaObjectHandler mpMetaObjectHandler() {

return new MpMetaObjectHandler();

}

}

生成代码

User.java

@Data

@EqualsAndHashCode(callSuper = true)

@TableName("user")

public class User extends BaseEntity {

private static final long serialVersionUID = 1L;

/**

* 用户名

*/

private String username;

/**

* 密码

*/

private String password;

/**

* 性别 0 女| 1 男

*/

private String sex;

/**

* 是否锁住 0 否 | 1 是

*/

private String locked;

}

UserDao.java

public interface UserDao extends BaseMapper<User> {

}

UserService.java

public interface UserService extends IService<User> {

}

UserServiceImpl.java

@Service

public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {

}

UserController.java

@RestController

@RequestMapping("/user")

public class UserController extends BaseController {

}

测试使用Mybatis Plus

插入一条admin用户,方便测试直接用get请求,

@Autowired

private UserService userService;

@GetMapping("users")

public void users() {

User user = new User();

user.setUsername("admin");

user.setPassword("123456");

user.setLocked("0");

user.setSex("1");

this.userService.save(user);

}

操作成功,id、创建者和创建时间自动填充
【Java】springboot + vue前后端分离后台管理系统(二) -- 集成mybatis-plus

获取用户列表

@Autowired

private UserService userService;

@GetMapping("users")

public String users() {

List<User> userList = this.userService.list();

return JSONObject.toJSONString(userList);

}

【Java】springboot + vue前后端分离后台管理系统(二) -- 集成mybatis-plus

完美!~~~~

以上是 【Java】springboot + vue前后端分离后台管理系统(二) -- 集成mybatis-plus 的全部内容, 来源链接: utcz.com/a/98713.html

回到顶部