`
mr.lili
  • 浏览: 154334 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类

java ResultSet获得数据库表信息和表字段信息,自动生成pojo和spring 框架的service 和dao

 
阅读更多

package com.hskj.operateDbUtils;

 

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

 

/**

 * 

 * @创建时间:2017年3月14日 @创建人:lili @类说明: @修改时间: @修改人: @修改说明:

 */

public class ReadDb {

 

private static String url = "jdbc:mysql://10.0.1.1/newspaper?useUnicode=true&characterEncoding=utf8&autoReconnect=true";// 简单写法:url

private static String user = "root";

private static String password = "hskj2015";

 

private static Connection conn = null;

private static Statement stmt = null;

private static ResultSet rs = null;

 

public static void main(String[] args) {

//System.out.println(">>>");

ReadDb obj = new ReadDb();

obj.getCon();

//obj.query();

 

List<String> tbList = obj.getTables();//获得数据库里所有表名称

for (String str : tbList) {

System.out.println("///////////////////////");

if("categoryTb".equalsIgnoreCase(str.trim())){

//System.out.println("表名:"+str);

 

System.out.println("表名:"+str);

List<String> colList = obj.getCols(str);

//for (String col : colList) {

//System.out.println("列:"+col);

//}

//

GenerateClass.generatePojo(str, colList, "f:/pojo/","com.hskj.model");//生成pojo

GenerateClass.generateDao(str, colList, "f:/dao/","com.hskj.dao");//生成 dao

GenerateClass.generateService(str, colList, "f:/service/","com.hskj.service");//生成 dao

 

}

//break;

}

 

}

 

 

 

/**

* 获得表信息

*/

public List<String> getTables() {

List<String> tbList = new ArrayList<String>();

try {

DatabaseMetaData m_DBMetaData = conn.getMetaData();

ResultSet tbRs = m_DBMetaData.getTables(null, "%", "%", new String[] { "TABLE" });

String tmp = "";

while (tbRs.next()) {

tbList.add(tbRs.getString("TABLE_NAME"));

// System.out.println(tbRs.getString("TABLE_NAME"));

}

if(null != tbRs ){

tbRs.close();

tbRs = null;

}

 

 

} catch (Exception e) {

System.out.println("获得数据库表名错误");

e.printStackTrace();

}

 

return tbList;

}

 

/**

* 获得表里所有 字段

* @param tbName

*/

public List<String> getCols(String tbName) {

List<String> colsList = new ArrayList<String>();

try {

DatabaseMetaData m_DBMetaData = conn.getMetaData();

ResultSet colRet = m_DBMetaData.getColumns(null, "%", tbName, "%");

String col = "";

String colType = "";

while (colRet.next()) {

col = colRet.getString("COLUMN_NAME");

colsList.add(col);

//colType = colRet.getString("TYPE_NAME");

}

if(null != colRet ){

colRet.close();

colRet = null;

}

} catch (Exception e) {

System.out.println("获得" + tbName + "表字段错误");

e.printStackTrace();

}

return colsList;

}

 

/**

* 查询

*/

public void query() {

try {

stmt = conn.createStatement();

String sql = "select * from userTb";// dept这张表有deptno,deptname和age这三个字段

rs = stmt.executeQuery(sql);// 执行sql语句

while (rs.next()) {

System.out.print(" --------------- ");

System.out.print(rs.getString("id") + "  , ");

System.out.print(rs.getString("account") + "  , ");

System.out.println(rs.getString("phoneNumber") + "   ");

}

} catch (SQLException e) {

System.out.println("数据操作错误");

e.printStackTrace();

}

}

 

/**

* 获得连接

*/

public void getCon() {

try {

Class.forName("com.mysql.jdbc.Driver"); // 加载mysq驱动

 

} catch (ClassNotFoundException e) {

System.out.println("驱动加载错误");

e.printStackTrace();// 打印出错详细信息

}

try {

conn = DriverManager.getConnection(url, user, password);

} catch (SQLException e) {

System.out.println("数据库链接错误");

e.printStackTrace();

}

}

 

/**

* 关闭连接

*/

public void colseCon() {

// 关闭数据库

try {

if (null != rs) {

rs.close();

rs = null;

}

if (null != stmt) {

stmt.close();

stmt = null;

}

if (null != conn) {

conn.close();

conn = null;

}

} catch (Exception e) {

System.out.println("数据库关闭错误");

e.printStackTrace();

}

}

 

}

 

//////////////////////////////////////////////////////////////////////////////////////////

package com.hskj.operateDbUtils;

 

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Table;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.jpa.repository.Modifying;

import org.springframework.data.jpa.repository.Query;

import org.springframework.stereotype.Repository;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

 

import com.hskj.dao.UserDao;

import com.hskj.dao.UserDaoImpl;

import com.hskj.model.Admin;

import com.hskj.model.User;

import com.hskj.service.UserService;

import com.hskj.utils.BaseDao;

import com.hskj.utils.BasoDaoImpl;

 

/**

 * 

 * @创建时间:2017年3月14日 @创建人:lili

 * @类说明:生成类文件 @修改时间: @修改人: @修改说明:

 */

public class GenerateClass {

 

// private static String filePath = "f:";

 

public static void main(String[] args) {

String tbName = "adminTb";

tbName = tbName.replaceAll("(?i)tb", "");

System.out.println(tbName);// 替换所有大小写的tb

tbName = tbName.substring(0, 1).toUpperCase() + tbName.substring(1);

System.out.println(tbName);// 替换所有大小写的tb

 

generatePojo(tbName, null, "/pojo/", "com.hskj.model");

// if(){

//

// }

}

 

/**

* 生成dao

* @param tbName

*            表名称

* @param colList

*            访表下面相应的字段

*/

public static void generateService(String tbName, List<String> colList, String fileNamePath, String packageStr) {

String replacTbStr = tbName.replaceAll("(?i)tb", "");// 替换所有大小写的tb

String fileName = replacTbStr;

fileName = fileName.substring(0, 1).toUpperCase() + fileName.substring(1);// 首字母大写

fileName = fileName.trim();

try {

 

// 生成dao文件

File file = new File(fileNamePath + fileName + "Service.java");

if (!file.exists()) {

file.createNewFile();

}

 

FileWriter fw = new FileWriter(file);

BufferedWriter bw = new BufferedWriter(fw);

StringBuffer sb = new StringBuffer();

 

sb.append(" package " + packageStr + ";\r\n");

 

sb.append(" import java.util.List;\r\n");

sb.append(" import com.hskj.model." + fileName + ";\r\n");

sb.append("   \r\n");

 

sb.append(" public interface " + fileName + "Service{  \r\n");

 

sb.append("   \r\n");

 

//根据id获得Obj

sb.append(" /**  \r\n");

sb.append(" * 根据用户id获得Obj对象信息  \r\n");

sb.append(" *   \r\n");

sb.append(" * @param id  \r\n");

sb.append(" * @return  \r\n");

sb.append(" */  \r\n");

sb.append(" public "+fileName+" getObjByid(String id);  \r\n");

 

//根据ids删除

sb.append(" /** \r\n");

sb.append("  * 批量删除Obj \r\n");

sb.append(" *  \r\n");

sb.append(" * @param ids \r\n");

sb.append(" */ \r\n");

sb.append(" public void delete"+fileName+"ByIds(List<String> ids); \r\n");

 

//根据条件查询

sb.append(" /** \r\n");

sb.append(" * 根据对象信息条件查询对象信息 \r\n");

sb.append(" *  \r\n");

sb.append(" * @param o \r\n");

sb.append(" * @return \r\n");

sb.append(" */ \r\n");

sb.append(" public List<"+fileName+"> getDatasBycods("+fileName+" o); \r\n");

 

//添加和修改

sb.append(" /** \r\n");

sb.append(" * 添加或修改对象 \r\n");

sb.append(" * @param o  对象实体 \r\n");

sb.append(" * @return \r\n");

sb.append(" */ \r\n");

sb.append(" public void addOrUpdate"+fileName+"("+fileName+" o); \r\n");

 

sb.append("  \r\n");

 

 

sb.append(" } " + "\r\n");

 

bw.write(sb.toString());

bw.close();

 

 

// 生成daoImpl文件

// 生成dao文件

file = new File(fileNamePath + "/Impl/" + fileName + "ServiceImpl.java");

if (!file.exists()) {

file.createNewFile();

}

 

fw = new FileWriter(file);

bw = new BufferedWriter(fw);

sb = new StringBuffer();

 

sb.append(" package " + packageStr + ".Impl;\r\n");

 

sb.append(" import java.util.List; \r\n");

sb.append(" import java.util.ArrayList; \r\n");

sb.append(" import java.util.Arrays; \r\n");

 

sb.append(" import javax.persistence.criteria.CriteriaBuilder; \r\n");

sb.append(" import javax.persistence.criteria.CriteriaQuery; \r\n");

sb.append(" import javax.persistence.criteria.Predicate; \r\n");

sb.append(" import javax.persistence.criteria.Root; \r\n");

 

sb.append(" import org.apache.commons.lang3.StringUtils; \r\n");

sb.append(" import org.springframework.beans.factory.annotation.Autowired; \r\n");

sb.append(" import org.springframework.data.domain.Page; \r\n");

sb.append(" import org.springframework.data.domain.PageRequest; \r\n");

sb.append(" import org.springframework.data.domain.Pageable; \r\n");

sb.append(" import org.springframework.data.jpa.domain.Specification; \r\n");

sb.append(" import org.springframework.stereotype.Service; \r\n");

 

String tmp0 = packageStr.replace("service", "model");

String tmp1 = packageStr.replace("service", "dao");

 

sb.append(" import "+ tmp0 +"."+ fileName + "; \r\n");

sb.append(" import "+ tmp1 +"."+ fileName + "Dao; \r\n");

sb.append(" import "+ tmp1 +"."+ fileName + "DaoImpl; \r\n");

sb.append(" import "+ packageStr+"." + fileName + "Service; \r\n");

 

 

sb.append("   \r\n");

 

sb.append(" @Service(\""+replacTbStr+"Service\") \r\n");

sb.append(" public class "+fileName+"ServiceImpl implements "+fileName+"Service{ \r\n");

 

sb.append("   \r\n");

 

sb.append(" @Autowired \r\n");

sb.append(" private "+fileName+"Dao "+replacTbStr+"Dao; \r\n");

sb.append(" @Autowired \r\n");

sb.append(" private "+fileName+"DaoImpl "+replacTbStr+"DaoImpl; \r\n");

 

 

//根据id获得Obj

sb.append(" /**  \r\n");

sb.append(" * 根据用户id获得Obj对象信息  \r\n");

sb.append(" *   \r\n");

sb.append(" * @param id  \r\n");

sb.append(" * @return  \r\n");

sb.append(" */  \r\n");

sb.append(" @Override  \r\n");

sb.append(" public "+fileName+" getObjByid(String id){  \r\n");

sb.append(" return "+replacTbStr+"Dao.getObjByid(id); \r\n");

sb.append(" } \r\n");

 

//根据ids删除

sb.append(" /** \r\n");

sb.append("  * 批量删除Obj \r\n");

sb.append(" *  \r\n");

sb.append(" * @param ids \r\n");

sb.append(" */ \r\n");

sb.append(" public void delete"+fileName+"ByIds(List<String> ids){ \r\n");

sb.append(" "+replacTbStr+"Dao.delete"+fileName+"(ids); \r\n");

sb.append(" } \r\n");

 

//根据条件查询

sb.append(" /** \r\n");

sb.append(" * 根据对象信息条件查询对象信息 \r\n");

sb.append(" *  \r\n");

sb.append(" * @param o \r\n");

sb.append(" * @return \r\n");

sb.append(" */ \r\n");

sb.append(" public List<"+fileName+"> getDatasBycods("+fileName+" o){ \r\n");

sb.append(" return "+replacTbStr+"DaoImpl.getDatasBycods(o); \r\n");

sb.append(" } \r\n");

 

//添加和修改

sb.append(" /** \r\n");

sb.append(" * 添加或修改对象 \r\n");

sb.append(" * @param o  对象实体 \r\n");

sb.append(" * @return \r\n");

sb.append(" */ \r\n");

sb.append(" public void addOrUpdate"+fileName+"("+fileName+" o){ \r\n");

sb.append(" "+replacTbStr+"Dao.save(o); \r\n");

sb.append(" } \r\n");

sb.append("  \r\n");

 

 

sb.append(" } " + "\r\n");

 

bw.write(sb.toString());

bw.close();

 

System.out.println("Done");

 

} catch (IOException e) {

System.out.println("写dao文件出错:" + tbName);

e.printStackTrace();

}

}

 

/**

* 生成dao

* @param tbName

*            表名称

* @param colList

*            访表下面相应的字段

*/

public static void generateDao(String tbName, List<String> colList, String fileNamePath, String packageStr) {

String fileName = tbName.replaceAll("(?i)tb", "");// 替换所有大小写的tb

fileName = fileName.substring(0, 1).toUpperCase() + fileName.substring(1);// 首字母大写

fileName = fileName.trim();

try {

 

// 生成dao文件

File file = new File(fileNamePath + fileName + "Dao.java");

if (!file.exists()) {

file.createNewFile();

}

 

FileWriter fw = new FileWriter(file);

BufferedWriter bw = new BufferedWriter(fw);

StringBuffer sb = new StringBuffer();

 

sb.append(" package " + packageStr + ";\r\n");

 

sb.append(" import org.springframework.data.jpa.repository.Modifying;\r\n");

sb.append(" import org.springframework.data.jpa.repository.Query;\r\n");

sb.append(" import org.springframework.transaction.annotation.Transactional;\r\n");

sb.append(" import com.hskj.model." + fileName + ";\r\n");

sb.append(" import com.hskj.utils.BaseDao;\r\n");

sb.append(" import java.util.List; \r\n");

sb.append("   \r\n");

 

sb.append(" public interface " + fileName + "Dao extends BaseDao<" + fileName + ", Integer>{  \r\n");

 

sb.append("   \r\n");

 

sb.append(" /** \r\n");

sb.append(" * 根据用户id获得Obj对象信息\r\n");

sb.append(" * @param id\r\n");

sb.append(" * @return \r\n");

sb.append(" */ \r\n");

sb.append(" @Query(\"select o from " + fileName + " o where o.id=?1 and o.isDelete = '0' \") \r\n");

sb.append(" public "+fileName+" getObjByid(String id); \r\n");

 

sb.append("  \r\n");

sb.append("  /** \r\n");

sb.append("  * 批量删除Obj \r\n");

sb.append("  * @param ids \r\n");

sb.append("  */ \r\n");

sb.append("  @Transactional \r\n");

sb.append("  @Modifying \r\n");

sb.append("  @Query(\"update " + fileName + " o set o.isDelete='1' where o.id in(?1)\") \r\n");

sb.append("  public void delete" + fileName + "(List<String> ids); \r\n");

 

sb.append(" } " + "\r\n");

 

bw.write(sb.toString());

bw.close();

 

// 生成daoImpl文件

// 生成dao文件

file = new File(fileNamePath + fileName + "DaoImpl.java");

if (!file.exists()) {

file.createNewFile();

}

 

fw = new FileWriter(file);

bw = new BufferedWriter(fw);

sb = new StringBuffer();

 

sb.append(" package " + packageStr + "; \r\n");

 

sb.append(" import java.util.ArrayList; \r\n");

sb.append(" import java.util.List; \r\n");

sb.append(" import javax.persistence.Query; \r\n");

sb.append(" import org.springframework.stereotype.Repository; \r\n");

sb.append(" import org.springframework.transaction.annotation.Transactional; \r\n");

sb.append(" import com.hskj.model." + fileName + "; \r\n");

sb.append(" import com.hskj.utils.BasoDaoImpl; \r\n");

 

sb.append("   \r\n");

// sb.append(" @Repository \r\n");

sb.append(" public class " + fileName + "DaoImpl extends BasoDaoImpl{ \r\n");

 

sb.append(" /** \r\n");

sb.append(" * 根据对象信息条件查询对象信息 \r\n");

sb.append(" * @param o \r\n");

sb.append(" * @return \r\n");

sb.append(" */ \r\n");

sb.append(" public List<"+fileName+"> getDatasBycods("+fileName+" o) { \r\n");

sb.append(" StringBuilder hql = new StringBuilder(); \r\n");

sb.append(" hql.append(\"select o from "+fileName+" o where o.isDelete = '0' \"); \r\n");

sb.append(" Query query = em.createQuery(hql.toString()); \r\n");

sb.append(" List<"+fileName+"> vList = new ArrayList<"+fileName+">(); \r\n");

sb.append(" vList = query.getResultList(); \r\n");

sb.append(" return vList; \r\n");

sb.append(" } \r\n");

 

sb.append(" } " + "\r\n");

 

bw.write(sb.toString());

bw.close();

 

System.out.println("Done");

 

} catch (IOException e) {

System.out.println("写dao文件出错:" + tbName);

e.printStackTrace();

}

}

 

/**

* 生成pojo

* @param tbName

*            表名称

* @param colList

*            访表下面相应的字段

*/

public static void generatePojo(String tbName, List<String> colList, String fileNamePath, String packageStr) {

// System.out.println("表名:" + tbName);

// String packageStr = "com.hskj.model";

 

String fileName = tbName.replaceAll("(?i)tb", "");// 替换所有大小写的tb

fileName = fileName.substring(0, 1).toUpperCase() + fileName.substring(1);// 首字母大写

try {

// String content = "This is the content to write into file";

File file = new File(fileNamePath + fileName + ".java");

if (!file.exists()) {

file.createNewFile();

}

 

FileWriter fw = new FileWriter(file);

BufferedWriter bw = new BufferedWriter(fw);

StringBuffer sb = new StringBuffer();

 

sb.append(" package " + packageStr + ";\r\n");

 

sb.append(" import javax.persistence.*; \r\n");

sb.append(" @Entity \r\n");

sb.append(" @Table(name = \"" + tbName + "\") \r\n");

sb.append(" public class " + fileName + "{ \r\n");

// sb.append(" ");

 

// 属性

for (String col : colList) {

// System.out.println("列:" + col);.

sb.append(" private String  " + col + "; \r\n");

}

// 构造方法

sb.append(" public " + fileName + "() { " + "\r\n");

sb.append(" super(); " + "\r\n");

sb.append(" } " + "\r\n");

 

String tmp = "";

for (String col : colList) {

if ("id".equalsIgnoreCase(col)) {// 如果是主键id

sb.append(" @Id " + "\r\n");

sb.append(" @Column(name = \"" + col + "\") " + "\r\n");

 

tmp = col;

tmp = tmp.substring(0, 1).toUpperCase() + tmp.substring(1);// 首字母大写

sb.append(" public String get" + tmp + "() { " + "\r\n");

sb.append(" return id; " + "\r\n");

sb.append(" } " + "\r\n");

 

sb.append(" public void set" + tmp + "(String id) { " + "\r\n");

sb.append(" this.id = id; " + "\r\n");

sb.append(" } " + "\r\n");

 

} else {

tmp = col;

tmp = tmp.substring(0, 1).toUpperCase() + tmp.substring(1);// 首字母大写

sb.append(" public String get" + tmp + "() { " + "\r\n");

sb.append(" return " + col + "; " + "\r\n");

sb.append(" } " + "\r\n");

sb.append(" public void set" + tmp + "(String " + col + ") { " + "\r\n");

sb.append(" this." + col + " = " + col + "; " + "\r\n");

sb.append(" } " + "\r\n");

}

}

sb.append(" } " + "\r\n");

 

bw.write(sb.toString());

bw.close();

 

System.out.println("Done");

 

} catch (IOException e) {

System.out.println("写pojo文件出错:" + tbName);

e.printStackTrace();

}

}

}

 

分享到:
评论

相关推荐

    Java Web图书管理系统(附上MySQL数据库)

    总结来说,这个Java Web图书管理系统运用了丰富的Java Web技术和数据库管理知识,通过分层架构实现了高效、可扩展的图书信息管理。对于学习者来说,这是一个很好的实践项目,可以深入理解Web应用的开发流程,提升...

    Spring中文帮助文档

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    BeetlSQL 2.10中文文档

    - **生成POJO代码和SQL片段**: Beetsql提供了一种机制来自动生成POJO类和SQL片段,加快了开发速度。 - **悲观锁(lock)**: 支持悲观锁机制,确保数据的一致性和完整性。 #### 四、命名转换与表列映射 BeetSql提供了...

    mybatis第一天课程文档

    ### MyBatis基础知识点 #### 一、MyBatis简介...5. **逆向工程工具**:自动为现有数据库生成对应的Java实体类、映射文件等。 通过这些高级特性的学习和实践,开发者可以更加高效地使用MyBatis来开发复杂的应用程序。

    MyBatis.pdf

    - **SQL 映射**:通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,即普通的 Java 对象)为数据库中的记录。 - **简化 JDBC 编码**:MyBatis 免除了几乎所有的 JDBC 代码...

    java_students_db

    它们将Java对象与数据库表映射,自动处理SQL语句的生成和执行,提高开发效率。 6. Transactions(事务):在处理数据库操作时,尤其是在涉及多条语句的复杂操作时,事务管理是至关重要的。Java提供`java.sql....

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

Global site tag (gtag.js) - Google Analytics