idea安裝EasyCode插件常用配置

 

在使用idea開發SSM框架的java項目時,我們常常需要寫大量重複且繁瑣的代碼,比如mapper.xml文件中的映射關係以及簡單的批量插入更新方法,比如實體類中的定義以及set()、get()方法等,在項目較小時可以選擇手打,但如果項目較大手打就比較浪費時間,這裏提供一種較爲簡單通過逆向工程生成文件的方式。

開發工具:idea

插件:EasyCode

步驟一:首先安裝EasyCode插件,這裏網上有教程,不再贅述;

步驟二:安裝好插件後,需要進行基本的配置,插件會有初始的配置,如果不滿足可以自定義,這裏列出小編採用的配置

通過右上角的添加/刪除可以進行個性化定製,配置完映射關係後,可以再配置一下各層(Mapper、Dao、Service等)需要展示的內容,插件同樣會給出初始配置,可以根據需要定義新的分組,實時調試。

下面是小編各層自定義的配置,大家可以參考自定義配置:

entity.java:

##引入宏定義
$!define

##使用宏定義設置回調(保存位置與文件後綴)
#save("/entity", ".java")

##使用宏定義設置包後綴
#setPackageSuffix("entity")

##使用全局變量實現默認包導入
$!autoImport
import com.example.db.base.entity.Id;

##使用宏定義實現類註釋信息
#tableComment("實體類")
public class $!{tableInfo.name} extends Id {
    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
}

dao.java:

##引入宏定義
$!define
##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "Mapper"))
##設置回調
$!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 com.example.db.base.mapper.BaseMapper;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

 #tableComment("表數據庫訪問層")
@Mapper
public interface $!{tableName} extends BaseMapper<$!{tableInfo.name}> {

}

service.java:

##引入宏定義
$!define
##定義初始變量
#set($tableName = $tool.append("I",$tableInfo.name, "Service"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

##拿到主鍵
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

import com.example.db.base.service.IService;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import java.util.List;

 #tableComment("表服務接口")
public interface $!{tableName} extends IService<$!{tableInfo.name}> {

}

serviceImpl.java:

##引入宏定義
$!define
##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))

##拿到主鍵
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;

import com.example.db.base.service.impl.ServiceImpl;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.service.I$!{tableInfo.name}Service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

 #tableComment("表服務實現類")
@Transactional
@Service
public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper,$!{tableInfo.name}> implements I$!{tableInfo.name}Service {
    
}

controller.java:

##引入宏定義
$!define
##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "Controller"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))
##拿到主鍵
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;

import com.example.db.base.controller.BaseController;
import com.example.db.common.ExtGridResponse;
import com.example.db.common.Query;
import com.example.db.common.R;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.I$!{tableInfo.name}Service;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

 #tableComment("表控制層")
@RestController
@RequestMapping("$!tool.firstLowerCase($tableInfo.name)")
public class $!{tableName} extends BaseController {
    
    @Resource
    private I$!{tableInfo.name}Service service;

    @GetMapping("/list")
    public ExtGridResponse list(@RequestParam Map<String, Object> params) {
        return new ExtGridResponse<>(service.selectPageList(new Query<>(params)));
    }

    @PostMapping("/save")
    public R get($!{tableInfo.name} entity) {
        return R.ok(service.saveOrUpdate(entity));
    }
    
    @PostMapping("/saveBatch")
    public R saveBatch(@RequestParam String jsonData) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        List<$!{tableInfo.name}> list = mapper.readValue(jsonData, mapper.getTypeFactory().constructCollectionType(List.class, $!{tableInfo.name}.class));
        if (null == list || list.size() <= 0) {
            return R.error("沒有要保存的數據!");
        }
        List<$!{tableInfo.name}> insertList = new ArrayList<$!{tableInfo.name}>();
        List<$!{tableInfo.name}> updateList = new ArrayList<$!{tableInfo.name}>();
        for ($!{tableInfo.name} l : list) {
            if (null!=l.get$!tool.firstUpperCase($!pk.name)() && !"".equals(l.get$!tool.firstUpperCase($!pk.name)())) {
                updateList.add(l);
            } else {
                insertList.add(l);
            }
        }
        service.insertOrUpdateBatch(insertList, updateList);
        return R.ok();
    }

    @PostMapping("/deleteByIds")
    public R get(@RequestParam List<String> ids) {
        return R.ok(service.deleteByIds(ids));
    }
}

