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>