需求

  • 通用框架有了,最后我们要提供基于FreeMarker的模板

实现

  • 这里就不一一说了,提供一下我写的几个模板
  • 实体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME};

import java.math.BigDecimal;
import java.sql.Time;
import java.util.Date;

/**
* -------------------------------------------------------------------------------
* 功能描述: 代码处成器生成
*
* 创建人:  代码生成
* 创建日期: ${.now}
* 创建说明: ${ tableProName?cap_first }实体
*
* 修改人: 
* 修改日期:
* 修改说明:
*
* -------------------------------------------------------------------------------
*/

public class ${ tableProName?cap_first } {

<#list fieldList as pro>
private ${pro.type} ${pro.proName}; //${pro.description}
</#list>

<#list fieldList as pro>
//${pro.description}
public ${pro.type} get${pro.proName?cap_first}() {
return this.${pro.proName};
}
public void set${pro.proName?cap_first}(${pro.type} ${pro.proName}) {
<#if config.TRIM_STRINGS && pro.type=="String">
this.${pro.proName} = ${pro.proName} == null ? null : ${pro.proName}.trim();
<#else >
this.${pro.proName} = ${pro.proName};
</#if>
}

</#list>

}
  • 数据层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_DAO_NAME};

import ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME}.${tableProName?cap_first};
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

/**
* -------------------------------------------------------------------------------
* 功能描述: 代码处成器生成
*
* 创建人:  代码生成
* 创建日期: ${.now}
* 创建说明: ${ tableProName?cap_first }数据操作
*
* 修改人: 
* 修改日期:
* 修改说明:
*
* -------------------------------------------------------------------------------
*/

@Repository
public interface ${tableProName?cap_first}Dao {

${fieldPk.type} add(@Param("${tableProName}") ${tableProName?cap_first} ${tableProName});

void update(@Param("${tableProName}") ${tableProName?cap_first} ${tableProName});

void remove(@Param("${fieldPk.proName}") ${fieldPk.type} ${fieldPk.proName});

${tableProName?cap_first} getByUserId(@Param("${fieldPk.proName}") ${fieldPk.type} ${fieldPk.proName});

}
  • service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_SERVICE_NAME}.impl;

/**
* -------------------------------------------------------------------------------
* 功能描述: 代码处成器生成
*
* 创建人:  代码生成
* 创建日期: ${.now}
* 创建说明: ${ tableProName?cap_first }业务逻辑实现
*
* 修改人: 
* 修改日期:
* 修改说明:
*
* -------------------------------------------------------------------------------
*/

import ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME}.${tableProName?cap_first};
import ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_DAO_NAME}.${tableProName?cap_first}Dao;
import ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_ISERVICE_NAME}.I${tableProName?cap_first}Service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

import java.util.List;

@Service
@Transactional(rollbackFor = Exception.class)
public class ${tableProName?cap_first}Service implements I${tableProName?cap_first}Service {

@Resource
private ${tableProName?cap_first}Dao ${tableProName}Dao;

public ${tableProName?cap_first} add(${tableProName?cap_first} ${tableProName}){
${fieldPk.type} ${fieldPk.proName} = ${tableProName}Dao.add(${tableProName});
${tableProName}.set${fieldPk.proName?cap_first}(${fieldPk.proName});
return ${tableProName};
}

public void update(${tableProName?cap_first} ${tableProName}){
${tableProName}Dao.update(${tableProName});
}

public void remove(${fieldPk.type} ${fieldPk.proName}){
${tableProName}Dao.remove(${fieldPk.proName});
}

public User getBy${fieldPk.proName?cap_first}(${fieldPk.type} ${fieldPk.proName}){
return ${tableProName}Dao.getBy${fieldPk.proName?cap_first}(${fieldPk.proName});
}

}
  • IService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_ISERVICE_NAME};

/**
* -------------------------------------------------------------------------------
* 功能描述: 代码处成器生成
*
* 创建人:  代码生成
* 创建日期: ${.now}
* 创建说明: ${ tableProName?cap_first }业务逻辑接口
*
* 修改人: 
* 修改日期:
* 修改说明:
*
* -------------------------------------------------------------------------------
*/

import ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME}.${tableProName?cap_first};
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface I${tableProName?cap_first}${config.PACKAGE_SERVICE_NAME?cap_first} {

${tableProName?cap_first} add(${tableProName?cap_first} ${tableProName});

void update(${tableProName?cap_first} ${tableProName});

void remove(${fieldPk.type} ${fieldPk.proName});

${tableProName?cap_first} getBy${fieldPk.proName?cap_first}(${fieldPk.type} ${fieldPk.proName});

}
  • Mapper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?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="package ${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_DAO_NAME}.${tableName?cap_first}${config.PACKAGE_DAO_NAME?cap_first}">
<resultMap id="${tableName?cap_first}BaseMap" type="${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME}.${tableName?cap_first}">
<#list fieldList as pro>
<#if pro.isPk == 1>
<id column="${pro.name}" property="${pro.proName}" jdbcType="${pro.jdbcType}"/>
<#else>
<result column="${pro.name}" property="${pro.proName}" jdbcType="${pro.jdbcType}"/>
</#if>
</#list>
</resultMap>

<insert id="add" useGeneratedKeys="true" keyProperty="${fieldPk.name}" parameterType="${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME}.${tableName?cap_first}">
INSERT INTO ${tableName}(<#list fieldList as pro><#if pro.isIdentity==0>${pro.name}<#if pro_has_next>,</#if></#if></#list>) VALUES(<#list fieldList as pro><#if pro.isIdentity==0>${r'#'}{${pro.proName}}<#if pro_has_next>,</#if></#if></#list>)
</insert>

<update id="update" parameterType="${config.PACKAGE_ROOT_NAME}.${config.PACKAGE_MODEL_NAME}.${tableName?cap_first}">
UPDATE
${tableName}
SET
<#list fieldList as pro>
<#if pro.isIdentity==0>
${pro.name} = ${r'#'}{${pro.proName}}<#if pro_has_next>,</#if>
</#if>
</#list>
WHERE
${fieldPk.name}=${r'#'}{${fieldPk.proName}}
</update>

<delete id="remove" parameterType="${fieldPk.type}">
DELETE FROM ${tableName} WHERE ${fieldPk.name}=${r'#'}{${fieldPk.proName}}
</delete>

<select id="getBy${fieldPk.proName?cap_first}" parameterType="java.lang.Long" resultMap="${tableName?cap_first}BaseMap">
SELECT
<#list fieldList as pro>
${pro.name}<#if pro_has_next>,</#if>
</#list>
FROM
${tableName}
WHERE
${fieldPk.name}=${r'#'}{${fieldPk.proName}}
</select>

</mapper>
  • 可以正式试用了,也申请了提交Maven中央仓库
1
java -jar jgenerator.jar config.properties