mapper.xml:

##引入mybatis支持
$!mybatisSupport

##設置保存名稱與保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.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}Mapper">

    <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)
        <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end
    </resultMap>
    
    <sql id="Base_Column_List" >
        #allSqlColumn()
        
    </sql>
    
    <!--根據主鍵查詢-->
    <select id="selectByPrimaryKey" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="Base_Column_List" />
        from $!tableInfo.obj.name
        where $!pk.obj.name = #{$!pk.name}
    </select>

    <!--根據條件查詢列表-->
    <select id="selectList" resultMap="$!{tableInfo.name}Map" parameterType="map">
        select
         <include refid="Base_Column_List" />
        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" parameterType="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}">
        <selectKey keyProperty="id" resultType="String" order="BEFORE">
            select sys_guid() from dual
        </selectKey>
        insert into $!{tableInfo.obj.name}(
            #foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), 
            #end#end)
        values (
            #foreach($column in $tableInfo.fullColumn)#{$!{column.name},jdbcType=$!column.ext.jdbcType}#if($velocityHasNext), 
            #end#end)
    </insert>
    
    <!--新增選擇列-->
    <insert id="insertSelective" parameterType="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}">
        <selectKey keyProperty="id" resultType="String" order="BEFORE">
            select sys_guid() from dual
        </selectKey>
        insert into $!{tableInfo.obj.name}
        <trim prefix="(" suffix=")" suffixOverrides="," >
#foreach($column in $tableInfo.fullColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                $!column.obj.name,
            </if>
#end
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
#foreach($column in $tableInfo.fullColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                #{$!column.name,jdbcType=$!column.ext.jdbcType},
            </if>
#end
        </trim>
    </insert>

    <!--批量新增-->
    <insert id="insertBatch" parameterType="java.util.List" >
        insert into $!{tableInfo.obj.name}(
            #foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), 
            #end#end)
        select A.* from (
        <foreach collection="list" item="item" index="index" separator="union all">
            select sys_guid() as id,
            #foreach($column in $tableInfo.otherColumn)#{item.$!{column.name},jdbcType=$!column.ext.jdbcType}#if($velocityHasNext), 
            #end#end
            
            from dual
        </foreach>
        ) A
    </insert>

    <!--通過主鍵修改數據-->
    <update id="updateByPrimaryKeySelective">
        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,jdbcType=$!column.ext.jdbcType},
            </if>
#end
        </set>
        where $!pk.obj.name = #{$!pk.name,jdbcType=$!pk.ext.jdbcType}
    </update>
    
    <!--批量更新-->
    <update id="updateBatch" parameterType="java.util.List" >
        <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
            update $!{tableInfo.obj.name}
        <set>
#foreach($column in $tableInfo.otherColumn)
            <if test="item.$!column.name != null#if($column.type.equals("java.lang.String")) and item.$!column.name != ''#end">
                $!column.obj.name = #{item.$!column.name,jdbcType=$!column.ext.jdbcType},
            </if>
#end
        </set>
        where $!pk.obj.name = #{item.$!pk.name,jdbcType=$!pk.ext.jdbcType}
        </foreach>
    </update>

    <!--通過主鍵刪除-->
    <delete id="deleteByIds">
        delete from $!{tableInfo.obj.name} 
        where $!pk.obj.name in
         <foreach collection="list" item="item" separator="," open="(" close=")">
         #{item}
         </foreach>
    </delete>
</mapper>

到這裏配置工作就完成了,接下來就只需要使用插件就能達到我們想要的效果了。

通過連接的數據庫,選中你需要生成文件的數據庫表,右鍵選擇EasyCode

選擇好要生成的文件並且指定要生成的位置,點擊OK就可以實現效果了。


到這裏插件的配置使用就結束了,idea可用的類似EasyCode的插件還有很多,非常便於我們的日常開發,通過逆向工程生成文件的方法也不止本文提到的這一種,工作中會遇到的問題還有很多,記錄下來可以隨時進行翻閱,也爲大家提供一個簡單的介紹,有描述不準確的地方,歡迎大家提出指正,相互學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章