1.连接数据库
我用的是mysql,当然其他关系型数据库也是可以的
点击idea右方database,接着点击+
接着输入端口,账号密码,登录就OK啦
如果test connection 按钮点不了则看该页面最下方下载插件就可以了
2.下载esayCode 插件(有的版本idea已经装好,装好自动跳过这步)
Plugins --> 搜索安装Easy Code插件 --> 安装之后注意重启idea!
3.生成默认模板代码
1.右键对应的表→esaycode→generate code
2.选择对应的包跟路径就可以生成代码了
1.进入设置页面
file → setting → esaycode
2.添加自定义模板
根据图片步骤操作
这个时候就可以参照默认模板进行修改了.
3.jdbcType修改
在项目中我发现int.long等数字数据类型在生成xml的jdbcType格式不对,项目报错,这里可以对jdbcType进行修改
改成以下
##针对Mybatis 进行支持,主要用于生成xml文件 #foreach($column in $tableInfo.fullColumn) ##储存列类型 $tool.call($column.ext.put("sqlType", $tool.getField($column.obj.dataType, "typeName"))) #if($tool.newHashSet("java.lang.String").contains($column.type)) #set($jdbcType="VARCHAR") #elseif($tool.newHashSet("java.lang.Boolean", "boolean").contains($column.type)) #set($jdbcType="BOOLEAN") #elseif($tool.newHashSet("java.lang.Byte", "byte").contains($column.type)) #set($jdbcType="BYTE") #elseif($tool.newHashSet("java.lang.Integer", "int", "java.lang.Short", "short").contains($column.type)) #set($jdbcType="NUMERIC") #elseif($tool.newHashSet("java.lang.Long", "long").contains($column.type)) #set($jdbcType="NUMERIC") #elseif($tool.newHashSet("java.lang.Float", "float", "java.lang.Double", "double").contains($column.type)) #set($jdbcType="NUMERIC") #elseif($tool.newHashSet("java.util.Date", "java.sql.Timestamp", "java.time.Instant", "java.time.LocalDateTime", "java.time.OffsetDateTime", " java.time.ZonedDateTime").contains($column.type)) #set($jdbcType="TIMESTAMP") #elseif($tool.newHashSet("java.sql.Date", "java.time.LocalDate").contains($column.type)) #set($jdbcType="TIMESTAMP") #else ##其他类型 #set($jdbcType="OTHER") #end $tool.call($column.ext.put("jdbcType", $jdbcType)) #end ##定义宏,查询所有列 #macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($velocityHasNext), #end#end#end
改完后xml文件
4.贴上修改后的模板文件,希望可以用到
dao模板
##定义初始变量 #set($tableName = $tool.append($tableInfo.name, "Dao")) ##设置回调 $!callback.setFileName($tool.append($tableName, ".java")) $!callback.setSavePath($tool.append($tableInfo.savePath, "/dao")) ##拿到主键 #if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0)) #end #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao; import $!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto; import org.apache.ibatis.annotations.Param; import java.util.List; import org.apache.ibatis.annotations.Mapper; /** * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层 * * @author hd * @since $!time.currTime() */ @Mapper public interface $!{tableName} { /** * 通过ID查询单条数据 * * @param $!pk.name 主键 * @return 实例对象 */ $!{tableInfo.name}Dto queryById($!pk.shortType $!pk.name); /** * 查询指定行数据 * * @param offset 查询起始位置 * @param limit 查询条数 * @return 对象列表 */ List<$!{tableInfo.name}Dto> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit); /** * 通过实体作为筛选条件查询 * * @param $!tool.firstLowerCase($!{tableInfo.name})Dto 实例对象 * @return 对象列表 */ List<$!{tableInfo.name}Dto> queryAll($!{tableInfo.name}Dto $!tool.firstLowerCase($!{tableInfo.name})Dto); /** * 新增数据 * * @param $!tool.firstLowerCase($!{tableInfo.name})Dto 实例对象 * @return 影响行数 */ int insert($!{tableInfo.name}Dto $!tool.firstLowerCase($!{tableInfo.name})Dto); /** * 修改数据 * * @param $!tool.firstLowerCase($!{tableInfo.name})Dto 实例对象 * @return 影响行数 */ int update($!{tableInfo.name}Dto $!tool.firstLowerCase($!{tableInfo.name})Dto); /** * 通过主键删除数据 * * @param $!pk.name 主键 * @return 影响行数 */ int deleteById($!pk.shortType $!pk.name); }
xml 模板
##引入mybatis支持 $!mybatisSupport ##设置保存名称与保存位置 $!callback.setFileName($tool.append($!{tableInfo.name}, "Dao.xml")) $!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper")) ##拿到主键 #if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0)) #end <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao"> <resultMap type="$!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto" id="$!{tableInfo.name}Map"> #foreach($column in $tableInfo.fullColumn) <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/> #end </resultMap> <!--查询单个--> <select id="queryById" resultMap="$!{tableInfo.name}Map"> select #allSqlColumn() from $!tableInfo.obj.name where $!pk.obj.name = #{$!pk.name} </select> <!--查询指定行数据--> <select id="queryAllByLimit" resultMap="$!{tableInfo.name}Map"> select #allSqlColumn() from $!tableInfo.obj.name limit #{offset}, #{limit} </select> <!--通过实体作为筛选条件查询--> <select id="queryAll" resultMap="$!{tableInfo.name}Map"> select #allSqlColumn() from $!tableInfo.obj.name <where> #foreach($column in $tableInfo.fullColumn) <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end"> and $!column.obj.name = #{$!column.name} </if> #end </where> </select> <!--新增所有列--> <insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true"> insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end) values (#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end) </insert> <!--通过主键修改数据--> <update id="update"> update $!{tableInfo.obj.name} <set> #foreach($column in $tableInfo.otherColumn) <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end"> $!column.obj.name = #{$!column.name}, </if> #end </set> where $!pk.obj.name = #{$!pk.name} </update> <!--通过主键删除--> <delete id="deleteById"> delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name} </delete> </mapper>
entity模板
##引入宏定义 $!define ##使用宏定义设置回调(保存位置与文件后缀) #save("/entity", ".java") ##使用宏定义设置包后缀 #setPackageSuffix("entity") ##使用全局变量实现默认包导入 /** * $!{tableInfo.comment}($!{tableInfo.name})实体类 * * @author hd * @since $!time.currTime() */ import java.io.Serializable; import lombok.Data; @Data public class $!{tableInfo.name} implements Serializable { private static final long serialVersionUID = $!tool.serial(); #foreach($column in $tableInfo.fullColumn) #if(${column.comment})/** *${column.comment} */#end private $!{tool.getClsNameByFullName($column.type)} $!{column.name}; #end #foreach($column in $tableInfo.fullColumn) ##使用宏定义实现get,set方法 ##getSetMethod($column) #end }
dto模板
##定义初始变量 #set($tableName = $tool.append($tableInfo.name, "Dto")) ##设置回调 $!callback.setFileName($tool.append($tableName, ".java")) $!callback.setSavePath($tool.append($tableInfo.savePath, "/dto")) #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dto; /** * $!{tableInfo.comment}($!{tableInfo.name})Dto * * @author hd * @since $!time.currTime() */ import lombok.Data; import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}; @Data public class $!{tableInfo.name}Dto extends $!{tableInfo.name} { }