java 根据实体类创建映射文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Set;

import com.mohe.model.entity.Teach;

/**
 * 根据实体类生成映射文件
 *
 * @author dxm
 *
 */
public class ObjectToMapping {

	/**
	 * 将实体类转换为映射文件
	 *
	 * @param cls
	 *            实体类
	 * @param file
	 *            映射文件存放的根目录
	 * @param id
	 *            主键字段名
	 * @param identity
	 *            主键是否为自动表示列
	 * @return
	 * @throws IOException
	 */
	public static boolean convert(Class cls, File file, String id, boolean identity) throws IOException {

		if (null == cls || file == null) {
			return false;
		}

		if (!file.exists()) {
			file.mkdirs();
		}

		file = new File(file.getAbsolutePath() + "\\" + cls.getSimpleName() + ".hbm.xml");
		if (file.exists()) {
			file.delete();
		}

		String str = "";

		FileOutputStream fs = new FileOutputStream(file);
		fs.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".getBytes("UTF-8"));
		fs.write("<!DOCTYPE hibernate-mapping PUBLIC\n".getBytes("UTF-8"));
		fs.write("\"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n".getBytes("UTF-8"));
		fs.write("\"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n".getBytes("UTF-8"));

		str = "<hibernate-mapping package=\"" + cls.getPackage().getName() + "\">\n";
		fs.write(str.getBytes("UTF-8"));

		str = "\t<class name=\"" + cls.getSimpleName() + "\" table=\"t_" + cls.getSimpleName().toLowerCase() + "\">\n\n";
		fs.write(str.getBytes("UTF-8"));
		fs.write("\t\t<cache usage=\"read-write\" />\n\n".getBytes("UTF-8"));

		Field[] fls = cls.getDeclaredFields();
		Field[] sfls = cls.getSuperclass().getDeclaredFields();

		// 加载父类
		for (Field f : sfls) {

			if (f.getName().equals("o00000") || f.getName().equals("serialVersionUID")) {
				continue;
			}

			if (f.getName().equals(id)) {
				str = "\t\t<id name=\"" + id + "\" type=\"" + f.getType().getName() + "\">\n";
				fs.write(str.getBytes("UTF-8"));

				str = "\t\t\t<column name=\"" + id + "\" />\n";
				fs.write(str.getBytes("UTF-8"));

				if (identity) {
					fs.write("\t\t\t<generator class=\"identity\"></generator>\n".getBytes("UTF-8"));
				}

				fs.write("\t\t</id>\n\n".getBytes("UTF-8"));
				continue;
			}

			str = "\t\t<property name=\"" + f.getName() + "\" type=\"" + f.getType().getName() + "\">\n";
			fs.write(str.getBytes("UTF-8"));

			str = "\t\t\t<column name=\"" + f.getName() + "\" />\n";
			fs.write(str.getBytes("UTF-8"));
			fs.write("\t\t</property>\n\n".getBytes("UTF-8"));
		}

		// 加载当前类
		for (Field f : fls) {

			// 过滤特殊属性
			if (f.getName().equals("serialVersionUID")) {
				continue;
			}

			// 主键
			if (f.getName().equals(id)) {
				str = "\t\t<id name=\"" + id + "\" type=\"" + f.getType().getName() + "\">\n";
				fs.write(str.getBytes("UTF-8"));

				str = "\t\t\t<column name=\"" + id + "\" />\n";
				fs.write(str.getBytes("UTF-8"));

				if (identity) {
					fs.write("\t\t\t<generator class=\"identity\"></generator>\n".getBytes("UTF-8"));
				}

				fs.write("\t\t</id>\n\n".getBytes("UTF-8"));
				continue;
			}

			// 多对一的关系
			if (f.getType().getClassLoader() != null) {
				// str = "\t\t<many-to-one name=\"" + f.getName() +
				// "\" class=\"" + f.getType().getSimpleName() + "\" column=\""
				// + f.getName() + "\"></many-to-one>\n\n";
				// fs.write(str.getBytes("UTF-8"));
				continue;
			}

			// 一对多的关系
			if (f.getType().isAssignableFrom(List.class) || f.getType().isAssignableFrom(Set.class)) {
				// fs.write("<set name=\""+f.getName()+"\">".getBytes("UTF-8"));
				// fs.write("<key column=\"俩表中的外键字段\"></key>".getBytes("UTF-8"));
				// fs.write("<one-to-many class=\"A表所在的包名+A表的名\"></one-to-many>".getBytes("UTF-8"));
				// fs.write("</set>".getBytes("UTF-8"));
				continue;
			}

			str = "\t\t<property name=\"" + f.getName() + "\" type=\"" + f.getType().getName() + "\">\n";
			fs.write(str.getBytes("UTF-8"));

			str = "\t\t\t<column name=\"" + f.getName() + "\" />\n";
			fs.write(str.getBytes("UTF-8"));
			fs.write("\t\t</property>\n\n".getBytes("UTF-8"));
		}

		fs.write("\t</class>\n".getBytes("UTF-8"));
		fs.write("</hibernate-mapping>".getBytes("UTF-8"));
		return false;
	}

