Hibernate代码生成插件(eclipse)

阅读对象:
有一些hibernate使用经验的开发人员;
介绍:
在开发程序的时候,后台DAO基本的操作方法编写起来是繁琐冗余的工作。这里介绍一个Hibernate代码生成工具"HibernateSynchronizer"它是一个eclipse插件,主要功能就是帮助我们生成hbm、entity、dao代码。使用代码生成工具的好处是:提高开发效率、代码规范性更强、免除手工编写出现的手误BUG。
环境:
HibernateSynchronizer-3.1.9(下载见附件)
eclipse Indigo Service Release 2
maven3
插件安装:
将附件中的HibernateSynchronizer-3.1.9.zip下载解压(下载见附件);然后将plugins下的com.hudson.hibernatesynchronizer_3.1.9目录copy到${eclipse_home}\dropins目录下;重启eclipse成功后,点击window->prefrences输入hibernate,看到该插件表示安装成功。
使用方法:
1、准备操作
确保已经创建了数据库和表。
2、创建hibernate配置文件
在指定的目录上右键:new->hibernate->hibernate Configuration file,弹出的对话框将让你填写你的jdbc驱动、URL、username、password等属性。
3、生成hibernate映射文件
在指定的目录上右键:new->hibernate->hibernate mapping file,弹出的对话框将让你填写你的jdbc驱动、URL、username、password等属性。输入完成后在tables右边点击refresh按钮(你也可以通过表名称过了如USER_%,表示以USER_开头的所有表),勾上相应表然后点击finish就会在指定目录创建hbm文件,同时还会询问你java代码存放目录指定一个即可。
4、生成DAO代码
在你创建的hbm文件中找到<meta attribute="sync-DAO">true</meta>默认是false改成true保存,就会生成DAO代码。如下图:


测试代码:
Configuration cfg = new Configuration();
		SessionFactory sf = cfg.configure().buildSessionFactory();

		Session session = sf.openSession();
                //自动生成的DAO类
		DamApplicationInfoDAO dao = new DamApplicationInfoDAO(session);
		List<DamApplicationInfo> list = dao.findAll();
		System.out.println("size===========>"+list.size());
		if(session.isOpen()){
			System.out.println("关闭sesion");
			session.close();
		}else{
			System.out.println("sesion已经关闭");
		}
		sf.close();

结果:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
size===========>0
sesion已经关闭
错误调试:
1、默认生成的hbm文件把表主键也生成为property,如果不修改就会报错:
引用

Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML
at org.hibernate.util.xml.MappingReader.readMappingDocument(MappingReader.java:101)
at org.hibernate.cfg.Configuration.add(Configuration.java:513)
at org.hibernate.cfg.Configuration.add(Configuration.java:509)
at org.hibernate.cfg.Configuration.add(Configuration.java:716)
at org.hibernate.cfg.Configuration.addResource(Configuration.java:801)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2344)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2310)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2290)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2243)
at org.hibernate.cfg.Configuration.configure(Configuration.java:2158)
at org.hibernate.cfg.Configuration.configure(Configuration.java:2137)
at org.qhy.test.Test.main(Test.java:16)
Caused by: org.xml.sax.SAXParseException: The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,fetch-profile*,resultset*,(query|sql-query)*)".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2017)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:901)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2939)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.hibernate.util.xml.MappingReader.readMappingDocument(MappingReader.java:75)
... 11 more


这个错误的修改办法是将表主键的property标签改为id。

猜你喜欢

转载自qihuiyong6.iteye.com/blog/2059598