在上一章节中《技术选型和整合开发环境》 https://www.toutiao.com/i6676241830004130315/ , 确定了开发的技术, 但是如果直接这样用的话, 可能开发效率会不高, 为了提高开发的效率, 这里再整合 lombok 和 mybatis-plus 两个组件.
1,lombok
以前在 GitHub 上看到过 lombok, 但是也没有进一步了解它的作用. 前几天用了一下, 感觉代码清爽多了, 确时觉得利用 lombok 可以简化代码提高开发效率的.
lombok 的官网为 https://projectlombok.org/ , 官网上对它介绍如下:
- Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
- Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
大概意思就是:
Lombok 是一种 Java™实用工具, 可用来帮助开发人员消除 Java 的冗长代码, 尤其是对于简单的 Java 对象(POJO), 它通过注释实现这一目的.
要使用 lombok 这个工具, 首先要为开发工具安装相应插件, 以 eclipse 为例:
(1), 到官网下载 lombok.jar
(2), 双击 lombok.jar 文件, 出现如下画面:
点击 "Specify location..." 按钮, 找到 eclipse 的运行文件 eclipse.exe
(3), 安装完成, 重启 eclipse 即可.
(4), 如果是 maven 管理工程, 只需要在 pom 文件加入:
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
注意: 由于本人这边是基于 spring boot 的, 所以 lombok 没有加版本号, 如果你这边不是基于 spring boot 就要加上相应的版本号.
lombok 提供注解有:
@Setter: 注解在属性上; 为属性提供 setting 方法
@Getter: 注解在属性上; 为属性提供 getting 方法
@NoArgsConstructor: 注解在类上; 为类提供一个无参的构造方法
@AllArgsConstructor: 注解在类上; 为类提供一个全参的构造方法
@ToString: 注解在类上; 生成对应的 toString 方法
@EqualsAndHashCode: 注解在类上; 生成对应的 equals 和 hashCode 方法
@RequiredArgsConstructor: 注解在类上; 会生成一个包含常量, 和标识了 NotNull 的变量的构造方法
@Data: 注解在类上; 等同于 @Getter,@Setter,@RequiredArgsConstructor,@ToString 和 @EqualsAndHashCode 一起的效果
@Log4j/@Slf4j: 注解在类上; 生成对应的 Logger 对象, 变量名为 log
当然还有一些注解, 此处就不在介绍, 大家可以自行查看官网信息.
举例说明:
比如: 写一个 Config 的 domain 对象, 从上一节章节可知, 该对象有 3 个属性分别是 configId,configValue 和 description, 如果是按着原来的写法是:
- package com.swnote.common.domain;
- import java.io.Serializable;
- /**
- * 站点相关配置信息
- *
- * @author lzj
- * @since 1.0
- * @date [2019-04-04]
- */
- public class Config implements Serializable {
- private static final long serialVersionUID = 8241975875344125491L;
- /**
- * 配置项 key
- */
- private String configId;
- /**
- * 配置项 value
- */
- private String configValue;
- /**
- * 描述
- */
- private String description;
- public String getConfigId() {
- return configId;
- }
- public void setConfigId(String configId) {
- this.configId = configId;
- }
- public String getConfigValue() {
- return configValue;
- }
- public void setConfigValue(String configValue) {
- this.configValue = configValue;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- }
但是如果使用 lombok 后, 就变成如下:
- package com.swnote.common.domain;
- import java.io.Serializable;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- /**
- * 站点相关配置信息
- *
- * @author lzj
- * @since 1.0
- * @date [2019-04-04]
- */
- @Data
- @NoArgsConstructor
- public class Config implements Serializable {
- private static final long serialVersionUID = 8241975875344125491L;
- /**
- * 配置项 key
- */
- private String configId;
- /**
- * 配置项 value
- */
- private String configValue;
- /**
- * 描述
- */
- private String description;
- }
代码明显变得更加简洁了, 只加了 @Data 和 @NoArgsConstructor 两个注解, 就达到跟上面一样的效果, 省去 Getter 和 Getter 代码, 但是这个同样有 Getter 和 Getter 方法, 这就是 lombok 插件帮我们加上相应的代码.
2,mybatis-plus
如果直接使用 mybatis 作为持久化层框架的话, 那么对每条 SQL 都得写在相应的 mapper 文件里面, 这也很麻烦的. 然而 mybatis-plus 是在 MyBatis 的基础上只做增强不做改变, 为简化开发, 提高效率而生. 官网在是 https://mp.baomidou.com, 它的特性有:
无侵入: 只做增强不做改变, 引入它不会对现有工程产生影响, 如丝般顺滑
损耗小: 启动即会自动注入基本 CURD, 性能基本无损耗, 直接面向对象操作
强大的 CRUD 操作: 内置通用 Mapper, 通用 Service, 仅仅通过少量配置即可实现单表大部分 CRUD 操作, 更有强大的条件构造器, 满足各类使用需求
支持 Lambda 形式调用: 通过 Lambda 表达式, 方便的编写各类查询条件, 无需再担心字段写错
支持多种数据库: 支持 MySQL,MariaDB,Oracle,DB2,H2,HSQL,SQLite,Postgre,SQLServer2005,SQLServer 等多种数据库
支持主键自动生成: 支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence), 可自由配置, 完美解决主键问题
支持 xml 热加载: Mapper 对应的 xml 支持热加载, 对于简单的 CRUD 操作, 甚至可以无 xml 启动
支持 ActiveRecord 模式: 支持 ActiveRecord 形式调用, 实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作: 支持全局通用方法注入( Write once, use anywhere )
支持关键词自动转义: 支持数据库关键词 (order,key......) 自动转义, 还可自定义关键词
内置代码生成器: 采用代码或者 Maven 插件可快速生成 Mapper , Model , Service , Controller 层代码, 支持模板引擎, 更有超多自定义配置等您来使用
内置分页插件: 基于 MyBatis 物理分页, 开发者无需关心具体操作, 配置好插件之后, 写分页等同于普通 List 查询
内置性能分析插件: 可输出 Sql 语句以及其执行时间, 建议开发测试时启用该功能, 能快速揪出慢查询
内置全局拦截插件: 提供全表 delete , update 操作智能分析阻断, 也可自定义拦截规则, 预防误操作
内置 Sql 注入剥离器: 支持 Sql 注入剥离, 有效预防 Sql 注入攻击
整合 mybatis-plus:
(1),pom 文件中加入相应依赖:
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.1.0</version>
- </dependency>
(2), 在配置文件 application.YAML 加上:
- mybatis-plus:
- mapper-locations: classpath:com/swnote/*/dao/*.xml
- type-aliases-package: com.swnote.auth.domain,com.swnote.blog.domain,com.swnote.common.domain
(3),domain 类上加上相应的注解:
- /**
- * 站点相关配置信息
- *
- * @author lzj
- * @since 1.0
- * @date [2019-04-04]
- */
- @Data
- @NoArgsConstructor
- @TableName("comm_config")
- public class Config implements Serializable {
- private static final long serialVersionUID = 2408416388054324323L;
- /**
- * 配置项 key
- */
- @TableId(value = "configId", type = IdType.INPUT)
- private String configId;
- /**
- * 配置项 value
- */
- @TableField("configValue")
- private String configValue;
- /**
- * 描述
- */
- @TableField("description")
- private String description;
- }
其中 @TableName,@TableId 和 @TableField 都是 mybatis-plus 中定义的注解.
(4),dao 层代码:
- /**
- * 站点相关配置信息 Dao
- *
- * @author lzj
- * @since 1.0
- * @date [2019-04-04]
- */
- @Repository
- public interface ConfigDao extends BaseMapper<Config> {
- }
(5),service 层代码:
- /**
- * 站点相关配置信息服务接口
- *
- * @author lzj
- * @since 1.0
- * @date [2019-04-04]
- */
- public interface IConfigService extends IService<Config> {
- }
- /**
- * 站点相关配置信息服务类
- *
- * @author lzj
- * @since 1.0
- * @date [2019-04-04]
- */
- @Service
- public class ConfigService extends ServiceImpl<ConfigDao, Config> implements IConfigService {
- }
通过上面 dao 层和 service 层代码可以发现, 对于增删改查的操作都不需要写任何代码.
(6), 测试
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class ConfigServiceTest {
- @Autowired
- private IConfigService configService;
- @Test
- public void save() throws Exception {
- Config config = new Config();
- config.setConfigId("test");
- config.setConfigValue("testValue");
- config.setDescription("测试内容");
- configService.save(config);
- }
- @Test
- public void update() {
- Config config = new Config();
- config.setConfigId("test");
- config.setConfigValue("testValue---g");
- config.setDescription("测试内容 ---g");
- configService.updateById(config);
- }
- @Test
- public void get() {
- Config config = configService.getById("test");
- System.out.println(config);
- }
- @After
- public void delete() {
- configService.removeById("test");
- }
- }
经测试是没有问题的, 整合 mybatis-plus 可以明显提高开发效率.
关注我
以你最方便的方式关注我:
微信公众号:
来源: https://www.cnblogs.com/atcloud/p/10749763.html