IDEA插件EasyCode及MyBatis最优配置步骤详解
具体安装步骤,不再赘述,仅附上个人工作、学习中的对 EasyCode 的详细配置。插件链接地址:https://gitee.com/makejava/EasyCode
Type Mapper
varchar((d+))?java.lang.Stringchar((d+))?java.lang.Stringtextjava.lang.Stringdecimal((d+))?java.lang.Doubledecimal((d+,d+))?java.lang.Doubleintegerjava.lang.Integerint((d+))?java.lang.Integerint4java.lang.Integerint8java.lang.Longbigint((d+))?java.lang.Longdatetime((d+))?java.time.LocalDateTimetimestampjava.time.LocalDateTimebooleanjava.lang.Booleantinyint((d+))?java.lang.Integersmallint((d+))?java.lang.Integerdouble((d+))?java.lang.Doubledouble((d+,d+))?java.lang.Double
Template Setting
entity.java
##初始化定义$!init##引入宏定义$!define##使用宏定义设置回调(保存位置与文件后缀)#save('/entity', '.java')##使用宏定义设置包后缀#setPackageSuffix('entity')##使用全局变量实现默认包导入$!autoImportimport java.io.Serializable;##使用宏定义实现类注释信息#tableComment('实体类')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 public $!{tableInfo.name}() { } public $!{tableInfo.name}(#foreach($column in $tableInfo.fullColumn)$!{tool.getClsNameByFullName($column.type)} $!column.name #if($velocityCount != $tableInfo.fullColumn.size()), #end#end) { #foreach($column in $tableInfo.fullColumn) this.$!column.name = $!column.name;#end }#foreach($column in $tableInfo.fullColumn)##使用宏定义实现get,set方法 #getSetMethod($column)#end @Override public String toString() { StringBuilder str = new StringBuilder(); str.append('$!{tableInfo.name}{'); #foreach( $column in $tableInfo.fullColumn ) str.append('$!column.name=').append(this.$!column.name)#if( $foreach.hasNext ).append(', ')#end; #end str.append(’}’); return str.toString(); }}
DTO.java
##导入宏定义$!define##保存文件(宏定义)#save('/dto', 'DTO.java')##包路径(宏定义)#setPackageSuffix('dto')##自动导入包(全局变量)$!autoImport##import com.baomidou.mybatisplus.extension.activerecord.Model;import java.io.Serializable;import lombok.Data;##import com.baomidou.mybatisplus.annotation.IdType;##import com.baomidou.mybatisplus.annotation.TableId;##表注释(宏定义)#tableComment('DTO')@Datapublic class $!{tableInfo.name}DTO 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}
mapper.java
##定义初始变量#set($tableName = $tool.append($tableInfo.name, 'Mapper'))##设置回调$!callback.setFileName($tool.append($tableName, '.java'))$!callback.setSavePath($tool.append($tableInfo.savePath, '/mapper'))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper;import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import java.util.List;#set($time=$!time.currTime())#set($time=$time.substring(0,11))#set($time=$time.replace('-','/'))/** * <p> * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层 * </p> * * @author:$!author * @date:$!time */@Mapperpublic interface $!{tableName} { /** * 通过ID查询单条数据 * * @param $!pk.name 主键 * @return 实例对象 */ $!{tableInfo.name} queryById($!pk.shortType $!pk.name); /** * 通过实体作为筛选条件查询 * * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象 * @return 对象列表 */ List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})); /** * 通过实体作为筛选条件查询条数 * * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象 * @return 条数 */ int queryAllCount($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})); /** * 新增数据 * * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象 * @return 影响行数 */ int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})); /** * 新增选择列 * * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象 * @return 影响行数 */ int insertSelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})); /** * 修改数据 * * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象 * @return 影响行数 */ int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})); /** * 通过主键删除数据 * * @param $!pk.name 主键 * @return 影响行数 */ int deleteById($!pk.shortType $!pk.name); /** * 批量新增 * @param recordList * @return 影响行数 */ int batchInsert(@Param('recordList') List<$!{tableInfo.name}> recordList); /** * 批量修改 * @param recordList * @return 影响行数 */ int batchUpdate(@Param('recordList') List<$!{tableInfo.name}> recordList); /** * 根据主键批量删除 * @param ids 主键s * @return 影响行数 */ int batchDelete(@Param('ids') String[] ids); }
serviceImpl.java
##初始化定义$!init##定义初始变量#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 $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import org.springframework.stereotype.Service;import org.springframework.beans.factory.annotation.Autowired;#set($time=$!time.currTime())#set($time=$time.substring(0,11))#set($time=$time.replace('-','/'))/** * <p> * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类 * </p> * * @author:$!author * @date:$!time */@Service('/$!tool.firstLowerCase($!{tableInfo.name})Service')public class $!{tableName} implements $!{tableInfo.name}Service { @Autowired private $!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper;}
service.java
##定义初始变量#set($tableName = $tool.append($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;#set($time=$!time.currTime())#set($time=$time.substring(0,11))#set($time=$time.replace('-','/'))/** * <p> * $!{tableInfo.comment}($!{tableInfo.name})表服务接口 * </p> * * @author:$!author * @date:$!time */public interface $!{tableName} {}
controller.java
##定义初始变量#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 $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;#set($time=$!time.currTime())#set($time=$time.substring(0,11))#set($time=$time.replace('-','/'))/** * <p> * $!{tableInfo.comment}($!{tableInfo.name})表控制层 * </p> * * @author:$!author * @date:$!time */@RestController@RequestMapping('/$!tool.firstLowerCase($tableInfo.name)')public class $!{tableName} { @Autowired private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;}
mysql-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}.mapper.$!{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.name' jdbcType='$!column.ext.jdbcType'/>#end </resultMap><!-- 伪列 --><sql id='columns'>#foreach($column in $tableInfo.fullColumn) a.$!column.obj.name AS $!column.name #if($velocityCount != $tableInfo.fullColumn.size()),#end#end </sql> <!-- 查询条件 --><sql id='whereSql'> <where>#foreach($column in $tableInfo.fullColumn) <if test='$!column.name != null#if($column.type.equals('java.lang.String')) and $!column.name != ’’#end'> and a.$!column.obj.name = #{$!column.name} </if>#end </where> </sql> <!-- 通过ID查询单条数据 --> <select resultType='$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}'> select <include refid='columns'/> from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name a where a.$!pk.obj.name = #{$!pk.name} </select> <!-- 通过实体作为筛选条件查询 --> <select resultType='$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}'> select <include refid='columns'/> from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name a <include refid='whereSql' /> </select> <!-- 通过实体作为筛选条件查询条数 --> <select resultType='java.lang.Integer'> select count(1) from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name a <include refid='whereSql' /> </select> <!-- 新增数据 --> <insert keyProperty='$!pk.name' useGeneratedKeys='true'> insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end) values (#foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($velocityHasNext), #end#end) </insert> <!-- 新增选择列 --> <insert keyProperty='$!pk.name' useGeneratedKeys='true'> insert into $!{tableInfo.obj.parent.name}.$!{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> <!-- 修改数据 --> <update id='update'> update $!{tableInfo.obj.parent.name}.$!{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.parent.name}.$!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name} </delete> <!-- 批量新增 --> <insert parameterType='java.util.List'> insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} ( #foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end ) values <foreach collection='recordList' index='index' item='item' separator=','> ( #foreach($column in $tableInfo.fullColumn)#{item.$!{column.name}}#if($velocityHasNext), #end#end ) </foreach> </insert> <!-- 批量修改 --> <update parameterType='java.util.List'> update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} <trim prefix='set' suffixOverrides=','>#foreach($column in $tableInfo.otherColumn) <trim prefix='$!column.obj.name =case $!pk.obj.name' suffix='end,'> <foreach collection='recordList' index='index' item='item'> <if test='item.$!column.name !=null '> when #{item.$!pk.name} then #{item.$!column.name} </if> <if test='item.$!column.name ==null '> when #{item.$!pk.name} then $!{tableInfo.obj.name}.$!column.obj.name </if> </foreach> </trim>#end </trim> where $!pk.obj.name in( <foreach collection='recordList' index='index' item='item' separator=','> #{item.$!pk.name} </foreach> ) </update> <!-- 根据主键批量删除 --> <delete parameterType='java.lang.String'> delete from $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} where $!pk.obj.name in ( <foreach collection='ids' index='index' item='item' separator=','> #{item} </foreach> ) </delete> </mapper>
oracle-mapper.xml
##引入mybatis支持$!mybatisSupport##设置保存名称与保存位置$!callback.setFileName($tool.append($!{tableInfo.name}, 'Mapper.xml'))$!callback.setSavePath($tool.append($tableInfo.savePath, '/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}.mapper.$!{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.name' jdbcType='$!column.ext.jdbcType'/>#end </resultMap><!-- 伪列 --><sql id='columns'>#foreach($column in $tableInfo.fullColumn) a.$!column.obj.name AS $!column.name #if($velocityCount != $tableInfo.fullColumn.size()),#end#end </sql> <!-- 查询条件 --><sql id='whereSql'> <where>#foreach($column in $tableInfo.fullColumn) <if test='$!column.name != null#if($column.type.equals('java.lang.String')) and $!column.name != ’’#end'> and a.$!column.obj.name = #{$!column.name} </if>#end </where> </sql> <!-- 通过ID查询单条数据 --> <select resultType='$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}'> select <include refid='columns'/> from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name a where a.$!pk.obj.name = #{$!pk.name} </select> <!-- 通过实体作为筛选条件查询 --> <select resultType='$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}'> select <include refid='columns'/> from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name a <include refid='whereSql' /> </select> <!-- 通过实体作为筛选条件查询条数 --> <select resultType='java.lang.Integer'> select count(1) from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name a <include refid='whereSql' /> </select> <!-- 新增数据 --> <insert keyProperty='$!pk.name' useGeneratedKeys='true'> insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end) values (#foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($velocityHasNext), #end#end) </insert> <!-- 新增选择列 --> <insert keyProperty='$!pk.name' useGeneratedKeys='true'> insert into $!{tableInfo.obj.parent.name}.$!{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> <!-- 修改数据 --> <update id='update'> update $!{tableInfo.obj.parent.name}.$!{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.parent.name}.$!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name} </delete> <!-- 批量新增 --> <insert parameterType='java.util.List'> insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} ( #foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end ) ( <foreach collection='recordList' index='index' item='item' separator=','> ( select #foreach($column in $tableInfo.fullColumn)#{item.$!{column.name}}#if($velocityHasNext), #end#end from dual ) </foreach> ) </insert> <!-- 批量修改 --> <update parameterType='java.util.List'> begin <foreach collection='recordList' index='index' item='item' separator=';'> update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} <set>#foreach($column in $tableInfo.otherColumn) $!column.obj.name = #{item.$!column.name}#end </set> where ID = #{item.$!pk.obj.name} </foreach> ;end; </update> <!-- 根据主键批量删除 --> <delete parameterType='java.lang.String'> delete from $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} where $!pk.obj.name in ( <foreach collection='ids' index='index' item='item' separator=','> #{item} </foreach> ) </delete> </mapper>
Global Config
init
##初始化区域##去掉表的t_前缀#if($tableInfo.obj.name.startsWith('t_')) $!tableInfo.setName($tool.getClassName($tableInfo.obj.name.substring(2)))#end##参考阿里巴巴开发手册,POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误#foreach($column in $tableInfo.fullColumn) #if($column.name.startsWith('is') && $column.type.equals('java.lang.Boolean')) $!column.setName($tool.firstLowerCase($column.name.substring(2))) #end#end##实现动态排除列#set($temp = $tool.newHashSet('testCreateTime', 'otherColumn'))#foreach($item in $temp) #set($newList = $tool.newArrayList()) #foreach($column in $tableInfo.fullColumn) #if($column.name!=$item) ##带有反回值的方法调用时使用$tool.call来消除返回值 $tool.call($newList.add($column)) #end #end##重新保存 $tableInfo.setFullColumn($newList)#end##对importList进行篡改#set($temp = $tool.newHashSet())#foreach($column in $tableInfo.fullColumn) #if(!$column.type.startsWith('java.lang.')) ##带有反回值的方法调用时使用$tool.call来消除返回值 $tool.call($temp.add($column.type)) #end#end##覆盖#set($importList = $temp)
define
##(Velocity宏定义)##定义设置表名后缀的宏定义,调用方式:#setTableSuffix('Test')#macro(setTableSuffix $suffix) #set($tableName = $!tool.append($tableInfo.name, $suffix))#end##定义设置包名后缀的宏定义,调用方式:#setPackageSuffix('Test')#macro(setPackageSuffix $suffix) #if($suffix!='')package #end#if($tableInfo.savePackageName!='')$!{tableInfo.savePackageName}.#{end}$!suffix;#end##定义直接保存路径与文件名简化的宏定义,调用方式:#save('/entity', '.java')#macro(save $path $fileName) $!callback.setSavePath($tool.append($tableInfo.savePath, $path)) $!callback.setFileName($tool.append($tableInfo.name, $fileName))#end##定义表注释的宏定义,调用方式:#tableComment('注释信息')#macro(tableComment $desc)#set($time=$!time.currTime())#set($time=$time.substring(0,11))#set($time=$time.replace('-','/'))/** * <p> * $!{tableInfo.comment}($!{tableInfo.name})$desc * </p> * * @author:$!author * @date:$!time */#end##定义GET,SET方法的宏定义,调用方式:#getSetMethod($column)#macro(getSetMethod $column) public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() { return $!{column.name}; } public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) { #if(${column.type.equals('java.lang.String')})this.$!{column.name} = $!{column.name}== null ? null : $!{column.name}.trim(); #else this.$!{column.name} = $!{column.name};#end} #end
mybatisSupport
##针对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='INTEGER') #elseif($tool.newHashSet('java.lang.Long', 'long').contains($column.type)) #set($jdbcType='INTEGER') #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
到此这篇关于IDEA插件EasyCode MyBatis最优配置步骤详解的文章就介绍到这了,更多相关idea 插件EasyCode 内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
1. .NET SkiaSharp 生成二维码验证码及指定区域截取方法实现2. jsp网页实现贪吃蛇小游戏3. 存储于xml中需要的HTML转义代码4. ASP中if语句、select 、while循环的使用方法5. MyBatis JdbcType 与Oracle、MySql数据类型对应关系说明6. django创建css文件夹的具体方法7. phpstudy apache开启ssi使用详解8. Django model重写save方法及update踩坑详解9. ASP中实现字符部位类似.NET里String对象的PadLeft和PadRight函数10. CentOS邮件服务器搭建系列—— POP / IMAP 服务器的构建( Dovecot )
