Hibernate + jbosstools 整合、配置、测试详解
PS:文中用的都是Eclipse配置中对应的英文提示,防止配置时找不到入口。
文章相对比较早,有一些工具没有,或者版本不对,请给我留言,看到后会逐一回复。
一、前置条件
1.Eclipse 4.4.2
下载地址:Eclipse官网 download.eclipse.org/eclipse/dow…
2.hibernate-release-4.3.11.Final
下载地址:Hibernate官网 hibernate.org/orm/
3.jbosstools-4.2.3.Final_2015-03-26_23-05-30-B264-updatesite-hibernatetools
下载地址:jbosstools官网 tools.jboss.org/downloads/j…
4.mysql 5.6
下载地址:mysql官网 www.mysql.com/
5.common-logging.jar Hibernate内部记录日志jar包
下载地址:common-logging.jar download.csdn.net/detail/mimi…
6.mysql-connector-java-5.1.7
下载地址:mysql-connector-java-5.1.7.zip
7.Navicat for mysql 10.1.7 企业版
下载地址:暂不提供,网上搜索即可,最好是破解版的,方便操作,其他的mysql数据库操作客户端亦可,根据个人喜好。
二、安装
1.Eclipse 4.4.2直接解压即可。
2.解压安装包文件。
可先将hibernate-release-4.3.11.Final解压至Eclipse 4.4.2的plugins目录,为后面导入库做准备。
3.打开Eclipse的软件安装界面,如下所示(按照提示进行安装):
三、使用Hibernate操作mysql数据库表结构
1.创建测试数据库test(略)。
2.创建测试表结构user/news,暂不需要插入任何数据(略)。
3.新建Java project工程,如下所示:
4.新建User Libraries
5.给Java project添加User Libraries,如下所示:
6.创建Hibernate配置文件,使用默认hibernate.cfg.xml
最终我将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-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- <property name="hibernate.connection.datasource">java:comp/env/jdbc/dstest</property> --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property> <property name="hibernate.connection.username">[你登录mysql数据库的用户名]</property> <property name="hibernate.connection.password">[你登录mysql数据库的密码]</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.c3p0.max_size">200</property> <property name="hibernate.c3p0.min_size">2</property> <property name="hibernate.c3p0.timeout">1800</property> <property name="hibernate.c3p0.max_statements">50</property> <mapping resource="db/dao/News.hbm.xml"></mapping> <mapping resource="db/dao/User.hbm.xml"></mapping> </session-factory> </hibernate-configuration>复制代码
7.配置Hibernate configuration
8.新建Hibernate 逆向POJO实体类的反向配置文件
9.新建Hibernate Configuration properties添加当前工程的Console Configuration文件
1) 找到显示Hibernate Configuration视图的选项
2) 输入关键字选择Hibernate Configuration视图
![输入关键字选择Hibernate Configuration视图] (img.blog.csdn.net/20150824173…)
3) 显示Hibernate Configuration视图
![显示Hibernate Configuration视图]
4) Hibernate Configuration properties添加当前工程的Console Configuration文件
5) 新建成功的反向工程配置文件
10.新增需要反向的工程
1) 选择刚才的反向配置文件的configuration properties文件
2) 添加需要反向的表结构
3) 填写反向表结构的信息
11.生成反向类文件(如果类文件提示错误,请查看包名是否有错)
注:如果工具栏里没有显示这个按钮,可以 window -> Customize Perspective,切换到Command Groups Availablity标签页,把Hibernate Code Generation给勾选上
1) 设置Hibernate code Generation Configurations配置信息->Main
2) 设置Hibernate code Generation Configurations配置信息->Exporters
3) 设置Hibernate code Generation Configurations配置信息->Refresh
4) 生成的类文件
12.生成映射文件
1) 生成映射文件
2) 点击下一步
3) 下一步
4) 已经生成映射配置文件User.hbm.xml
package db.dao; // default package // Generated 2015-8-24 18:39:26 by Hibernate Tools 4.3.1 /** * User generated by hbm2java */ public class User implements java.io.Serializable { private Integer id; private String name; public User() { } public User(String name) { this.name = name; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }复制代码
添加如下代码,完成POJO的对应关系
@Entity @Table(name="user") public class User implements java.io.Serializable { @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.IDENTITY) ......(以下代码略去) }复制代码
5) 生成的User.hbm.xml配置文件源码
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2015-8-24 18:49:15 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="db.dao.User" table="USER"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="assigned" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> </class> </hibernate-mapping>复制代码
13.添加类映射配置文件User.hbm.xml
五、测试POJO类
1.新建User.java(POJO)的测试文件
2.编写User.java(POJO)的测试文件
package db.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class UserMgr { public static void main(String[] args) { // Configuation实例代表了应用程序到SQL数据库的配置信息 // 加载默认的hibernate.cfg.xml文件,若设置config()中的参数,则表示加载其他的配置文件 Configuration conf = new Configuration().configure(); @SuppressWarnings("deprecation") ServiceRegistry serviceReg = new ServiceRegistryBuilder() .applySettings(conf.getProperties()).buildServiceRegistry(); // 以Configuration实例创建不可变SessionFactory实例 SessionFactory sessionFac = conf.buildSessionFactory(serviceReg); // 创建Session Session session = sessionFac.openSession(); // 开始事务 Transaction trans = session.beginTransaction(); // 创建消息对象 User user = new User(); user.setName("测试用户名1"); // 保存信息 session.save(user); // 提交事务 trans.commit(); // 关闭session session.close(); sessionFac.close(); } }复制代码
3.依据Eclipse开启调试即可。
4.查看数据库是否已经插入对应的数据。
六、常见问题
1.Error parsing JNDI name []
请配置JNDI配置信息(如果没有配置则删除hibernate.cfg.xml中的name=""属性)
2.映射文件/资源找不到
在hibernate.cfg.xml中添加如下对应的属性,这里是指配置文件的相对路径。
3.ids for this class must be manually assigned before calling save(): db.dao.User
如果id字段在UserMgr.hbm.xml文件中被设置为assigned同时在数据库又是自增字段时,可以尝试手动通过setter设置字段值。
4.数据写入成功后为??????的解决方案
在hibernate.cfg.xml文件中添加如下配置: ?useUnicode=true&characterEncoding=UTF-8
5.hibernate.cfg.xml中c3p0的常规配置
<property name="hibernate.c3p0.timeout">1800</property> <property name="hibernate.c3p0.max_size">30</property> <property name="hibernate.c3p0.min_size">1</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property>
作者:CodeCaptain
链接:https://juejin.cn/post/7031713660825403422