使用jfinal 和beetl 生成get和set方法的model

代码有些乱,将就能用

生成model效果如下:

package com.core.model;

import com.jfinal.ext.plugin.db.BaseModel;
import com.jfinal.ext.plugin.db.tablebind.TableBind;
import com.jfinal.plugin.activerecord.Db;

@TableBind(tableName = "pdf_log" , pkName = PdfLog._ID)
public class PdfLog extends BaseModel<PdfLog>{
	public static final PdfLog dao = new PdfLog();

	public static final String LOGID = "logid";
	public static final String LOGUNIQUE = "logunique";
	public static final String REQUNIQUE = "requnique";
	public static final String REQURL = "requrl";
	public static final String BACKUPURL = "backupurl";
	public static final String SAVEURL = "saveurl";
	public static final String FILENAME = "filename";
	public static final String LOGSTATUS = "logstatus";
	public static final String LOGTIME = "logtime";
	public static final String LOGMSG = "logmsg";
	public static final String FILEMODIFIED = "filemodified";
	public static final String FILESIZE = "filesize";
	
	public static int[] batchInsert(List<PdfLog> list , int size){
		return Db.batch("insert into pdf_log ("+LOGID+","+LOGUNIQUE+","+REQUNIQUE+","+REQURL+","+BACKUPURL+","+SAVEURL+","+FILENAME+","+LOGSTATUS+","+LOGTIME+","+LOGMSG+","+FILEMODIFIED+",+"+FILESIZE+") values (?,?,?,?,?,?,?,?,?,?,?,?)", LOGID+","+LOGUNIQUE+","+REQUNIQUE+","+REQURL+","+BACKUPURL+","+SAVEURL+","+FILENAME+","+LOGSTATUS+","+LOGTIME+","+LOGMSG+","+FILEMODIFIED+","+FILESIZE, 
				list, 
				size);
		
	}
	
	
	public  PdfLog setLogid(Object value){
		return this.set(LOGID,value);
	}
	
	public <T> T getLogid(){
		return this.get(LOGID);
	}
	
	public  PdfLog setLogunique(Object value){
		return this.set(LOGUNIQUE,value);
	}
	
	public <T> T getLogunique(){
		return this.get(LOGUNIQUE);
	}
	
	public  PdfLog setRequnique(Object value){
		return this.set(REQUNIQUE,value);
	}
	
	public <T> T getRequnique(){
		return this.get(REQUNIQUE);
	}
	
	public  PdfLog setRequrl(Object value){
		return this.set(REQURL,value);
	}
	
	public <T> T getRequrl(){
		return this.get(REQURL);
	}
	
	public  PdfLog setBackupurl(Object value){
		return this.set(BACKUPURL,value);
	}
	
	public <T> T getBackupurl(){
		return this.get(BACKUPURL);
	}
	
	public  PdfLog setSaveurl(Object value){
		return this.set(SAVEURL,value);
	}
	
	public <T> T getSaveurl(){
		return this.get(SAVEURL);
	}
	
	public  PdfLog setFilename(Object value){
		return this.set(FILENAME,value);
	}
	
	public <T> T getFilename(){
		return this.get(FILENAME);
	}
	
	public  PdfLog setLogstatus(Object value){
		return this.set(LOGSTATUS,value);
	}
	
	public <T> T getLogstatus(){
		return this.get(LOGSTATUS);
	}
	
	public  PdfLog setLogtime(Object value){
		return this.set(LOGTIME,value);
	}
	
	public <T> T getLogtime(){
		return this.get(LOGTIME);
	}
	
	public  PdfLog setLogmsg(Object value){
		return this.set(LOGMSG,value);
	}
	
	public <T> T getLogmsg(){
		return this.get(LOGMSG);
	}
	
	public  PdfLog setFilemodified(Object value){
		return this.set(FILEMODIFIED,value);
	}
	
	public <T> T getFilemodified(){
		return this.get(FILEMODIFIED);
	}
	
	public  PdfLog setFilesize(Object value){
		return this.set(FILESIZE,value);
	}
	
	public <T> T getFilesize(){
		return this.get(FILESIZE);
	}
	
	
	
}

主程序如下:

package com.gen;

import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.beetl.core.BeetlKit;
import org.junit.Test;

import com.google.common.base.Splitter;
import com.jfinal.common.IOKit;
import com.jfinal.kit.PathKit;


public class CreateModel  {
	@Test
	public void createAll() throws Exception{
		List<String> tables = DBConn.getTableNamesByDBName();
		for (String table : tables) {
			createTable(table);
		}
		System.out.println("生成model成功!.请查看");
	}
	
	@Test
	public void createTable() throws Exception{
		String tables = "pdf_log";
		Iterable<String> strs = Splitter.on(',').split(tables);
		for (String object : strs) {
			createTable(object);
		}
	}
	
	
	
	
	private void createTable(String table) throws Exception{
		TableMeta tableMeta = new TableMeta();
		tableMeta.setPackageName(DBConn.p.getProperty("package"));
		Map<String, Object> map = new HashMap<String,Object>(); 
		tableMeta.setTableName(table); 
		tableMeta.setModelName(toTablName(table));
		tableMeta.setColumnsNames(DBConn.getColumnsNamesByTableName(table));
		map.put("myModel", tableMeta);
		File createFolder = new File("c:/"+DBConn.p.getProperty("package").replace(".", "/"));
		createFolder.mkdirs();	//预先创建文件夹,预防没有文件夹而找不到路径
		String string = IOKit.readToString(new File(PathKit.getRootClassPath()+"/com/gen/model.btl"));
		System.out.println(tableMeta.getPrefix());
		BeetlKit.renderTo(string, new FileWriter(new File(createFolder+"/"+tableMeta.getModelName()+".java")), map);
	}
	
	
	
	
	private static String toTablName(String str1) {
		String str = toUpperCaseTheFristChar(str1);
		int x = str.indexOf("_");
		if(x != -1){
			String z = toUpperCaseTheFristChar(str.substring(x+1));
			return str.substring(0,x)+z;
		}
		return str;
	}
	

