Lombok

小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法

こ雲淡風輕ζ 提交于 2020-07-29 07:01:37
本文是本系列文章的第七篇,前6篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书MybatisPlus第3篇-自定义SQL 小书MybatisPlus第4篇-表格分页与下拉分页查询 小书MybatisPlus第5篇-Active Record模式精讲 小书MybatisPlus第6篇-主键生成策略精讲 一、代码生成器的基础实现原理 相信大部分的开发者都使用过或者听说过“模板引擎”,它可以帮我们实现视图与数据的分离,快速开发视图页面,并将模板整合结果用于在浏览器显示。其核心实现原理就是:HTML模板页面 + 页面数据 = 输出结果。页面视图输出的过程就是通过模板引擎实现的。 代码生成器的实现原理与模板引擎实现页面渲染的逻辑几乎是一致的,除了下面的几个区别: 所谓模板:就是某语言的代码 + 模板引擎语法的占位符,该占位符用来数据天换。所以代码生成器的模板文件不再专指HTML页面模板文件,可以是任何类型的代码文件。 模板引擎的输出结果在项目中是输出给浏览器进行页面渲染的,但是对于代码生成器而言,模板引擎的输出结果是保存到磁盘文件。 二、如何编写模板文件 要编写模板文件,首先我们要知道正常的代码待如何书写。比如下面的POJO代码: 上面的POJO代码写成Freemarker模板文件

谈谈Java常用类库中的设计模式

99封情书 提交于 2020-07-28 17:44:11
背景 最近一口气看完了Joshua Bloch大神的 Effective Java (下文简称EJ)。书中以tips的形式罗列了Java开发中的最佳实践,每个tip都将其意图和要点压缩在了标题里,这种做法我很喜欢:一来比较亲切,比起难啃的系统书,EJ就像是一本Java的《俚语指南》;二来记忆起来十分方便,整本书过一遍就能望标题生义。 在通读这本书时,我发现作者多次列举现有类库中的实现的设计模式,我有意将其收集起来,这些实现相当经典,我觉得有必要落成一篇文章。随着以后对类库的理解越来越深,我也会持续追加上自己发现的Pattern。 概述 由于篇幅限制,本主题会做成一个系列,每个系列介绍3-4个模式。 本文介绍的设计模式(可跳转): 建造者 工厂方法 享元 桥接 Here We Go 建造者 (Builder) 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 场景:创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式时;对象内部结构复杂;对象内部属性相互依赖。 类型:创建型 建造者模式在Java中最广泛的用途就是复杂对象创建。比起类构造器或Getter/Setter,它同时保证了创建过程的 可读性(和属性名一致的设参方法) 和 安全性(未创建完毕的对象不会逸出) ,同时它还有: 参数可选、可在类继承层次中复用、对集合类字段更加友好 等等优点

Mybatis问题记录-狂神版

ε祈祈猫儿з 提交于 2020-07-28 12:06:54
目录 前言 配置文件包含中文注释导致出错 解决办法1 解决办法2 解决办法3 IDEA注释如何在光标位置生成 使用association时映射出错 排错过程 排查问题1 排查问题2 问题3 挖坑 面试高频 后记 前言 B站Up狂神说的教程,写的挺好的,东西也新。强烈推荐 https://www.bilibili.com/read/cv5702420 微信文档 狂神说MyBatis01:第一个程序: https://mp.weixin.qq.com/s/vy-TUFa1Rb69ekxiEYGRqw 狂神说MyBatis02:CRUD操作及配置解析: https://mp.weixin.qq.com/s/efqEupNSPZUKqrRoGAnxzQ 狂神说MyBatis03:ResultMap及分页: https://mp.weixin.qq.com/s/LXXIR7W_kZBHPIDqkNwrLg 狂神说MyBatis04:使用注解开发: https://mp.weixin.qq.com/s/3x3ynp5qhGNP-leeOxBU6g 狂神说MyBatis05:一对多和多对一处理: https://mp.weixin.qq.com/s/Dpt0LHTgx0kL7RCk8PZ2aw 狂神说MyBatis06:动态SQL: https://mp.weixin.qq.com/s

Spring Boot发送邮件

佐手、 提交于 2020-07-28 02:55:45
如何使用Spring Boot发送邮件? Spring Boot为发送邮件提供了starter: spring-boot-starter-mail 。 接下来,我们看看如何用Spring Boot发送邮件。 一、配置邮箱 这里我们使用163网易邮箱 1.开启SMTP服务 2.设置/重置客户端授权密码 二、编码实现 1.添加依赖 1 <!-- mail --> 2 < dependency > 3 < groupId > org.springframework.boot </ groupId > 4 < artifactId > spring-boot-starter-mail </ artifactId > 5 </ dependency > 2.编写配置 1 # mail 2 spring.mail.host=smtp.163 .com 3 spring.mail.username=xxxxxx@163 .com 4 spring.mail.password= xxxxxx 5 spring.mail.from=xxxxxx@163 .com 6 spring.mail.properties.mail.smtp.auth= true 7 spring.mail.properties.mail.smtp.starttls.enable= true 8 spring.mail

