(四)autoCode代码生成器,velocity变量详解

autoCode提供了一组velocity变量,这些变量包含了数据库表,字段,java类字段信息

运用这些变量我们就能构建出一个自己需要的模板文件

首先来看下变量列表:

前面是变量名,后面是对变量的说明

 

接下来我们就用这些变量来编写一个模板

这里有一张后台用户表back_user,它有三个字段,如图

现在我们要根据这张表生成一个Entity,那模板内容如下:

假设包名为test

package ${context.packageName}.entity;

public class ${context.javaBeanName} {
#foreach($column in $columns) 
    private ${column.javaType} ${column.javaFieldName};
#end

#foreach(${column} in ${columns}) 
    public void set${column.javaFieldNameUF}(${column.javaType} ${column.javaFieldName}){
        this.${column.javaFieldName} = ${column.javaFieldName};
    }

    public ${column.javaType} get${column.javaFieldNameUF}(){
        return this.${column.javaFieldName};
    }

#end
}


使用代码生成器生成后的代码如下:

package test.entity;

public class BackUser {
    private String username;
    private String password;
    private Date addTime;

    public void setUsername(String username){
        this.username = username;
    }

    public String getUsername(){
        return this.username;
    }

    public void setPassword(String password){
        this.password = password;
    }

    public String getPassword(){
        return this.password;
    }

    public void setAddTime(Date addTime){
        this.addTime = addTime;
    }

    public Date getAddTime(){
        return this.addTime;
    }

}

 

接下来我们编写一个复杂的例子,编写一个mybatis的配置文件模板

<?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="${context.packageName}.dao.${context.javaBeanName}Dao">
    <resultMap id="queryResultMap" type="${context.packageName}.entity.${context.javaBeanName}">
        #foreach($column in $columns)
        <result column="${column.columnName}" property="${column.javaFieldName}" jdbcType="${column.mybatisJdbcType}" />
        #end
    </resultMap>

    <select id="find" parameterType="${context.packageName}.entity.${context.javaBeanName}"
        resultMap="queryResultMap">
        SELECT *
        FROM ${table.tableName} t      
        WHERE 1=1
        #foreach($column in $columns)
    <if test="${column.javaFieldName}!=null">
        AND ${column.columnName} = #{${column.javaFieldName},jdbcType=${column.mybatisJdbcType}}
    </if>
        #end
        ORDER BY ${context.javaPkName} desc

    </select>


    <insert id="save" parameterType="${context.packageName}.entity.${context.javaBeanName}"
#if(${pkColumn.isIdentity})
    keyProperty="${context.javaPkName}" keyColumn="${context.pkName}" useGeneratedKeys="true"
#end
    >
    INSERT INTO ${table.tableName}
         (
 #set ($i=0) 
        #foreach($column in $columns) 
            #if(!${column.isIdentityPk})               
        #if($i > 0),#end ${column.columnName}
               #set($i=$i+1)
            #end          
        #end
          )
    VALUES (
        #set ($i=0) 
        #foreach($column in $columns) 
            #if(!${column.isIdentityPk})               
        #if($i > 0),#end #{${column.javaFieldName},jdbcType=${column.mybatisJdbcType}}
               #set($i=$i+1)
            #end          
        #end
 
        )
    </insert>


    <update id="update" parameterType="${context.packageName}.entity.${context.javaBeanName}">
    UPDATE ${table.tableName}
    SET 
#set ($i=0) 
        #foreach($column in $columns) 
            #if(!${column.isPk})               
        #if($i > 0),#end ${column.columnName}=#{${column.javaFieldName},jdbcType=${column.mybatisJdbcType}}
               #set($i=$i+1)
            #end          
        #end    
    WHERE ${context.pkName} = #{${context.javaPkName},jdbcType=${context.mybatisPkType}}
    </update>

    <select id="get" resultMap="queryResultMap" parameterType="java.io.Serializable">
        SELECT *
        FROM ${table.tableName}
        WHERE ${context.pkName} = #{${context.javaPkName},jdbcType=${context.mybatisPkType}}
    </select>
    
    <delete id="del" parameterType="${context.packageName}.entity.${context.javaBeanName}">
        DELETE FROM ${table.tableName}
        WHERE ${context.pkName} = #{${context.javaPkName},jdbcType=${context.mybatisPkType}}
    </delete>

</mapper>


生成后的代码:

<?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="test.dao.BackUserDao">
	<resultMap id="queryResultMap" type="test.entity.BackUser">
		<result column="username" property="username" jdbcType="VARCHAR" />
		<result column="password" property="password" jdbcType="VARCHAR" />
		<result column="add_time" property="addTime" jdbcType="TIMESTAMP" />
	</resultMap>

	<select id="find" parameterType="test.entity.BackUser"
		resultMap="queryResultMap">
		SELECT *
		FROM back_user t
		WHERE 1=1
		<if test="username!=null">
			AND username = #{username,jdbcType=VARCHAR}
		</if>
		<if test="password!=null">
			AND password = #{password,jdbcType=VARCHAR}
		</if>
		<if test="addTime!=null">
			AND add_time = #{addTime,jdbcType=TIMESTAMP}
		</if>
		ORDER BY username desc

	</select>


	<insert id="save" parameterType="test.entity.BackUser">
		INSERT INTO back_user
		(
		username
		, password
		, add_time
		)
		VALUES (
		#{username,jdbcType=VARCHAR}
		, #{password,jdbcType=VARCHAR}
		, #{addTime,jdbcType=TIMESTAMP}

		)
	</insert>


	<update id="update" parameterType="test.entity.BackUser">
		UPDATE back_user
		SET
		password=#{password,jdbcType=VARCHAR}
		, add_time=#{addTime,jdbcType=TIMESTAMP}
		WHERE username = #{username,jdbcType=VARCHAR}
	</update>

	<select id="get" resultMap="queryResultMap" parameterType="java.io.Serializable">
		SELECT *
		FROM back_user
		WHERE username = #{username,jdbcType=VARCHAR}
	</select>

	<delete id="del" parameterType="test.entity.BackUser">
		DELETE FROM back_user
		WHERE username = #{username,jdbcType=VARCHAR}
	</delete>

</mapper>

我们取一个update语句来分析:


<update id="update" parameterType="${context.packageName}.entity.${context.javaBeanName}">
    UPDATE ${table.tableName} // 表名
    SET 
        #set ($i=0) // 定义一个变量$i=0
        #foreach($column in $columns) // 循环列
            #if(!${column.isPk}) // 如果不是主键,因为主键是不能被修改的               
        #if($i > 0),#end // 这里添加逗号,从第二个开始就开始加逗号

               ${column.columnName}=#{${column.javaFieldName},jdbcType=${column.mybatisJdbcType}} // 修改字段
               #set($i=$i+1) // 每次循环后变量加1
            #end          
        #end    
    WHERE ${context.pkName} = #{${context.javaPkName},jdbcType=${context.mybatisPkType}} // 主键=#{java主键}
</update>

 

由此可以看出这套velocity语法可以满足大部分要求,当然特殊的地方还是需要自己去修改.毕竟代码生成器也不是外能的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值