实现Entity,Dao,Service,Controller,JSP代码生成神器

本文介绍了一个强大的工具,CodeGenerator.java,它可以自动生成Spring项目中的Entity, Dao, Service, Controller以及JSP代码,极大地提高了开发效率。通过提供的SQL生成器和代码生成器源代码下载链接,开发者可以获取并应用到自己的项目中。" 139429727,18584,SwiftUI 拖放操作进阶:利用 Swizz 实现回调,"['SwiftUI', 'Swift', '拖放操作', 'Swizz', 'UIKit']
摘要由CSDN通过智能技术生成
package com.flong.codegenerator;


import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
/***
 *@Author:liangjilong
 *@Date:2015年12月5日下午12:25:12
 *@Email:jilongliang@sina.com
 *@Version:1.0
 *@CopyRight(c)Flong Intergrity Ltd.
 *@Description:读取文properties
 */
public class PropertiesHelper {

	private static final Map<String, String> properties = new HashMap<String, String>();
	static {
		try {
			Properties pps = new Properties();
			pps.load(PropertiesHelper.class.getClassLoader().getResourceAsStream("prop/DBSource.properties"));
			//处理重复的值.
			for (Entry<Object, Object> entry : pps.entrySet()) {
				properties.put(entry.getKey().toString().trim(), entry.getValue().toString().trim());
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 *通过key值去获取值.
	 */
	public static String getValueByKey(String name) {
		return properties.get(name);
	}

}

package com.flong.codegenerator;

import java.io.File;
import java.io.FileWriter;

public class FileUtils {
	/**
	 * 把生成的文件都保存.
	 * @param path
	 * @param data
	 */
	public static void save(String path, String data) {
		try {
			File file = new File(path);
			File dir = new File(path.substring(0, path.lastIndexOf("/")));
			if(!dir.exists()) {
				dir.mkdirs();
			}
			FileWriter out = new FileWriter(file);
			out.write(data);
			out.flush();
			out.close();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}
package com.flong.codegenerator;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/***
 *@Author:liangjilong
 *@Date:2015年12月5日下午12:25:12
 *@Email:jilongliang@sina.com
 *@Version:1.0
 *@CopyRight(c)Flong Intergrity Ltd.
 */
public class DBHelperUtils {
	private static final Connection conn;
	private static final String driverClass = PropertiesHelper.getValueByKey("jdbc.driver");
	private static final String connectionUrl = PropertiesHelper.getValueByKey("jdbc.url");
	private static final String username = PropertiesHelper.getValueByKey("jdbc.username");
	private static final String password = PropertiesHelper.getValueByKey("jdbc.password");
	
	private static DBHelperUtils instance = null;
	/**
	 * 定义代码块.
	 */
	static {
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(connectionUrl, username, password);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**建立单例模式
	 * Single
	 * @return
	 */
	public static DBHelperUtils getInstance() {
		if (instance == null) {
			synchronized (DBHelperUtils.class) {
				instance = new DBHelperUtils();
			}
		}
		return instance;
	}
	
	
	/**
	 * 查询数据
	 * @param sql
	 * @param params
	 * @return
	 */
	public static ResultSet query(String sql, List<Object> params) {
		System.out.println("sql: " + sql);
		//System.out.println("params: " + params);
		try {
			PreparedStatement psmt = conn.prepareStatement(sql);
			if(params != null) {
				for (int i = 0; i < params.size(); i++) {
					psmt.setObject(i+1, params.get(i));
				}
			}	
			return psmt.executeQuery();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	/***
	 * 更新
	 * @param sql
	 * @param params
	 */
	public static void update(String sql, List<Object> params) {
		System.out.println("sql: " + sql);
		//System.out.println("params: " + params);
		try {
			PreparedStatement psmt = conn.prepareStatement(sql);
			if(params != null) {
				for (int i = 0; i < params.size(); i++) {
					psmt.setObject(i+1, params.get(i));
				}
			}	
			psmt.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 获取链接
	 * @return
	 */
	public static Connection getConnection(){
		try {
			Class.forName(driverClass);
			return DriverManager.getConnection(connectionUrl, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}  
		return null;
	}
	

}
package com.flong.codegenerator;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
/***
 *@Author:liangjilong
 *@Date:2015年12月5日下午12:25:12
 *@Email:jilongliang@sina.com
 *@Version:1.0
 *@CopyRight(c)Flong Intergrity Ltd.
 *@Desction:★★★★★★★★★★★★★★★代码生成器实现思路★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 *
 *   ★★在快速开发的过程中,为了节省时间和成本很多人都会开发自己的代码生成器,而且成为程序员开发过程中必不可少的神器.
 *   ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 *	  第一种:先有数据库表,然后通过jdbc链接数据库再读取表的字段等属性出来生成Entity,Dao,Service,Controller,JSP等代码
 *   这种必须是有数据库和表的思想,通过程序去读取数据库表的属性等信息,然后组织代码通过文件流生成文件.
 *   
 *   ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 *   第二种:已经设计好数据库表文档,把所有表的字段属性配置到EXCEL或者CSV格式的文件通过JXL/POI技术去读取文件的字段实现
 *   Entity,Dao,Service,Controller,JSP,在过程中会借助Freemaker,Velocity去实现.三层和jsp,然后通过一下ORM(hibernate,
 *   ibatis,myibatis等)技术逆向生成数据库表.这种是无数据库表的思想. 在生成java的代码一般不建议建ORM映射主从表关系,通过
 *   SQL去建立关系,为啥?因为在一些大型的公司如:银行,阿里巴巴,电信等公司,很多项目开发过程中在数据库表很少建立表关系的
 *   因为在些业务复杂的情况下通过SQL和程序控制的解决方案比ORM映射关系方案占优势.比如优化性能/维护/灵活性更加好等.
 *   ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 *   
 *   此程序可以再优化的,为了有些初学者,就不作太多的处理和优化.一些高手会编程更好的生成器,此程序只提供参考和学习,如有什么
 *   问题,可以多指出.共同学习和进步.谢谢!~
 *   ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 */
@SuppressWarnings("all")
public class CodeGenerator {
	
	 
	/*************************变量****Begin************************************/
	private static final String myEmail="jilongliang@sina.com";//Email
	private static final String Version="1.0";//版本
	private static final String Description=" ";//描述
	
	public static final String ENTER = "\n";//换行
	public static final String TAB = "    ";//tab
	public static final String NAME = "NAME";
	public static final String TABLE_CAT = "TABLE_CAT";//表 catalog
	public static final String TABLE_SCHEM = "TABLE_SCHEM";//表 schema
	public static final String TABLE_NAME = "TABLE_NAME";//表名
	public static final String TABLE_TYPE = "TABLE_TYPE";//表类型
	public static final String REMARKS = "REMARKS";//表注释
	public static final String TYPE = "TYPE";//表的类型
	public static final String SIZE = "SIZE";//大小
	public static final String CLASS = "CLASS";//类别
	
	/*************************变量****End************************************/
	
	public static final String NOW_DATE = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
	/***************获取数据库的配置连接************/
	public static final String DB_NAME = PropertiesHelper.getValueByKey("jdbc.url").substring(
										 PropertiesHelper.getValueByKey("jdbc.url").lastIndexOf("/")+1,
										 PropertiesHelper.getValueByKey("jdbc.url").indexOf("?") == -1?
										 PropertiesHelper.getValueByKey("jdbc.url").length():
									     PropertiesHelper.getValueByKey("jdbc.url").indexOf("?"));
	//从配置获取工程的报名路径
	public static final String ROOT_PACKAGE = PropertiesHelper.getValueByKey("rootPackage");
	//获取作者.
	public static final String AUTHOR = PropertiesHelper.getValueByKey("author");
	//忽略表的后缀.
	public static final List<String> IGNORE_TABLE_PREFIX = new ArrayList<String>();

	/*******定义代码块*******/
	static {
		String ignoreTablePrefix = PropertiesHelper.getValueByKey("ignoreTablePrefix");
		if(ignoreTablePrefix.length() > 0) {
			String[] ignoreTablePrefixs = ignoreTablePrefix.split("\\s*\\,\\s*");
			for (String elem : ignoreTablePrefixs) {
				IGNORE_TABLE_PREFIX.add(elem);
			}
		}
	}

	/***
	 * 生成实体类的代码
	 * @param table
	 * @throws Exception
	 */
	public void createEntityClass(String table) throws Exception {
		String tableConstantName = getTableConstantName(table);
		
		String className = getClassName(tableConstantName);
		StringBuilder sb = new StringBuilder();
		sb.append("package " + ROOT_PACKAGE + ".entity;");
		sb.append(ENTER);
		sb.append(ENTER);
		sb.append("/**\n * @Created:" + NOW_DATE + "\n * @Author " + AUTHOR + "\n");
		sb.append(" * @Version:").append(Version).append(ENTER);
		sb.append(" * @Description:").append(className).append(ENTER);
		sb.append(" * @Email:").append(myEmail).append("\n*/");
		sb.append(ENTER);
		sb.append("@Relation(" + className + ".TABLE)");
		sb.append(ENTER);
		sb.append("public class " + className + " extends Entity {");
		sb.append(ENTER);
		sb.append(ENTER);
		sb.append(TAB);
		sb.append("/** 表名常量 */");
		sb.append(ENTER);
		sb.append(TAB);
		sb.append("public static final String TABLE = Table." + tableConstantName + ";");
		sb.append(ENTER);
		sb.append(ENTER);
		sb.append(TAB);
		sb.append("/**");
		sb.append(ENTER);
		sb.append(TAB);
		sb.append(" * 列名常量");
		sb.append(ENTER);
		sb.append(TAB);
		sb.append(" */");
		sb.append(ENTER);
		for (Map<String, Object> col : getCols(table)) {
			String colName = col.get(NAME).toString().toUpperCase();
			sb.append(TAB);//生成字段变量
			sb.append("public static final String COL_" + colName + " = \"" + colName + "\";//"+col.get(REMARKS));
			sb.append(ENTER);
		}
		sb.append(ENTER);
		sb.append(TAB);
		sb.append("/**");
		sb.append(ENTER);
		sb.append(TAB);
		sb.append(" * 列属性");
		sb.append(
JSP Maker 是一款强大易用的代码生成器,可从MySQL和Oracle中快速生成一套完整JSP(JAVA服务器页)代码.使用生成的JSP,用户可以轻松查看,编辑,搜索以及添加删除网页上的数据库记录。生成的代码清洁并易于用户定制.JSP开发者可以更快地建立网站应用程序。 JSP 代码生成工具 JSP Maker 下载JSP 代码生成工具 JSP Maker 下载 JSPMaker功能列表:(单击链接查看更多详细信息和屏幕截图) 快速入门向导可快速生成JSP网站 可选的JSP列表,添加/复制,查看,编辑,删除和搜索每个表/查询的页面。所有脚本都通过URL正确链接。可自定义的字段显示顺序。 每个字段的高度可自定义的视图和编辑格式 编辑页面的客户端JavaScript验证 每个表/查询的可选搜索功能(基本/高级/两者)。 可选的高级安全性,用于保护数据免受未经授 通过以下方式定制生成的网站的外观和感觉: 与您自己的CSS链接 设置正文和表格属性 选择HTML模板 预览HTML表格布局 可定制的模板 支持代码页,字符集,区域设置ID和会话超时。可选的默认日期格式。 支持不同的SQL标识符引用字符 每个字段的标题和默认值(如果数据库是MS Access,将使用数据库中的原始值。) 从项目文件保存和恢复项目(JMP文件) 将项目设置与数据库中的更改同步。 在IIS中创建虚拟目录 主/细节页面 文件上传到文件夹或数据库 CSS样式表 现场聚合 动态选择列表
Java代码生成器是一种工具,可以根据指定的模板和配置信息自动生成Java代码。在这里,我们将聚焦于生成EntityDao、Mapper、ServiceController这几个常见的组件。 首先,生成Entity(实体类)是为了将数据库中的表映射到Java中的对象,包括表字段对应的成员变量和相应的getter/setter方法。代码生成器可以根据数据库结构自动生成这些代码,使得开发人员能够更快速地创建实体类。 其次,生成Dao(数据访问对象)是为了实现数据的持久化操作。Dao层提供了数据库的基本CRUD操作,通常包括插入、更新、删除和查询等功能。生成的Dao实现了这些操作的具体逻辑,使得开发人员无需手动编写这些重复的代码。 接下来,生成Mapper(数据映射器)是为了实现数据库和实体类之间的映射关系。Mapper层使用注解或XML配置文件来定义数据库表和实体类之间的映射规则,使得开发人员能够方便地进行数据库操作。 再次,生成Service(业务逻辑层)是为了实现业务处理的逻辑。Service层提供了对外的接口,封装了具体的数据操作和业务处理。生成的Service类中包含了可能需要的一些方法,例如创建、更新、删除和查询等,使得开发人员可以直接使用这些方法来进行业务功能的开发。 最后,生成Controller(控制层)是为了处理请求和响应。Controller层接收来自前端的请求,并将请求转发给相应的Service层进行业务处理,最后将结果返回给前端。生成的Controller类中包含了一些常用的请求处理方法,例如增删改查等操作,使得开发人员可以快速编写接口代码。 总而言之,Java代码生成器可以帮助开发人员自动生成EntityDao、Mapper、ServiceController代码,提高开发效率,减少重复劳动。但需要注意的是,代码生成器不是万能的,只能生成基础的代码框架,具体的业务逻辑和细节仍需要开发人员进行手动编写和优化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的蹭蹭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值