IDEA提高开发效率的7个插件

≯℡__Kan透↙ 提交于 2020-07-27 23:07:52
IDEA提高开发效率的7个插件 1. 多行编辑 先来体验一下从xml文件拷贝字段新建实体对象 一般我们为了新建多表连接后映射的 ResultMap ,耗费不少时间,那么我们就来试一试这个多行编辑 表字段存在下划线,而实体中不允许,更是讨厌 ,等着一招教你解决 前提条件,安装一个idea的插件,用来驼峰与下划线互转的:CamelCase 步骤: ① 多行选择,按住ALT(windows)/option(Mac) ,拉动鼠标就可 ② 选中字段对象 Win Ctrl+shift+左箭头 Mac option+shift+左箭头 ③ 复制,然后新建实体对象,右键选择 Paste without Formatting,也就是无格式粘贴 ④ 然后下划线转驼峰对象,插件有快捷键 Win Shift + Alt + U Mac ⇧(shift) + ⌥(option) + U ⑤ 选中多行,直接输入即是多行编辑,编辑完成后使用代码格式化即可 2. Grep Console 功效 自定义idea日志打印颜色等功效 解决的问题 历史的老项目打印的日志无颜色,未配置颜色 多项目配置的彩色日志也不同 其他地方日志粘贴过来,也可以上色 直接去idea设置中 Plugins 下载即可,下面设置日志颜色 效果图如下 3. JRebel热部署 解决了什么问题 项目启动时间长,修改一个字段要重启一下,实属弟弟

netty实战之微信登录群聊9-客户端互群聊实现

匆匆过客 提交于 2020-07-27 01:12:38
增加了 GroupMessageRequestHandler, GroupMessageResponseHandler两个handler 下面见详细代码: package com.juejing.im.attribute; import com.juejing.im.Session.Session; import io.netty.util.AttributeKey; public interface Attributes { AttributeKey<Boolean> LOGIN = AttributeKey.newInstance("login"); AttributeKey<Session> SESSION = AttributeKey.newInstance("session"); } package com.juejing.im.client.console; import io.netty.channel.Channel; import java.util.Scanner; public interface ConsoleCommand { void exec(Scanner scanner, Channel channel); } package com.juejing.im.client.console; import io.netty.channel

lombok如何将代码写入原类

一世执手 提交于 2020-07-25 15:58:33
1 lombok 使用注解的方式,去掉一些通用的很占地方的方法,使代码更简洁易懂 2 怎么做到的? 用到的是编译时注解功能,spring中 @Controller ,@Service都是运行时注解,大多是通过反射来实现的 编译时注解:在程序编译期间通过注解处理器进行处理 编译期间:将*.java转成*.class,也可能是将字节码转成机器码,或者将*.java转换成本地机器代码的过程 运行期:加载字节码文件到内存,到最后使用完毕后卸载都属于运行期 3 注解处理工具 apt Annotation Processing Tool 操作java源文件,API可以在编译时扫描和处理注解,拿到注解信息后自动生成一些代码,获取注解信息和生成代码都是在编译的时候完成,相比反射可以提高性能,lombok是修改了java中抽象语法树AST才做到修改原有类信息 如何用APT生成class文件 来源: oschina 链接: https://my.oschina.net/iioschina/blog/4299863

java 线程中使用lamba表达式

心已入冬 提交于 2020-07-24 22:05:28
举例 import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Slf4j public class SynchronizedExample2 { // 修饰一个类 public static void test1( int j) { synchronized (SynchronizedExample2. class ) { for ( int i = 0; i < 3; i++ ) { log.info( "test1 {} - {}" , j, i); } } } // 修饰一个静态方法 public static synchronized void test2( int j) { for ( int i = 0; i < 3; i++ ) { log.info( "test2 {} - {}" , j, i); } } public static void main(String[] args) { SynchronizedExample2 example1 = new SynchronizedExample2(); SynchronizedExample2 example2 = new

Spring Boot(2.2.X) - Spring Elastic Search(6.8.X) - Different JSONProperty and Field Name

别来无恙 提交于 2020-07-23 08:22:05
问题 Updated Spring boot to 2.2.X from 2.1.X and elastic search to 6.8.X from 6.3.X . Got mapping exception, to resolve Mapping exception, renamed document variable to myDocument. Now on elasticSearchRepo.SaveAll(objectTosave) value is not persisted in document. Other properties like id, category are present in the document. Is there any way to have different fieldName and jsonProperty? import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data

Spring Boot(2.2.X) - Spring Elastic Search(6.8.X) - Different JSONProperty and Field Name

一个人想着一个人 提交于 2020-07-23 08:21:05
问题 Updated Spring boot to 2.2.X from 2.1.X and elastic search to 6.8.X from 6.3.X . Got mapping exception, to resolve Mapping exception, renamed document variable to myDocument. Now on elasticSearchRepo.SaveAll(objectTosave) value is not persisted in document. Other properties like id, category are present in the document. Is there any way to have different fieldName and jsonProperty? import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data