#macro ( property $name $type ) private $type $name; private boolean isset_${name}; #end #macro ( access $name $type ) public #javatype(${type}) get#ucf($name)() { return this.$name; } public void set#ucf($name)(#javatype(${type}) ${name}) { this.${name} = ${name}; this.isset_${name} = true; } public boolean isEmpty#ucf($name)() { #if (${stringUtils.getJavaType($type)} == "String") return this.${name} == null || this.${name}.length() == 0; #else return this.${name} == null; #end } #end #macro (join $name $type) if (this.isEmpty#ucf($name)()) { sbWhere.append("($name is null)"); } else { #if(${stringUtils.getJavaType($type)} == "String") sbWhere.append("($name='" + this.doFilter(this.get#ucf($name)())+ "')"); #else sbWhere.append("($name=" + this.get#ucf($name)()+ ")"); #end } sbWhere.append(" AND "); #end #macro ( lower $value )${value.toLowerCase()}#end #macro ( upper $value )${value.toUpperCase()}#end #macro ( lcf $name )${stringUtils.toLowerCaseFirst($name)}#end #macro ( ucf $name )${stringUtils.toUpperCaseFirst($name)}#end #macro ( lucf $value )${stringUtils.toUpperCaseFirst(${value.toLowerCase()})}#end #macro ( javatype $type )${stringUtils.getJavaType($type)}#end## ############################################################################################# package com.iplatform.model.po; import com.xinyuan.core.common.MisException; import com.xinyuan.core.model.persistence.po.BasePo; import com.xinyuan.core.model.persistence.po.SqlAndParameters; import com.xinyuan.core.model.persistence.po.sqlgen.DeleteBuilder; import com.xinyuan.core.model.persistence.po.sqlgen.InsertBuilder; import com.xinyuan.core.model.persistence.po.sqlgen.SelectBuilder; import com.xinyuan.core.model.persistence.po.sqlgen.UpdateBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; /** * 表名:${table_name} */ public class #ucf(${table_name}) extends BasePo<#ucf(${table_name})> { // 序列化版本号 private static final long serialVersionUID = 1L; public static final RowMapper<#ucf(${table_name})> ROW_MAPPER = new #ucf(${table_name})RowMapper(); ## 主键 // 主键 private #javatype(${pk_type}) ${pk_name} = null; private boolean isset_${pk_name} = false; ## 属性 // 属性列表 #foreach ($property in $columns) private #javatype($property.type) ${property.name} = null; private boolean isset_${property.name} = false; #end /** * 默认构造函数 */ public #lucf(${table_name})() { } /** * 根据主键构造对象 */ public #lucf(${table_name})(#javatype(${pk_type}) ${pk_name}) { this.set#ucf(${pk_name})(${pk_name}); } #access(${pk_name} ${pk_type}) ##属性setter getter isEmpty #foreach ($property in $columns) #access(${property.name} ${property.type}) #end /** * 获取表名 */ @Override public String getTableName_() { return "${table_name}"; } /** * 获取主键名称 */ @Override public String getPkName_() { return "${pk_name}"; } /** * 获取主键值 */ @Override public Object getPkValue_() { return this.${pk_name}; } /** * 设置主键值 */ @Override public void setPkValue(Object value) { this.set#ucf(${pk_name})((#javatype(${pk_type})) value); } /** * 获取插入语句和参数 */ @Override public SqlAndParameters> getInsertSql_() { InsertBuilder ib = new InsertBuilder(this.getTableName_()); ib.set("${pk_name}", this.${pk_name}); #foreach ($property in $columns) ib.set("${property.name}", this.${property.name}, this.isset_${property.name}); #end return ib.genMapSql(); } /** * 获取更新语句和参数 */ @Override public SqlAndParameters> getUpdateSql_() { UpdateBuilder ub = new UpdateBuilder(this.getTableName_()); #foreach ($property in $columns) ub.set("${property.name}", this.${property.name}, this.isset_${property.name}); #end ub.where(this.getPkName_(), this.getPkValue_()); return ub.genMapSql(); } /** * 获取更新语句和参数 */ @Override public SqlAndParameters> getUpdateSql_(String where, Map parameters) { UpdateBuilder ub = new UpdateBuilder(this.getTableName_()); #foreach ($property in $columns) ub.set("${property.name}", this.${property.name}, this.isset_${property.name}); #end return ub.genMapSql(where, parameters); } /** * 获取更新语句和参数 */ @Override public SqlAndParameters getUpdateSql_(String where, Object[] parameters) { UpdateBuilder ub = new UpdateBuilder(this.getTableName_()); #foreach ($property in $columns) ub.set("${property.name}", this.${property.name}, this.isset_${property.name}); #end return ub.genArraySql(where, parameters); } /** * 获取删除语句和参数 */ @Override public SqlAndParameters> getDeleteSql_() { DeleteBuilder db = new DeleteBuilder(this.getTableName_()); db.where(this.getPkName_(), this.getPkValue_()); return db.genMapSql(); } /** * 获取删除语句和参数 */ @Override public SqlAndParameters> getDeleteSql_(String where, Map parameters) { DeleteBuilder db = new DeleteBuilder(this.getTableName_()); return db.genMapSql(where, parameters); } /** * 获取删除语句和参数 */ @Override public SqlAndParameters getDeleteSql_(String where, Object[] parameters) { DeleteBuilder db = new DeleteBuilder(this.getTableName_()); return db.genArraySql(where, parameters); } /** * 获取单行查询语句和参数 */ @Override public SqlAndParameters> getSingleSql_() { SelectBuilder sb = new SelectBuilder(this.getTableName_()); sb.where(this.getPkName_(), this.getPkValue_()); return sb.genMapSql(); } #set($fields="${pk_name}") #foreach ($property in $columns) #set($fields = $fields.concat(", ").concat(${property.name})) #end /** * 获取查询语句和参数 */ @Override public SqlAndParameters> getSelectSql_(String where, Map parameters) { return new SqlAndParameters<>("select $fields from " + this.getTableName_() + " " + where, parameters); } /** * 获取查询语句和参数 */ @Override public SqlAndParameters getSelectSql_(String where, Object[] parameters) { return new SqlAndParameters<>("select $fields from " + this.getTableName_() + " " + where, parameters); } /** * 将resultset的一行转化为po */ @Override public #lucf(${table_name}) mapRow(ResultSet rs, int i) throws SQLException { return ROW_MAPPER.mapRow(rs, i); } /** * 重写 toString() 方法 */ public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("${pk_name}", this.${pk_name}) #foreach ($property in $columns) .append("${property.name}", this.${property.name}) #end .toString(); } /** * 克隆 */ @Override public #lucf($table_name) clone() { try { #lucf($table_name) #lower($table_name) = (#lucf(${table_name})) super.clone(); //主键 if (this.isset_${pk_name}) { #lower($table_name).set#ucf(${pk_name})(this.get#ucf(${pk_name})()); } //普通属性 #foreach ($property in $columns) if (this.isset_${property.name}) { #lower($table_name).set#ucf($property.name)(this.get#ucf($property.name)()); } #end return #lower($table_name); } catch (Exception e) { throw new MisException(e); } } } class #lucf($table_name)RowMapper implements RowMapper<#lucf($table_name)> { @Override public #lucf($table_name) mapRow(ResultSet rs, int i) throws SQLException { #lucf($table_name) #lower($table_name) = new #lucf(${table_name})(); Integer columnIndex = null; //主键 columnIndex = #lower($table_name).findColumn(rs, "${pk_name}"); if (columnIndex > 0) { #if(${stringUtils.getJavaType($pk_type)} == "String") #lower($table_name).set#ucf(${pk_name})(rs.getString(columnIndex)); #end #if(${stringUtils.getJavaType($pk_type)} == "Integer") #lower($table_name).set#ucf(${pk_name})(rs.getInt(columnIndex)); #end #if(${stringUtils.getJavaType($pk_type)} == "Long") #lower($table_name).set#ucf(${pk_name})(rs.getLong(columnIndex)); #end #if(${stringUtils.getJavaType($pk_type)} == "Float") #lower($table_name).set#ucf(${pk_name})(rs.getFloat(columnIndex)); #end #if(${stringUtils.getJavaType($pk_type)} == "Double") #lower($table_name).set#ucf(${pk_name})(rs.getDouble(columnIndex)); #end #if(${stringUtils.getJavaType($pk_type)} == "java.math.BigDecimal") #lower($table_name).set#ucf(${pk_name})(rs.getBigDecimal(columnIndex)); #end #if(${stringUtils.getJavaType($pk_type)} == "java.util.Date") #lower($table_name).set#ucf(${pk_name})(rs.getDate(columnIndex)); #end } //普通属性 #foreach ($property in $columns) columnIndex = #lower($table_name).findColumn(rs, "${property.name}"); if (columnIndex > 0) { #if(${stringUtils.getJavaType($property.type)} == "String") #lower($table_name).set#ucf($property.name)(rs.getString(columnIndex)); #end #if(${stringUtils.getJavaType($property.type)} == "Integer") if (rs.getBigDecimal(columnIndex) == null) { #lower($table_name).set#ucf($property.name)(null); } else { #lower($table_name).set#ucf($property.name)(rs.getInt(columnIndex)); } #end #if(${stringUtils.getJavaType($property.type)} == "Long") if (rs.getBigDecimal(columnIndex) == null) { #lower($table_name).set#ucf($property.name)(null); } else { #lower($table_name).set#ucf($property.name)(rs.getLong(columnIndex)); } #end #if(${stringUtils.getJavaType($property.type)} == "Float") if (rs.getBigDecimal(columnIndex) == null) { #lower($table_name).set#ucf($property.name)(null); } else { #lower($table_name).set#ucf($property.name)(rs.getFloat(columnIndex)); } #end #if(${stringUtils.getJavaType($property.type)} == "Double") if (rs.getBigDecimal(columnIndex) == null) { #lower($table_name).set#ucf($property.name)(null); } else { #lower($table_name).set#ucf($property.name)(rs.getDouble(columnIndex)); } #end #if(${stringUtils.getJavaType($property.type)} == "java.math.BigDecimal") #lower($table_name).set#ucf($property.name)(rs.getBigDecimal(columnIndex)); #end #if(${stringUtils.getJavaType($property.type)} == "byte[]") #lower($table_name).set#ucf($property.name)(rs.getBytes(columnIndex)); #end #if(${stringUtils.getJavaType($property.type)} == "java.util.Date") #lower($table_name).set#ucf($property.name)(rs.getDate(columnIndex)); #end } #end return #lower($table_name); } }