如果在项目中使用到了mybatis,那么就需要编写与数据库表对应的javabean对象,还有数据库表的数据列和javabean对象中字段的映射配置,以及一些通用的插入更新数据的配置,这些都可以通过工具自动生成。
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import com.cogcn.framework.util.CommonUtil; /** * 把数据库中的表转化为java对象 * * @author tuozixuan * */ public class TableToJavaTool { private static final String DRIVER_NAME_ORACLE = "oracle.jdbc.driver.OracleDriver"; // 数据库连接-用户名 private String user; // 数据库连接-密码 private String password; // 数据库连接-URL private String dbUrl; // 表名 private String tableName; // 表类别名称 private String catalog; private final List<String> primaryKeyList = new ArrayList<String>(); private List<Map<String, Object>> dataList = null; public TableToJavaTool() { } public TableToJavaTool(String user, String password, String dbUrl, String tableName) { this.user = user; this.password = password; this.dbUrl = dbUrl; this.tableName = tableName; } public void process() { dataList = readData(getTableName()); createJavaBeanFile(getTableName()); createMybatisColumnConfig(getTableName()); } /** * 获取数据库连接 * * @return Connection 数据库连接对象 */ private Connection getConnection() { Connection conn = null; try { Properties props = new Properties(); props.put("remarksReporting", "true"); props.put("user", getUser()); props.put("password", getPassword()); Class.forName(DRIVER_NAME_ORACLE); conn = DriverManager.getConnection(getDbUrl(), props); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 获取数据库指定表的列信息 * * @param tableName 表名 * @return List<Map<String, Object>> 列信息列表 */ private List<Map<String, Object>> readData(String tableName) { Connection conn = getConnection(); List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>(); try { DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs = dbmd.getColumns(getCatalog(), null, tableName, null); Map<String, Object> map = null; while (rs.next()) { map = new HashMap<String, Object>(); map.put("columnName", rs.getString("COLUMN_NAME")); map.put("dataType", rs.getInt("DATA_TYPE")); map.put("remarks", rs.getString("REMARKS")); dataList.add(map); } ResultSet rs1 = dbmd.getPrimaryKeys(getCatalog(), null, tableName); while (rs1.next()) { primaryKeyList.add(rs1.getString("COLUMN_NAME")); } } catch (SQLException e) { e.printStackTrace(); } finally { CommonUtil.closeConnection(conn); } return dataList; } public void createJavaBeanFile(String tableName) { StringBuffer jbString = new StringBuffer(); jbString.append("public class ").append(tableName).append("\r\n"); jbString.append("{").append("\r\n"); if (dataList != null) { for (Map<String, Object> map : dataList) { String fieldName = getFieldName((String) map.get("columnName")); String javaType = getJavaType((Integer) map.get("dataType")); jbString.append(" // ").append(map.get("remarks")).append("\r\n"); jbString.append(" private ").append(javaType).append(" ").append(fieldName).append(";").append("\r\n"); jbString.append("\r\n"); } for (Map<String, Object> map : dataList) { String fieldName = getFieldName((String) map.get("columnName")); String javaType = getJavaType((Integer) map.get("dataType")); jbString.append(" public ").append(javaType).append(" get").append(firstUpperCase(fieldName)).append("()").append("\r\n"); jbString.append(" {").append("\r\n"); jbString.append(" return ").append(fieldName).append(";").append("\r\n"); jbString.append(" }").append("\r\n"); jbString.append("\r\n"); jbString.append(" public void set").append(firstUpperCase(fieldName)).append("(").append(javaType).append(" ").append(fieldName) .append(")").append("\r\n"); jbString.append(" {").append("\r\n"); jbString.append(" this.").append(fieldName).append(" = ").append(fieldName).append(";").append("\r\n"); jbString.append(" }").append("\r\n"); jbString.append("\r\n"); } } jbString.append("}"); System.out.println(jbString.toString()); } /** * 根据表名获取对应的JavaBean的名称<br/> * * * @param tableName 表名 * @return String JavaBean */ public static String getJavaBeanName(String tableName) { return tableName; } /** * 把以_分隔的列明转化为字段名 * * @param columnName 列名 * @return String 字段名 */ private static String getFieldName(String columnName) { if (columnName == null) { return ""; } StringBuffer fieldNameBuffer = new StringBuffer(); boolean nextUpperCase = false; columnName = columnName.toLowerCase(); for (int i = 0; i < columnName.length(); i++) { char c = columnName.charAt(i); if (nextUpperCase) { fieldNameBuffer.append(columnName.substring(i, i + 1).toUpperCase()); } else { fieldNameBuffer.append(c); } if (c == '_') { nextUpperCase = true; } else { nextUpperCase = false; } } String fieldName = fieldNameBuffer.toString(); fieldName = fieldName.replaceAll("_", ""); return fieldName; } /** * 字符串的第一个字母大写 * * @param str 字符串 * @return String 处理后的字符串 */ private static String firstUpperCase(String str) { if (str == null) { return ""; } if (str.length() == 1) { str = str.toUpperCase(); } else { str = str.substring(0, 1).toUpperCase() + str.substring(1); } return str; } /** * 将数据库列类型转换为java数据类型 * * @param dataType 列类型 * @return String java数据类型 */ private static String getJavaType(int dataType) { String javaType = ""; if (dataType == Types.INTEGER) { javaType = "int"; } else if (dataType == Types.BIGINT) { javaType = "long"; } else if (dataType == Types.CHAR || dataType == Types.VARCHAR || dataType == Types.NVARCHAR || dataType == Types.CLOB) { javaType = "String"; } else if (dataType == Types.TINYINT) { javaType = "short"; } else if (dataType == Types.FLOAT) { javaType = "float"; } else if (dataType == Types.NUMERIC || dataType == Types.DECIMAL || dataType == Types.DOUBLE) { javaType = "double"; } else if (dataType == Types.DATE || dataType == Types.TIMESTAMP) { javaType = "Date"; } return javaType; } public void createMybatisColumnConfig(String tableName) { StringBuffer buffer = new StringBuffer(); if (dataList != null) { buffer.append("<resultMap id=\"BaseResultMap\" type=\"").append(tableName).append("\"> ").append("\r\n"); for (Map<String, Object> map : dataList) { // <result column="CI_TYP" jdbcType="CHAR" property="ciTyp" /> String columnName = (String) map.get("columnName"); String fieldName = getFieldName(columnName); String jdbcType = getMybatisJdbcType((Integer) map.get("dataType")); if (primaryKeyList.contains(columnName)) { buffer.append(" <id column=\"").append(columnName).append("\" ").append("jdbcType=\"").append(jdbcType) .append("\" property=\"").append(fieldName).append("\" />").append("\r\n"); } else { buffer.append(" <result column=\"").append(columnName).append("\" ").append("jdbcType=\"").append(jdbcType) .append("\" property=\"").append(fieldName).append("\" />").append("\r\n"); } } buffer.append("</resultMap>").append("\r\n"); } buffer.append("<sql id=\"BaseColumnList\">").append("\r\n"); int length = dataList.size(); int count = 0; buffer.append(" "); for (Map<String, Object> map : dataList) { count++; buffer.append(map.get("columnName")); if (count != length) { buffer.append(", "); } } buffer.append("\r\n"); buffer.append("</sql>").append("\r\n"); // insert配置 buffer.append("<insert id=\"insert\" parameterType=\"\">").append("\r\n"); buffer.append(" insert into ").append(getTableName()).append("\r\n"); buffer.append(" <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">").append("\r\n"); for (Map<String, Object> map : dataList) { String columnName = (String) map.get("columnName"); String fieldName = getFieldName(columnName); buffer.append(" <if test=\"").append(fieldName).append(" != null\"> \r\n"); buffer.append(" ").append(columnName).append(",").append("\r\n"); buffer.append(" </if> \r\n"); } buffer.append(" </trim>").append("\r\n"); buffer.append(" <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\"> \r\n"); for (Map<String, Object> map : dataList) { String columnName = (String) map.get("columnName"); String fieldName = getFieldName(columnName); String jdbcType = getMybatisJdbcType((Integer) map.get("dataType")); buffer.append(" <if test=\"").append(fieldName).append(" != null\"> \r\n"); buffer.append(" #{").append(fieldName).append(",jdbcType=").append(jdbcType).append("}, \r\n"); buffer.append(" </if> \r\n"); } buffer.append(" </trim>").append("\r\n"); // update配置 buffer.append("<update id=\"update\" parameterType=\"java.util.Map\"> \r\n"); buffer.append(" update ").append(getTableName()).append("\r\n"); buffer.append(" <set>").append("\r\n"); for (Map<String, Object> map : dataList) { String columnName = (String) map.get("columnName"); String fieldName = getFieldName(columnName); String jdbcType = getMybatisJdbcType((Integer) map.get("dataType")); buffer.append(" <if test=\"").append(fieldName).append(" != null\"> \r\n"); buffer.append(" ").append(columnName).append(" = ").append("#{").append(fieldName).append(",jdbcType=").append(jdbcType).append("}, \r\n"); buffer.append(" </if> \r\n"); } buffer.append(" </set> \r\n"); buffer.append(" where ").append("\r\n"); // for (String primaryKey : primaryKeyList) // { // buffer.append(" ").append(primaryKey).append(" = #{lnNo,jdbcType=CHAR}"); // } buffer.append("</update>"); System.out.println(buffer.toString()); } /** * 根据列的类型,获取mybatis配置中的jdbcType * * @param dataType 列的类型 * @return String jdbcType */ private static String getMybatisJdbcType(int dataType) { String jdbcType = ""; if (dataType == Types.TINYINT) { jdbcType = "TINYINT"; } else if (dataType == Types.SMALLINT) { jdbcType = "SMALLINT"; } else if (dataType == Types.INTEGER) { jdbcType = "INTEGER"; } else if (dataType == Types.BIGINT) { jdbcType = "BIGINT"; } else if (dataType == Types.FLOAT) { jdbcType = "FLOAT"; } else if (dataType == Types.DOUBLE) { jdbcType = "DOUBLE"; } else if (dataType == Types.DECIMAL) { jdbcType = "DECIMAL"; } else if (dataType == Types.NUMERIC) { jdbcType = "NUMERIC"; } else if (dataType == Types.VARCHAR) { jdbcType = "VARCHAR"; } else if (dataType == Types.NVARCHAR) { jdbcType = "NVARCHAR"; } else if (dataType == Types.CHAR) { jdbcType = "CHAR"; } else if (dataType == Types.NCHAR) { jdbcType = "NCHAR"; } else if (dataType == Types.CLOB) { jdbcType = "CLOB"; } else if (dataType == Types.BLOB) { jdbcType = "BLOB"; } else if (dataType == Types.NCLOB) { jdbcType = "NCLOB"; } else if (dataType == Types.DATE) { jdbcType = "DATE"; } else if (dataType == Types.TIMESTAMP) { jdbcType = "TIMESTAMP"; } else if (dataType == Types.ARRAY) { jdbcType = "ARRAY"; } else if (dataType == Types.TIME) { jdbcType = "TIME"; } else if (dataType == Types.BOOLEAN) { jdbcType = "BOOLEAN"; } else if (dataType == Types.BIT) { jdbcType = "BIT"; } else if (dataType == Types.BINARY) { jdbcType = "BINARY"; } else if (dataType == Types.OTHER) { jdbcType = "OTHER"; } else if (dataType == Types.REAL) { jdbcType = "REAL"; } else if (dataType == Types.LONGVARCHAR) { jdbcType = "LONGVARCHAR"; } else if (dataType == Types.VARBINARY) { jdbcType = "VARBINARY"; } else if (dataType == Types.LONGVARBINARY) { jdbcType = "LONGVARBINARY"; } return jdbcType; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDbUrl() { return dbUrl; } public void setDbUrl(String dbUrl) { this.dbUrl = dbUrl; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public String getCatalog() { return catalog; } public void setCatalog(String catalog) { this.catalog = catalog; } }
使用示例:
public static void main(String[] args) { String dbUrl = "jdbc:oracle:thin:@10.10.16.80:1521/orcl"; String userName = "user"; String password = "password"; String tableName = "MEMBER"; TableToJavaTool tool = new TableToJavaTool(userName, password, dbUrl, tableName); // tool.setCatalog("me"); tool.process(); }
相关推荐
总结起来,`mybatis-generator javabean` 提供了一种高效的方式,自动从MySQL数据库生成MyBatis所需的Mapper XML、DAO接口和JavaBean实体类,极大地减少了手动编写这些基础代码的工作量,提升了开发效率。...
MyBatis Generator(通常缩写为MBG)是一款强大的工具,用于自动生成MyBatis框架所需的JavaBean、Mapper XML文件以及对应的DAO接口。这个插件极大地简化了开发过程,减少了手动编写这些基础代码的工作量,使得开发者...
MyBatis + Mapper 代码生成器是一个实用工具,旨在帮助开发者快速生成MyBatis框架所需的JavaBean和Mapper接口以及XML映射文件,从而减少手动编写这些基础代码的时间和错误。这个工具采用tk.mapper模式,实现了动态...
通过运行这个 jar 文件或在 IDE 中启动该程序,用户可以方便地配置数据库连接信息,选择要生成的表,然后自动生成相应的 MyBatis 框架所需的代码。 1. **MyBatis Generator 基础知识**: - MyBatis Generator 是 ...
3. **MyBatis与Jackson集成**:虽然MyBatis主要处理数据库操作,但如果你需要将查询结果直接转换为JSON,可以在MyBatis的配置中指定使用Jackson。在`mybatis-config.xml`中添加`ObjectMapper`的配置: ```xml ...
`GeneratorSqlmap.java`是主程序,它读取并解析`generatorConfig.xml`中的配置,然后调用相应的代码生成库或框架(如MyBatis的MyBatis Generator或Apache的DBUtils等)来生成JavaBean和DAO代码。JavaBean通常代表...
MyBatis Generator(MBG...配置好generatorConfig.xml文件后,运行MBG即可生成所需的代码,从而提高开发效率。在实际开发中,MBG是一个非常实用的辅助工具,能帮助开发者专注于核心业务逻辑,而不是基础的数据库操作。
TableGo的核心优势在于其低代码编程的实现,能够自动生成SpringBoot项目工程、JavaBean、前后端分离的CRUD代码、MyBatis的Mapper映射配置文件、数据库设计文档(如Word和Excel)以及Swagger2离线API文档等。...
1. **配置加载**: MyBatis首先读取配置文件,解析出SqlSessionFactoryBuilder所需的参数,然后构建SqlSessionFactory。 2. **SqlSession的创建**: SqlSessionFactory创建SqlSession时,会根据配置确定Executor类型...
MyBatis Generator(MBG)是一...总之,MyBatis Generator是MyBatis框架的重要辅助工具,通过它可以快速地生成与数据库交互所需的代码,显著提高开发效率。只要正确配置并合理使用,MBG就能成为项目开发中的得力助手。
本压缩包提供了整合这三大框架所需的核心库文件,下面将详细解释这些库文件及其在整合过程中的作用。 1. **aspectjweaver-1.6.8.jar**:AspectJ是一个面向切面编程(AOP)的扩展,它允许开发者在不改变业务逻辑的情况...
MyBatis_Generator是一款强大的自动化代码生成工具,它能够帮助开发者自动生成MyBatis框架所需的Mapper接口、实体类以及XML映射文件,极大地提高了开发效率。本文将详细介绍如何在Eclipse环境中安装和使用MyBatis_...
接着,设置Tomcat服务器,配置好数据库连接(如MySql),然后创建SpringMVC工程,导入所需的库文件。在项目中,定义DispatcherServlet,配置SpringMVC的配置文件(如spring-mvc.xml),并设置视图解析器(如...
5. **快速导入Mapper**:在编写Java代码时,插件可快速导入所需的Mapper接口,提高编码速度。 6. **模板定制**:用户可以根据自己的开发习惯自定义代码生成模板,包括类的注释、方法前缀、返回类型等,实现个性化...
在这里,我们使用JDBC来执行用户提供的SQL语句,获取报表所需的数据。 - **ResultSets**:JDBC执行SQL后的结果通常以ResultSet对象的形式返回,该对象包含了查询返回的所有行和列。 3. **数据处理与展示** - **...
- **数据库文件**:可能是数据库脚本,用于创建和初始化兼职平台所需的数据表和数据。 - **运行截图**:展示了平台的界面和运行状态,可能包含了功能演示和成功运行的证明。 综合以上信息,这个压缩包是一个基于JSP...
开发者可以通过Maven的pom.xml文件声明项目所需的库,Maven会自动下载并管理这些库。 7. **前后端交互**:系统使用Ajax技术实现局部刷新,提高用户体验。前端可能使用JQuery和JavaScript进行交互逻辑处理,后端通过...
源码数据库是平台的核心部分,它存储了所有服务所需的数据。可能包含老人信息、服务信息、预约记录等表,数据库设计应遵循规范化原则,保证数据的一致性和完整性。可能使用的数据库管理系统如MySQL,因其高效、稳定...
在hrm管理系统中,Maven使得开发者可以方便地导入和管理所需的库,确保项目的构建一致性。 5. **Tomcat9**:作为Java应用服务器,Tomcat9运行和部署了hrm系统的Web应用。开发者可以将打包后的WAR文件部署到Tomcat中...
6. **Web容器**:JavaWeb应用需要在Web容器(如Tomcat、Jetty)中运行,这些容器提供了运行Servlet和JSP所需的环境。在本项目中,开发者可能已经配置了相应的Web服务器,并部署了应用。 7. **目录结构**:一个标准...