	public static String toUpperCaseTheFristChar(String str) {
		byte[] items = str.getBytes();
		items[0] = (byte) ((char) items[0] - 'a' + 'A');
		return new String(items);
	}
}

获取表信息类

package com.gen;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import com.jfinal.kit.StrKit;
import com.mysql.jdbc.Statement;

public class DBConn {
	public static final Properties p = new Properties();
	static {
		try {
			p.load(DBConn.class.getResourceAsStream("/gen.txt"));
			Class.forName(p.getProperty("className"));
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	public static Connection getConnection() throws IOException, SQLException {
		return DriverManager.getConnection(p.getProperty("driverName"),
				p.getProperty("userName"), p.getProperty("userPassword"));
	}
	
	public static List<String> getTableNamesByDBName() throws SQLException,
			IOException {
		Statement stame = (Statement) DBConn.getConnection().createStatement();
		ResultSet rs = stame.executeQuery("show tables;");
		List<String> list = new ArrayList<String>();
		while (rs.next()) {
			list.add(rs.getString(1));
		}
		return list;
	}
	
	public static List<Column> getColumnsNamesByTableName(String tName) throws SQLException, IOException{
		List<Column> list = new ArrayList<Column>();
		Statement stame = (Statement) DBConn.getConnection().createStatement();
		ResultSet rs = stame.executeQuery("desc "+tName+";");
		while (rs.next()) {
			Column col = new Column();
			col.columnName = rs.getString(1);
			col.columnName2 = StrKit.firstCharToUpperCase(col.columnName);
			list.add(col);
		}
		return list;
	}
	
}

记录表信息的bean对象

package com.gen;

import java.util.List;

public class TableMeta {
	private String modelName;
	private String packageName;
	private String tableName;
	private List<Column> columnsNames;
	
	private String prefix;

	public String getModelName() {
		return modelName;
	}
	public String getPrefix() {
		return prefix;
	}
	public void setPrefix(String prefix) {
		this.prefix = prefix;
	}
	public void setModelName(String modelName) {
		this.modelName = modelName;
	}
	public String getPackageName() {
		return packageName;
	}
	public void setPackageName(String packageName) {
		this.packageName = packageName;
	}
	public String getTableName() {
		return tableName;
	}
	public void setTableName(String tableName) {
		this.tableName = tableName;
	}
	public List<Column> getColumnsNames() {
		return columnsNames;
	}
	public void setColumnsNames(List<Column> columnsNames) {
		this.columnsNames = columnsNames;
		int x = columnsNames.get(0).columnName.indexOf("_");
		if(x != -1){
			setPrefix(columnsNames.get(0).columnName.substring(0,x));
		}
	}
}
class Column{
	public String columnName;
	public String columnName2;
	public String getColumnName() {
		return columnName;
	}
	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}
	public String getColumnName2() {
		return columnName2;
	}
	public void setColumnName2(String columnName2) {
		this.columnName2 = columnName2;
	}
	
}

beetl模板文件:

package ${myModel.packageName};

import com.jfinal.ext.plugin.db.BaseModel;
import com.jfinal.ext.plugin.db.tablebind.TableBind;
import com.jfinal.plugin.activerecord.Db;
import java.util.List;

@TableBind(tableName = "${myModel.tableName}" , pkName = ${myModel.modelName}.${strutil.toUpperCase(myModel.prefix==null?"")}_ID)
public class ${myModel.modelName} extends BaseModel<${myModel.modelName}>{
	public static final ${myModel.modelName} dao = new ${myModel.modelName}();

	<% 
	for(col in myModel.columnsNames){
	%>
	public static final String ${strutil.toUpperCase(col.columnName)} = "${strutil.toLowerCase(col.columnName)}";
	<%
	}
	%>
	
	public static int[] batchInsert(List<${myModel.modelName}> list , int size){
		<% 
		var fieldKeys='';
		var fieldKeys2='';
		var fieldVals='';
		var x= 0;
		for(col in myModel.columnsNames){
			if(colLP.index>1){
				fieldVals=fieldVals+',';
				fieldKeys=fieldKeys+',';
				fieldKeys2=fieldKeys2+'+'+'"'+','+'"'+'+';
			}
			
			if(colLP.size == colLP.index){
				fieldKeys=fieldKeys+'+';
			}
			fieldKeys=fieldKeys+'"+'+strutil.toUpperCase(col.columnName)+'+"';
			fieldVals=fieldVals+'?';
			
			fieldKeys2=fieldKeys2+strutil.toUpperCase(col.columnName);
		}
		
		%>
		return Db.batch("insert into ${myModel.tableName} (${ fieldKeys}) values (${fieldVals})", ${fieldKeys2}, 
				list, 
				size);
		
	}
	
	
	<% 
	for(col in myModel.columnsNames){
	
	%>
	public  ${myModel.modelName} set${col.columnName2}(Object value){
		return this.set(${strutil.toUpperCase(col.columnName)},value);
	}
	
	public <T> T get${col.columnName2}(){
		return this.get(${strutil.toUpperCase(col.columnName)});
	}
	
	<%
	}
	%>
	
	
}

数据库配置文件:

package=com.core.model
className=com.mysql.jdbc.Driver
driverName=jdbc:mysql://127.0.0.1:3382/iehyou?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
userName=root
userPassword=


转载于:https://my.oschina.net/iehyou/blog/483076

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值