	public static void main(String[] args) throws IOException {
		ObjectToMapping.convert(Teach.class, new File("E:\\金山快盘\\工作\\eclipse-j2ee\\WebTest\\src\\com\\mohe\\model\\mapping1\\"), "timeKey", true);
	}
}

时间: 2024-08-06 13:51:54

java 根据实体类创建映射文件的相关文章

Mybatis配置文件和实体类的映射文件,以及dao层的书写

mybatis-config.xml,配置文件,用于连接数据库.底层使用的是oracle数据库的emp表 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd&

通过MyEclipse生成实体类及映射文件

1.在工程上添加hibernate支持,导入相关包,修改配置文件为如下: hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate

SQLserver数据库反编译生成Hibernate实体类和映射文件

一.建立项目和sqlserver数据库 eclipse,我使用的版本是neon3 二.Data Source Explorer 选择OK 在data source Explorer的Database Connections 选择New 填写好General的连接信息 新建New Driver Definition 填写完选择OK 选择刚才的Drivers Test Connetion测试 Next然后Finsh 就这样,成功连接了刚才的hibernatedb那个数据库 三.配置Hibernate

generator自动生成mybatis实体类和配制文件

在学习MyBatis的过程中,发现mybatis确实是非常好用的的框架,但是,手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件.这样可以省去很多的功夫,将生成的代码copy到项目工程中即可.当然了,eclipse上也有类似的插件,不过我选择generator是因为其方便,只需要下载一个jar包就好,下面就来说一下构建过程吧: 我的目录结构如下: 首先:我们需要下载generator的jar包下载地址:http://pan.baidu.com

快速创建和mysql表对应的java domain实体类

今天创建了一个表有十几个字段,创建完之后必然要写一个与之对应的java domain实体类.这不是重复的工作吗?为什么不先把这个表的所有的字段查出来,然后放到linux环境下,用sed工具在每一行的前面加上"private String ",每一行的后面添加";".这样可以节省很多重复工作.下面上sql代码和sed命令. 查询一个mysql表所有列的列名的sql代码如下: SELECT COLUMN_NAME FROM information_schema.COLU

使用MyEclipse反向工程快速创建持久化类、映射文件和Hibernate组件

在MyEclipse中创建连接模板 一.选中此项 二.右键新建一个连接模板 三.进入此页面依次选择数据库.Driver name 为这个连接模板的名字.点击Add JARs选择驱动类(在oracle下的安装目录下的ojdbc6.jar).在Save password可选 (是否保存密码)然后点Next 四.选择数据库模式,点Add,选择SCOTT模式,Finsh. 创建Hibernate配置文件一.选择项目 二.如果没有对应的版本.去掉所有的√,点Next 三.如果存在xml文件选择Existi

利用mybatis-generator自动生成表实例类和映射文件

我们经常用到mybatis来进行程序代码级别对数据库的操作,然而需要编写大量的表实例类与映射文件,现在使用工具mybatis-generator就可实现上述文件的自动生成,下面简要介绍一下其使用方法. 1.创建工程 为了下载jar包比较方便,本人创建一个名为mybatis的maven工程来应用mybatis-generator. 2.修改pom.xml文件,下载依赖的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" x

hibernate之实体类型到映射文件

1.通过写hibernate的映射文件,将实体类型转换成数据库中的表 其中那个映射文件是根据实体类型而写的. 实体类型User.java package cn.wwh.www.hibernate.dd.property; import java.util.Arrays; import java.util.Date; /** *类的作用: * * *@author 一叶扁舟 *@version 1.0 *@创建时间: 2014-8-17 下午08:05:30 */ public class Use

MyBatis逆向工程,自动生成dao、实体类、mapper文件

利用mybatis generator 自动生成生成dao.实体类.mapper文件这里介绍两种方法:1.独立的文件夹的方式,脱离开发工具2.基于开发工具的方式(Eclipse)1.独立的文件夹的方式,脱离开发工具基本步骤:(方法有多种,这里的方法是脱离项目工程,利用命令行建立文件.后续可以按需复制进工程) 1.下载相应工具 2.依据相应数据库导入相应数据库连接jar包 3.编写generatorConfig.xml文件 4.命令行模式,进入lib文件夹 5.输入:java -jar mybat