当使用MyBatis的时候,需要每个表建立一个Entity类,还要创建一个Mapping文件,如果表的数量少还好说,当表的数量多的时候,而且以后还会增加的时候,手动创建这些文件就成了一个繁琐而又重复的工作,根据“能用工具不手写”的原则,可以根据Mapping xml的格式,用程序来生成这些对应的文件。
这里是一个生成Mapping XML文件的demo code:
import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 数据表生成mybatis的对应mapping xml * Created by usr1999 on 2015/1/30. */ public class TableToXml { private static final String LINE = "\r\n"; private static final String TAB = "\t"; private static Map<String, String> jdbcTypeMap; String rootPath = "/Users/jiangzhiqiang/dev"; static { jdbcTypeMap = new HashMap<String, String>(); jdbcTypeMap.put("DATETIME", "TIMESTAMP"); jdbcTypeMap.put("TINYINT", "INTEGER"); jdbcTypeMap.put("SMALLINT", "INTEGER"); jdbcTypeMap.put("INT", "INTEGER"); } public static void main(String[] args) throws SQLException, ClassNotFoundException { String jdbcString = "jdbc:mysql://m3307i.test.db.dmall.com:3307/dmall_ledger"; Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection(jdbcString, "devtest", "WDevTest@Dmall"); DatabaseMetaData metadata = con.getMetaData(); ResultSet rs = metadata.getTables("dmall_ledger", null, null, null); TableToXml d = new TableToXml(); while (rs.next()) { String tableName = rs.getString(3); System.out.println("正在生成XML Mapping的表名: ================ "+tableName); d.tableToXml(con, tableName); } } private void tableToXml(Connection conn, String tableName) { String entityName = convertTableToEntity(tableName); String sql = "select * from " + tableName + " limit 1"; //MySql DB StringBuilder xml = new StringBuilder(); xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.append(LINE); xml.append("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\" >"); xml.append(LINE); // mapping.xml中要引用的Mapper接口,com.zainagou.supplier.mapper为xml映射的entity类的包名 String mapperName = "com.dmall.settle.mapper." +entityName+"Mapper"; xml.append("<mapper namespace=\""+mapperName+"\">"); xml.append(LINE); xml.append(TAB); String fullEntityName = "com.dmall.settle.domain."+entityName; xml.append("<resultMap id=\"baseResultMap\" type=\""+fullEntityName+"\" >"); List<String> columeList = new ArrayList<String>(); try { PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); for(int i=1;i<=columnCount;i++){ xml.append(LINE); xml.append(TAB); xml.append(TAB); String columnName = metaData.getColumnName(i); columeList.add(columnName); String columnTypeName = metaData.getColumnTypeName(i); if(columnTypeName.contains(" ")){ columnTypeName = columnTypeName.split(" ")[0]; } // System.out.println("columnName:"+columnName+", columnType:"+columnTypeName); if(jdbcTypeMap.containsKey(columnTypeName)){ columnTypeName = jdbcTypeMap.get(columnTypeName); } if(columnName.equals("id")){ xml.append("<id column=\"id\" property=\"id\" jdbcType=\""); xml.append(columnTypeName); xml.append("\" />"); }else{ xml.append("<result column=\""); xml.append(columnName); xml.append("\" property=\""); String propertyName = dealName(columnName); xml.append(propertyName); xml.append("\" jdbcType=\""); xml.append(columnTypeName); xml.append("\" />"); } } }catch (Exception e){ e.printStackTrace(); } xml.append(LINE); xml.append(TAB); xml.append("</resultMap>"); xml.append(LINE); xml.append(TAB); xml.append("<sql id=\"base_column_list\" >"); xml.append(LINE); xml.append(TAB); xml.append(TAB); for(int i=0,size=columeList.size();i<size;i++){ xml.append(columeList.get(i)); if(i!=(size-1)){ xml.append(","); } } xml.append(LINE); xml.append(TAB); xml.append("</sql>"); xml.append(LINE); xml.append("</mapper>"); // String rootPath = this.getClass().getClassLoader().getResource("").getPath(); // String endPath = rootPath + "\\" + (packages.replace("/", "\\")).replace(".", "\\"); buildXmlFile(rootPath + "/" + entityName + ".xml", xml.toString()); } //生成xml文件 public void buildXmlFile(String filePath, String fileContent) { try { File file = new File(filePath); FileOutputStream osw = new FileOutputStream(file); PrintWriter pw = new PrintWriter(osw); pw.println(fileContent); pw.close(); } catch (Exception e) { System.out.println("生成xml文件出错:" + e.getMessage()); } } // 转换表名为实体名 public String convertTableToEntity(String tableName){ tableName = tableName.substring(0, 1).toUpperCase() + tableName.subSequence(1, tableName.length()); String entityName = dealLine(tableName); return entityName; } private String dealLine(String tableName) { // 处理下划线情况,把下划线后一位的字母变大写; tableName = dealName(tableName); return tableName; } //下划线后一位字母大写 private String dealName(String columnName) { if (columnName.contains("_")) { StringBuffer names = new StringBuffer(); String arrayName[] = columnName.split("_"); names.append(arrayName[0]); for (int i = 1; i < arrayName.length; i++) { String arri = arrayName[i]; String tmp = arri.substring(0, 1).toUpperCase() + arri.substring(1, arri.length()); names.append(tmp); } columnName = names.toString(); } return columnName; } }
题外话:写这个程序耗费了2个左右小时时间,表面上看上去不如手动创建文件的速度快,但长远看来,节省了未来做这些工作的时间,也是提高了生产力,就像节能灯一次投入较大,从长远来看价值却大一样。
相关推荐
本工具“Oracle/MySQL生成mybatis文件工具”旨在为开发者提供便利,自动根据数据库中的表结构生成相应的MyBatis映射文件(Mapper XML)以及实体类(Entity Java),从而提高开发效率,减少手动编写SQL和Java代码的...
MyBatis的SqlMapConfig.xml文件可以引用我们生成的实体类,从而将数据库操作与业务逻辑解耦。这样,当数据库表结构发生变化时,只需要更新实体类,而无需修改大量手动编写的代码,降低了维护成本。 实体类的生成...
总结来说,“mybatis的Mapping接口和配置文件自动生成”工具是MyBatis开发中的得力助手,它将数据库表结构转化为Java代码,减少了手动编写工作,提高了开发效率。对于大型项目或频繁迭代的系统,使用这样的自动化...
在Java开发中,将实体类(Entity Class)映射到数据库表是一种常见的做法,这通常涉及到ORM(Object-Relational Mapping)技术。ORM允许我们用面向对象的方式处理数据库操作,而无需编写大量的SQL语句。Java中的...
MyBatis 代码生成器是一个强大的辅助工具,它可以分析数据库表结构,并根据表信息自动生成与之对应的Java类和XML映射文件。这些类和文件包括: - **DAO(Data Access Object)层**:包含了与数据库交互的方法,如增...
MyBatis数据库操作代码自动生成器是一款非常实用的开发工具,专为简化MyBatis框架下的数据库交互代码编写而设计。这款工具通过自动化的方式,帮助开发者快速生成与数据库交互的各种Java代码,包括DAO(Data Access ...
总的来说,这个项目提供了一个便捷的工具,可以帮助开发者快速生成MyBatis的XML配置文件和Java实体类,从而简化了数据库与Java应用之间的数据交互。对于熟悉Java和MyBatis的开发者来说,这个工具可以大大提高他们的...
Mybatis-Generator是一款强大的工具,它能够帮助Java开发者自动生成Mybatis的DAO层、Model层以及对应的XML映射文件,极大地提高了开发效率,减少了手动编写这些基础代码的时间。这款工具的特点在于,它并不依赖于...
Mybatis Generator是一款强大的工具,它能够自动化生成Mybatis框架所需的实体类、Mapper接口与XML映射文件,大大减轻了开发人员的手动编码工作,提高了开发效率。本篇将详细介绍generator的使用及其背后的原理。 ...
- **Mapping文件**:XML格式的文件,定义了SQL查询、插入、更新和删除语句,与Model类对应,MyBatis框架会根据这些文件执行数据库操作。 - **DAO接口**:定义了对数据库进行CRUD(创建、读取、更新、删除)操作的...
当根据数据库自动生成Java代码时,这些实体类会自动映射数据库表的字段,通常使用ORM(Object-Relational Mapping)框架如Hibernate或MyBatis来实现。ORM框架简化了数据访问层的开发,使得Java对象可以直接操作...
一旦配置完成,运行这个工具,它会分析指定的数据库表,生成对应的Java源代码文件,这些文件包含了表示数据库表的实体类,以及可能的getter和setter方法、构造函数等。 生成的Java类通常包含以下元素: 1. 数据库...
在MyBatis的配置文件中定义数据库连接和表映射,然后运行生成器,即可得到对应的Java源代码。 除了ORM框架,还有一些独立的代码生成工具,如Apache的`DBUtils`项目中的`codegen`模块,或者第三方的插件如`Alt+Shift...
总结来说,Mybatis-Generator是一个强大的工具,能够帮助开发者快速生成Mybatis项目的Entity、DAO和Mapping文件,减少重复工作,提高开发效率。通过合理的配置和定制,可以适应不同的项目需求,是Java开发中不可或缺...
MybatisGenerator是一款强大的工具,它能够自动生成Mybatis框架所需的Dao层、Model层以及Mapper映射文件,极大地提高了开发效率,避免了手动编写这些重复性工作。通过使用此工具,开发者可以专注于业务逻辑的实现,...
首先,Mybatis是一个流行的Java持久层框架,它提供了一种灵活的方式来将SQL语句与Java代码绑定,而Mapping文件是Mybatis中非常关键的部分,它定义了数据库表字段与Java对象属性之间的映射关系,以及SQL查询语句。...
Mybatis-Generator是一款强大的自动化工具,它可以帮助Java开发者自动生成Mybatis的DAO层、Model层以及Mapper XML映射文件,极大地提高了开发效率。这个压缩包文件"**MybatisGenerator**"提供了一个预先配置好的环境...
MyBatis是一个流行的持久层框架,提供了逆向工程功能,可以根据数据库表结构自动生成实体类、DAO接口和Mapping映射文件。本文档将详细介绍MyBatis逆向工程的配置和使用方法。 一、MyBatis逆向工程概述 MyBatis逆向...
Mybatis-Generator是一款强大的自动化工具,它可以帮助Java开发者自动生成Mybatis的相关代码,包括DAO(Data Access Object)、Model以及Mapper XML映射文件。这极大地提高了开发效率,避免了手动编写这些重复性工作...