我想请问一下,天涯论坛靳羽西老公马明斯哪里有?知道的麻烦告知一下,有急用。谢谢。

您所在的位置: &
告别无止境的增删改查:Java代码生成器
告别无止境的增删改查:Java代码生成器
朱样年华的博客
对于一个比较大的业务系统,我们总是无止境的增加,删除,修改,粘贴,复制,想想总让人产生一种抗拒的心里。那有什么办法可以在正常的开发进度下自动生成一些类,配置文件,或者接口呢?
有感于马上要做个比较大的业务系统,想到那无止境的增删改查、粘贴复制,顿时脑后升起一阵凉风。于是想到个找或者写一个Java代码的生成器,这样在正常开发进度下,也能余下更多的时间去做些别的事情。
闲话少说,首先总结下需求:
我需要的这个工具能够读取数据库表结构,通过对字段类型、名称等分析得到需要的各种变量,根据模板生成相应的pojo类、hibernate的xml配置文件、dao和service的接口和类。
需求看起来很简单,但是一是没搞过这样的小工具,二是技术不过关,所以还是想到了找找有没有开源的代码拿过来根据自己的需求改。
于是找到了这个开源工具,同学们可以下载直接使用,根据自己的需求写好模板就行了。
由于自己项目中的特殊情况和公司规范等因素,另外也是想学习下别人的设计,所以我对源码进行了删减和功能的修改。
来看下主要的类:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/8190.jpg" />
Table:根据表结构建立的对象。
Column:根据表中每列建立的对象。
Generator:生成器核心类,主要负责根据表对象和读取FreeMarker模板生成最后的java代码文件。
GeneratorControl:控制生成过程等的一些参数,例如文件是否覆盖、文件编码等。
GeneratorProperties:读取配置文件的类,配置文件包括数据库连接信息和一些基本的参数配置。
下面来看一下模板的编写:
pojo模板:
&#include&&/java_copyright.include&& &&#assign&className&=&table.className&&&& &&#assign&classNameLower&=&className?uncap_first&& &package&${basepackage}.pojo.${mpackage}.${table.classNameFirstLower}; &&&#include&&/java_imports.include&& &import&com.linkage.agri.pojo.base.BaseE &&public&class&${className}&extends&BaseEntity&{ &&&&&private&static&final&long&serialVersionUID&=&4635342L; &&&&& &&&&&&#list&table.columns&as&column& &&&&&&&&&&&&private&${column.simpleJavaType}&${column.columnNameLower}; &&&&&&/#list& &&&@generateJavaColumns/& &&&#macro&generateJavaColumns& &&&&&&#list&table.columns&as&column& &&&&&&&&&&#if&column.isDateTimeColumn& &&&&&public&String&get${column.columnName}String()&{ &&&&&&&&&return&DateConvertUtils.format(get${column.columnName}(),&FORMAT_${column.constantName}); &&&&&} &&&&&public&void&set${column.columnName}String(String&${column.columnNameLower})&{ &&&&&&&&&set${column.columnName}(DateConvertUtils.parse(${column.columnNameLower},&FORMAT_${column.constantName},${column.simpleJavaType}.class)); &&&&&} &&&&&&&&&&/#if&&&&& &&&&&public&void&set${column.columnName}(${column.simpleJavaType}&${column.columnNameLower})&{ &&&&&&&&&this.${column.columnNameLower}&=&${column.columnNameLower}; &&&&&} &&&&& &&&&&public&${column.simpleJavaType}&get${column.columnName}()&{ &&&&&&&&&return&this.${column.columnNameLower}; &&&&&} &&&&&&/#list& &&/#macro&&
FreeMarker的基本语法可以看下
${}可以引用很多变量,这些变量包括:环境变量、table对象、配置变量等,这些变量都装在一个map里,如果自己有特殊需求,当然可以修改源码来装载更多的变量值。
注意:当变量为对象时,访问对象的属性是通过get方法来访问的。例如${table.classNameFirstLower},是引用 table对象的getNameFirstLower()方法,即使table对象中没有nameFirstLower这个属性也能够引用。
再看下我写的dao的模板:
&#include&&/java_copyright.include&& &&#assign&className&=&table.className&&&& &&#assign&classNameLower&=&className?uncap_first&&&& &package&${basepackage}.dao.${mpackage}.${table.classNameFirstLower}; &&import&java.math.BigD &import&java.util.L &import&java.util.M &&import&com.linkage.agri.dao.base.AbstractHibernateDAO; &import&com.linkage.agri.exception.DAOE &import&${basepackage}.pojo.${mpackage}.${classNameLower}.${className}; &&&#include&&/java_imports.include&& &&public&Class&${className}DAOImpl&extends&AbstractHibernateDAO&implements&${className}DAO &{ &&&&&&&&&&&&&&&&&&@SuppressWarnings&&&&&public&List&${className}&&queryList${className}ByAttr(Map&String,&Object&&paramMap,&Map&String,&String&&orderMap,&int&pageNum, &&&&&&&&&int&pageSize) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&return&super.listInstances(${className}.class,&paramMap,&orderMap,&pageNum,&pageSize); &&&&&} &&&&& &&&&&&&&&&&&&&&public&${className}&find${className}By${table.pkColumn.columnName}(${table.pkColumn.simpleJavaType}&${table.pkColumn.columnNameFirstLower}) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&return&(${className})super.findById(${className}.class,&${table.pkColumn.columnNameFirstLower}); &&&&&} &&&&& &&&&&&&&&&&&&&&public&${table.pkColumn.simpleJavaType}&save${className}(${className}&${table.classNameFirstLower}) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&return&(${table.pkColumn.simpleJavaType})super.saveInstance(${table.classNameFirstLower}); &&&&&} &&&&& &&&&&&&&&&&&&&&public&void&update${className}(${className}&${table.classNameFirstLower}) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&super.updateInstance(${className}); &&&&&} &&&&& &&&&&&&&&&&&&&&public&boolean&check${className}IsHaveByAttr(Map&String,&Object&&paramMap) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&StringBuffer&sqlBuffer&=&new&StringBuffer(); &&&&&&&&&sqlBuffer.append(&SELECT&COUNT(*)&FROM&${table.sqlName}&T&&); &&&&&&&&&sqlBuffer.append(&WHERE&T.${table.pkColumn.sqlName}&=&?&&); &&&&&&&&& &&&&&&&&&BigDecimal&big&=&(BigDecimal)super.findUniqueResultBySQLWithParams(sqlBuffer.toString(),&paramMap.get(&${table.pkColumn.columnNameFirstLower}&)); &&&&&&&&&return&big.intValue()&&&0&?&false&:&true; &&&&&} &&&&& &&&&&&&&&&&&&&&public&void&update${className}Batch(List&${className}&&${table.classNameFirstLower}List) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&super.updateBatchInstance(${table.classNameFirstLower}List); &&&&&} &&&&& &&&&&&&&&&&&&&&public&void&delete${className}(${className}&${table.classNameFirstLower}) &&&&&&&&&throws&DAOException &&&&&{ &&&&&&&&&super.deleteInstance(${table.classNameFirstLower}); &&&&&} &&}&
建立模板是能否解决自己问题的关键,在摸索出门道以后写模板变的十分简单。其实原理很简单,就是用一系列占位符来替换实际的变量值。
模板路径可以按照实际项目中的路径来拜访,生成器可以读取某个路径下所有模板进行生成,结果如下图:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/8191.jpg" />
接口和实现:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/8192.jpg" />
就说这么多吧,感兴趣的可以研究下这个工具的源码,也DIY出一套自己代码生成工具。不感兴趣的直接写模板就能用。
我只是走在路上,偶尔驻足观赏,偶尔回头看看。
原文链接:
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
Java是Sun公司推出的一种解释型、跨平台的编程语言。它适合于企
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
Hadoop Summit 2013 大会讲师 PPT 第二季重磅来袭!如
现在这天气到处都是高温,还是老老实实的呆在家里上网
、27日,在美国圣何塞举行的Hadoop Summit
本书从基础知识入手,详细讨论了Oracle数据库的创建、OEM及iSQL*Plus等工具的使用、Oracle的字符集知识、用户的创建与管理、表空
51CTO旗下网站javaweb后台的增删改查 - 博客频道 - CSDN.NET
分类:javaweb
第一步先建立数据库的连接
1 建立包 &cn.edu.hpu.util 之后建立数据库连接类DBO
package cn.edu.hpu.
import java.sql.C
import java.sql.DriverM
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
public class DBO {
Class.forName(&com.mysql.jdbc.Driver&);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static Connection getConnection() {
Connection conn=
conn=DriverManager.getConnection(&jdbc:mysql://localhost:3306/sas&, &root&, &123456&);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void close(Statement st,ResultSet rs,Connection conn) {
if(st!=null) {
st.close();
if(rs!=null) {
rs.close();
if(conn!=null) {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void close(PreparedStatement pst,Connection conn) {
if(pst!=null) {
pst.close();
if(conn!=null) {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
2.建立测试包cn.edu.hpu.test 然后建立测试类test
import cn.edu.hpu.service.M
import cn.edu.hpu.service.ManagerI
import java.sql.C
import cn.edu.hpu.util.DBO;
public class Test {
public static void main(String[] args) {
Connection conn=DBO.getConnection();
if(conn!=null) {
System.out.println(&ok!&);
System.out.println(&error!&);
第二步 1. 建立与数据库中表相关的表的类user
package cn.edu.hpu.
public class User {
public int getId() {
public void setId(int id) {
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
建立增删改查的接口及实现类接口
package cn.edu.hpu.
import java.util.L
import cn.edu.hpu.model.U
public interface Manager {
//添加数据
public boolean addUser(User user);
//更新数据
public boolean updateUser(int id,User user);
//查询数据
public List&user& getAllUser();
//删除数据
public boolean deletUser(int id);
建立接口实现类
package cn.edu.hpu.
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
import java.util.ArrayL
import java.util.L
import cn.edu.hpu.model.U
import cn.edu.hpu.util.DBO;
public class ManagerImpl implements Manager {
public boolean addUser(User user) {
// TODO Auto-generated method stub
boolean flag=
Connection conn=
PreparedStatement pst=
String sql=&insert into user(username,password) value(?,?)&;
conn=DBO.getConnection();
pst=conn.prepareStatement(sql);
pst.setString(1, user.getUsername());
pst.setString(2, user.getPassword());
int row=pst.executeUpdate();
if(row&0) {
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
DBO.close(pst, conn);
public boolean updateUser(int id, User user) {
// TODO Auto-generated method stub
boolean flag=
String sql=&update user set username=?,password=? where id=&+
Connection conn=DBO.getConnection();
PreparedStatement pst=
pst=conn.prepareStatement(sql);
pst.setString(1, user.getUsername());
pst.setString(2, user.getPassword());
int row=pst.executeUpdate();
if(row&0) {
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
DBO.close(pst, conn);
public List&user& getAllUser() {
// TODO Auto-generated method stub
List&user& list=new ArrayList&user& ();
String sql=&select * from user&;
Connection conn=
Statement st=
ResultSet rs=
conn=DBO.getConnection();
st=conn.createStatement();
rs=st.executeQuery(sql);
while(rs.next()) {
User user = new User();
user.setId(rs.getInt(&id&));
user.setUsername(rs.getString(&username&));
user.setPassword(rs.getString(&password&));
list.add(user);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
DBO.close(st, rs, conn);
public boolean deletUser(int id) {
// TODO Auto-generated method stub
boolean flag=
String sql=&delete from user where id=&+
Connection conn=DBO.getConnection();
PreparedStatement pst=
pst=conn.prepareStatement(sql);
pst.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
DBO.close(pst, conn);
&/user&&/user&&/user&
最后一步在测试类里测试
package cn.edu.hpu.
import java.util.ArrayL
import java.util.L
import cn.edu.hpu.model.U
import cn.edu.hpu.service.M
import cn.edu.hpu.service.ManagerI
public class Test {
public static void main(String[] args) {
Connection conn=DBO.getConnection();
if(conn!=null) {
System.out.println(&ok!&);
System.out.println(&error!&);
//添加测试
Manager mng=new ManagerImpl();
User user = new User();
user.setUsername(&han&);
user.setPassword(&123&);
for(int i=1;i&100;i++)
mng.addUser(user);
if(flag) {
System.out.println(&ok&);
System.out.println(&error&);
//更新测试
Manager mng=new ManagerImpl();
User user=new User();
user.setUsername(&fang&);
user.setPassword(&222&);
boolean flag=mng.updateUser(1, user);
if(flag=true) {
System.out.println(&ok&);
System.out.println(&error&);
//删除数据
Manager mng =new ManagerImpl();
boolean flag=mng.deletUser(1);
if(flag) {
System.out.println(&ok&);
System.out.println(&error&);
//查询所有信息
Manager mng=new ManagerImpl();
List&user& list=mng.getAllUser();
for(int i=1;i&list.size();i++) {
User user=list.get(i);
System.out.println(&username: &+user.getUsername()+&
&+&password: &+user.getPassword());
DiuDiu666hf
排名:千里之外
(60)(22)(1)(4)(1)(2)(1)(1)

我要回帖

更多关于 天涯公共马甲 的文章

 

随机推荐