本文纯属个人笔记自己使用有关文章是在其他渠道摘要过来将会附带摘要的路径
首先打开IDEA页面,我们先添加database
详情参考路径
首先打开IDEA页面,我们先添加database
添加后我们就可以在这里打开了!
添加MySQL数据库
打开后自己填入信息(测试时,可能会出现无效时区问题,继续看有详细解决办法!)
点击确定后会下载相应驱动,等待即可!
注意: 如果在测试连接的时候出现了如下错误,点击如下博文解决此问题!
服务器返回无效时区解决
选择自己用的数据库
参考别的表,直接用语句,右键-DDL and Sources-
然后直接在控制台修改
修改后直接运行,表就建好了
2.备份表
先用上面的建表方法建好相同字段的表,然后复制表数据就可以(下面直接展示如何复制内容) :右键-Copy Table to
然后直接确定就OK
3.查看表结构:右键-Modify Table
4.把表数据直接导出成实体类 右键-scripted Extensions-Generate POLOs.clj
然后选择你需要导出的文件夹就OK了
import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
import java.io.*
import java.text.SimpleDateFormat
/*
* Available context bindings:
* SELECTION Iterable
* PROJECT project
* FILES files helper
*/
packageName = ""
typeMapping = [
(~/(?i)tinyint|smallint|mediumint|int/) : "Integer",
(~/(?i)number/) : "Long",
(~/(?i)bool|bit/) : "Boolean",
(~/(?i)float|double|decimal|real/) : "Double",
(~/(?i)timestamp/) : "Timestamp",
(~/(?i)datetime|date|time/) : "Date",
(~/(?i)blob|binary|bfile|clob|raw|image/): "InputStream",
(~/(?i)/) : "String"
]
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
}
def generate(table, dir) {
def className = javaClassName(table.getName(), true)
def fields = calcFields(table)
packageName = getPackageName(dir)
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "UTF-8"))
printWriter.withPrintWriter { out -> generate(out, className, fields, table) }
}
// 获取包所在文件夹路径
def getPackageName(dir) {
return dir.toString().replaceAll("\\\\", ".").replaceAll("/", ".").replaceAll("^.*src(\\.main\\.java\\.)?", "") + ";"
}
def generate(out, className, fields, table) {
out.println "package $packageName"
out.println ""
out.println "import javax.persistence.GeneratedValue"
out.println "import javax.persistence.Column;"
out.println "import javax.persistence.Entity;"
out.println "import javax.persistence.Table;"
out.println "import javax.persistence.Id"
out.println "import java.sql.Timestamp;"
out.println "import com.fasterxml.jackson.annotation.JsonIgnoreProperties;"
Set types = new HashSet()
fields.each() {
types.add(it.type)
}
if (types.contains("Date")) {
out.println "import java.util.Date;"
}
if (types.contains("InputStream")) {
out.println "import java.io.InputStream;"
}
out.println ""
out.println "/**\n" +
" * \n" +
" * @author JunLin\n" +
" * @Timestamp " + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " \n" +
" */"
out.println ""
out.println "@Entity"
out.println "@Table(name =\"" + table.getName() + "\")"
out.println "@SequenceGenerator(name = \"\", sequenceName = \"\", initialValue = 1, allocationSize = 1)"
out.println "@JsonIgnoreProperties(ignoreUnknown = true)"
out.println "public class $className extends NonIDEntity<$className> {"
out.println ""
fields.each() {
out.println ""
// 输出注释
if (isNotEmpty(it.commoent)) {
out.println "\t/**"
out.println "\t * ${it.commoent.toString()}"
out.println "\t */"
}
if (it.annos != "") out.println " ${it.annos.replace("[@Id]", "")}"
// 输出成员变量
out.println "\tprivate ${it.type} ${it.name};"
}
//输出get/set方法
fields.each() {
out.println ""
out.println "\tpublic ${it.type} get${it.name.capitalize()}() {"
out.println "\t\treturn this.${it.name};"
out.println "\t}"
out.println ""
out.println "\tpublic void set${it.name.capitalize()}(${it.type} ${it.name}) {"
out.println "\t\tthis.${it.name} = ${it.name};"
out.println "\t}"
}
out.println ""
out.println "}"
}
def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
def comm = [
colName : col.getName(),
name : javaName(col.getName(), false),
type : typeStr,
commoent: col.getComment(),
annos : ""]
if ("id".equals(Case.LOWER.apply(col.getName()))) {
comm.annos += "\n\t@Id"
comm.annos += "\n\t@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = \"\")"
comm.annos += "\n\t@Column(name = \"" + col.getName() + "\", nullable = false, precision = 0 )"
} else {
comm.annos += "\t@Column(name = \"" + col.getName() + "\" ,nullable = true)"
}
fields += [comm]
}
}
// 处理类名(这里是因为我的表都是以t_命名的,所以需要处理去掉生成类名时的开头的T,
// 如果你不需要那么请查找用到了 javaClassName这个方法的地方修改为 javaName 即可)
def javaClassName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
// 去除开头的T
s = s[1..s.size() - 1]
capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
}
def javaName(str, capitalize) {
// def s = str.split(/(?<=[^\p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
// .join("").replaceAll(/[^\p{javaJavaIdentifierPart}]/, "_")
// capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
}
def isNotEmpty(content) {
return content != null && content.toString().trim().length() > 0
}
static String changeStyle(String str, boolean toCamel) {
if (!str || str.size() <= 1)
return str
if (toCamel) {
String r = str.toLowerCase().split('_').collect { cc -> Case.LOWER.apply(cc).capitalize() }.join('')
return r[0].toLowerCase() + r[1..-1]
} else {
str = str[0].toLowerCase() + str[1..-1]
return str.collect { cc -> ((char) cc).isUpperCase() ? '_' + cc.toLowerCase() : cc }.join('')
}
}
static String genSerialID() {
return "\tprivate static final long serialVersionUID = " + Math.abs(new Random().nextLong()) + "L;"
}
File----Plugins----Translation----重启idea
快捷键 ctrl+shift+Y
设置完成点击ok
3.选中单词或段落 使用快捷键 ctrl+shift+y 即可查看
IDEA内部下载Maven Helper插件
IDEA设置:已打开软件:File–> Setting–>Plugins
未打开IDEA内:Configure --> Project Defaults --> Settings–>Plugins
(2)官网下载
需要注意根据自己idea的版本下载插件
下载后本地安装
2.使用
安装后会提示重启,重启完以后打开pom文件在下方会有类似eclips的多选项卡,切换到dependency analyzer 选项卡即可。
1.插件安装
打开Idea, 左上角菜单选择 ”File --> Settings", 在弹出的对话框中,左侧选择Plugins,搜索栏输入“lombok", 然后点击安装,如下图:
图中按钮是卸载,因为我这里已经提前安装好了。读者在安装后,IDE会提示重启生效。此时,重启IDEA即可开始使用。
2.插件使用
在项目的pom文件中添加lombok依赖,注意此处scope填写provided,代表这个包不需要打包发布,仅编译时需要用到,且已有提供方。
pom.xml
在模型类上,添加注解 @Data,即可省去手写getter, setter, toString的麻烦,如下图:
只需要这样一个简单的注解,在其他地方,就可以调用sysAdmin的getUsername()方法了。
通过 Settings-> Plugins -> Marketplace 进入插件市场选择并下载安装,完成后重启就生效了。
配置好各级日志的前景色
MyBatisCodeHelperPro
在开发中编写生成bean,mapper,mapper.xml即费时也费力,可以通过MyBatisCodeHelper-Pro自动生成bean,dao,mapper.xml等文件,然后根据自己的需要进行修改。
下载MyBatisCodeHelper-Pro插件包到本地,在IDEA中安装此插件
重启IDEA即可,另外可以设置MyBatisCodeHelper-Pro插件属性
老版本激活方式:Tools -> MybatisCodeHelper -> offlineActivation,输入任意字符串
创建实体类Person
package com.coody.mtdemo.entity;
import java.util.Date;
import lombok.Data;
/**
* @Classname Person
*
* @Description TODO
* @Author lw
* @Date 2020-03-16 10:56 */
@Datapublicclass
Person {
/** * 主键ID */
private Integer id;
/** * 角色账户 */
private String roleAcc;
/** * 角色代码 */
private String roleCode;
/** * 角色名称 */
private String roleName;
/** * 创建时间 */
private Date dateCreated;
}
在实体累对象中,点击鼠标右键,选择Generate,再点击generate mybatis files
unique:唯一索引,不可重复;
index:普通索引,可重复;
根据需要进行编辑,然后点击OK
根据需要调整建表语句后,然后在数据库中执行即可。
2.表创建后,生成bean、mapper、mapper.xml
打开IDEA,Database窗口
选择要生成代码对应的表(如Person),点击右键
点击MyBatis generator,弹出生成代码窗口
点击OK,代码即生成,根据需要做对应的修改即可
在编辑代码最右侧,显示一块代码小地图 这款插件使用效果图如下,个人感觉还是有点用处,滚动条太小,有这个地图,拖动起来更加方便一点
首先,我们下载好对应的java最新的中文api文档。–待后期完善
在IDEA中设置文档的路径
这样我们就设置好啦
Codota
代码提示工具,扫描你的代码后,根据你的敲击完美提示
Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以更少的错误更快地进行编码。
安装
如何达到最快的效率 下面是我的开发流程
java类生成crud 不再推荐使用 各种功能没有数据库生成crud 方便 数据库生成crud 在表字段 添加减少字段 合并代码也做得更好
数据库的话 首先要建表 直接写建表语句比较麻烦 我们可以通过java类生成建表语句来生成好
我们先写一个超级简单的java类 啥也不需要加 private也不需要 这个类只是用来生成建表语句
查看演示(打开如果有问题请不要关闭原网页再刷新一下原先的网址就可以了)
或者复制下面的连接打开查看演示视频(由于本文只支持腾讯视频、优酷视频、哔哩哔哩视频)
https://upload-images.jianshu.io/upload_images/11962894-4d6e4746758c2ffa.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1101
生成好了建表语句后 到数据库执行下 然后从数据库来生成crud代码
(使用IDEA高级版的用户直接到IDEA高级版的数据库执行就行)
这时就可以选择各种配置了
在数据库添加 减少字段后 到数据库 重新生成下就好了
当我们数据库用的tinyInt 或者 smallInt这种 生成java类型 是 byte 和 short 两种类型
在java代码里面操作 byte 和 short 类型 比较麻烦 经常需要 强制转换 这是可以配置下 设置 使用Integer 来替代byte和short
作者:葛俊_0f97
链接:https://www.jianshu.com/p/30da9258aa81
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在数据库生成crud时 部分用户可能会勾选 生成example 这个选项
我建议使用 方法名生成sql 来替代生成example这个
首先可以避免生成一大堆的example文件 xml中的example代码看起来也很恶心
写方法名生成sql 的效率也比写example来得快
看xml也很清楚 到底进行了啥操作
另外2.5版本 将支持 定制sql 数据库生成crud中 默认生成的那些语句 比如deleteByPrimaryKey 有不需要的可以一开始就给干掉
如果之后要的话 可以从数据库重新来生成 比如batchInsert 这种 只有当前表需要的时候才来生成
另外我也不推荐 mapper接口做继承 现在代码都是自动生成的,mapper做继承仅能减少一些代码量,没有看到什么其他的效率提升。搞了继承后 看mapper接口 对应的xml 也变得比较麻烦 哪些方法要放到继承里面也比较难定义,有可能某些接口继承的方法根本用不到, 我的建议是每个接口 只生成自己需要的xml方法, 比如batchInsert这个,有个表需要 有的表并不需要。