Hibernate是一个ORM(对象关系映射)框架,它研究的是如何以面向对象的方式来操纵数据库,其底层实现是JDBC。但使用它我们可以极大地简化了对数据库的操作(CRUD),这里所体现的映射主要是java中类结构与数据库中表结构中的映射、类结构中的属性成员与数据库中字段的映射以及继承映射、关联映射等。但本文要讲的是,其中的一些基本配置,以及如何让Hibernate运行起来。
在这里我使用的是hibernate-release-5.1.13.Final版本,首先要加载依赖资源,这点在使用任何框架都一样,具体资源文件可从Hibernate官网下载,这里就不再多说了。
其次我们就要引入hibernate.cfg.xml配置文件,这个文件是放在classpath下
文件内容如下:
<?xml version='1.0' encoding='utf-8'?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/userdb</property>
<property name="connection.username">root</property>
<property name="connection.password">******</property>
<mapping resource="com/ev/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
connection.driver_class
用于加载数据库驱动,
connection.url
为数据库地址
connection.username
数据库中设置好的用户名
connection.password
数据库密码
mapping
这个元素引用了javabean的配置信息。
这里的javabean结构以用户登陆注册例子为依据确定,如下:
package com.ev.bean;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后要对这个bean进行映射的配置。配置内容在User.hbm.xml配置文件中,在本例中这个文件与相关的bean放在同一目录下
User.hbm.xml内容:
<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.ev.bean.User" table="USERTABLE" lazy="true">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="username"/>
<property name="password"/>
</class>
</hibernate-mapping>
class元素的name属性值对应要配置的javabean的类型,table属性值对应数据库中的表。
这里的记录id生成方式为native即根据数据库自身情况来生成,property元素就是映射了类结构中的成员属性和数据库的字段,name值为成员属性的名称,还有个column属性,这个属性对应数据库中的字段名称,这个是在类结构中的数据成员名称与数据库的字段名称不一致时才需要指定,否则不需要指定。
做好配置后我们就可以写一个方法获得数据库连接了,在Hibernate中数据库连接都是一个session,方法如下:
package com.ev.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class SessionUtil {
public Session getSession(){
Configuration cf = new Configuration();
cf.configure();
SessionFactory sf = cf.buildSessionFactory();
return sf.openSession();
}
}
数据库获得后,我们就可以写一个方法操纵数据库了,本例中仍以DAO设计模式来实现向数据库中插入一条记录。
DAO接口:
package com.ev.dao;
import com.ev.bean.User;
public interface UserDao {
public void save(User user);
}
它的实现类为:
package com.ev.daoimp;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.ev.bean.User;
import com.ev.dao.UserDao;
import com.ev.util.SessionUtil;
public class UserImp implements UserDao{
@Override
public void save(User user) {
SessionUtil su = new SessionUtil();
Session session = su.getSession();
Transaction tr = session.beginTransaction();
try{
session.save(user);
tr.commit();
}catch(Exception e){
tr.rollback();
e.printStackTrace();
}
session.close();
}
public static void main(String[] arg){
UserImp user = new UserImp();
user.save(new User("YKG","uygyug7g6t576e"));
}
}
这里的main方法是用于方便测试用的。
我们运行这个程序后,就可以向数据库中插入一条记录了。