在上一章节中《技术选型和整合开发环境》,确定了开发的技术,但是如果直接这样用的话,可能开发效率会不高,为了提高开发的效率,这里再整合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.yml加上:

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可以明显提高开发效率。

关注我

以你最方便的方式关注我:

微信公众号:

基于SpringBoot从零构建博客网站 - 整合lombok和mybatis-plus提高开发效率的更多相关文章

  1. 基于SpringBoot从零构建博客网站 - 整合ehcache和开发注册登录功能

    对于程序中一些字典信息.配置信息应该在程序启动时加载到缓存中,用时先到缓存中取,如果没有命中,再到数据库中获取同时放到缓存中,这样做可以减轻数据库层的压力.目前暂时先整合ehcache缓存,同时预留了 ...

  2. 基于SpringBoot从零构建博客网站 - 技术选型和整合开发环境

    技术选型和整合开发环境 1.技术选型 博客网站是基于SpringBoot整合其它模块而开发的,那么每个模块选择的技术如下: SpringBoot版本选择目前较新的2.1.1.RELEASE版本 持久化 ...

  3. 基于SpringBoot从零构建博客网站 - 确定需求和表结构

    要确定一个系统的需求,首先需要明确该系统的用户有哪些,然后针对每一类用户,确定其需求.对于博客网站来说,用户有3大类,分别是: 作者,也即是注册用户 游客,也即非注册用户 管理员,网站维护人员 那么从 ...

  4. 基于SpringBoot从零构建博客网站 - 新增创建、修改、删除专栏功能

    守望博客是支持创建专栏的功能,即可以将一系列相关的文章归档到专栏中,方便用户管理和查阅文章.这里主要讲解专栏的创建.修改和删除功能,至于专栏还涉及其它的功能,例如关注专栏等后续会穿插着介绍. 1.创建 ...

  5. 基于SpringBoot从零构建博客网站 - 设计可扩展上传模块和开发修改头像密码功能

    上传模块在web开发中是很常见的功能也是很重要的功能,在web应用中需要上传的可以是图片.pdf.压缩包等其它类型的文件,同时对于图片可能需要回显,对于其它文件要能够支持下载等.在守望博客系统中对于上 ...

  6. 基于SpringBoot从零构建博客网站 - 集成editor.md开发发布文章功能

    发布文章功能里面最重要的就是需要集成富文本编辑器,目前富文本编辑器有很多,例如ueditor,CKEditor.editor.md等.这里守望博客里面是集成的editor.md,因为editor.md ...

  7. 基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能

    由于守望博客系统中支持由用户自己设置个人主页的URL的后半段,所以必须要用户设置该标识的功能,而且是用户注册登录之后自动弹出的页面,如果用户没有设置该标识,其它的操作是不能够操作的,同时要求主页标识只 ...

  8. 基于SpringBoot从零构建博客网站 - 开发文章详情页面

    文章详情页面是博客系统中最为重要的页面,登录用户与游客都可以浏览文章详情页面,只不过只有登录用户才能进行其它的一些操作,比如评论.点赞和收藏等等. 本次的开发任务只是将文章详情页面展示出来,至于一些收 ...

  9. 基于SpringBoot从零构建博客网站 - 分页显示文章列表功能

    显示文章列表一般都是采用分页显示,比如每页10篇文章显示.这样就不用每次就将所有的文章查询出来,而且当文章数量特别多的时候,如果一次性查询出来很容易出现OOM异常. 后台的分页插件采用的是mybati ...

随机推荐

  1. Linux下高并发socket最大连接数

    http://soft.chinabyte.com/os/285/12349285.shtml (转载时原文内容做个修改) 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是 ...

  2. [Luogu 4135] 作诗

    Description 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M ...

  3. Yii2数据接口

    写接口之前先确认那你已经安装了Yii2的basic版或者advanced版,如果还没有,赶快去看这篇文章:composer安装Yii2. 现在默认你已经安装了basic版或者advanced版了,并且 ...

  4. Java容器:List

    集合类的层次关系 List接口简介 List的常用方法 List实例 Vector ArrayList Vector和ArrayList的扩容 LinkedList 参考文章 今天开始更新Java集合 ...

  5. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  6. 网站开发中使用javascript获取浏览器滚动条宽度

    在网站开发中,有时候需要获取浏览器滚动条的宽度,在武汉蚂蹄软件服务中心的技术人员指导之下,我实现了该需求.记录如下: 首先说明一下原理: ①生成一个div,设置滚动条不可见,记录其宽度: ②将上面的d ...

  7. 基于java的ES开发

    3.1 环境配置 Jdk 1.8及以上 Elasticsearch.client 5.5.2(与服务器版本一致) Log4j 2.7及以下 maven工程必要的jar包依赖 <project x ...

  8. 通俗的讲法理解spring的事务实现原理

    拿房屋买卖举例,流程:销售房屋 -- 接待员 -- 销售员 -- 财务 售楼处 存放着所有待售和已售的房屋数据(数据源 datasource) 总经理 带领一套自己的班底,下属员工都听自己的,服务于售 ...

  9. 多个RestTemplate对象示例

    @Configuration public class MyConfiguration { @LoadBalanced 5 @Bean RestTemplate loadBalanced() { re ...

  10. (七)SpringBoot2.0基础篇- application.properties属性文件的解析及获取

    默认访问的属性文件为application.properties文件,可在启动项目参数中指定spring.config.location的参数: java -jar myproject.jar --s ...