HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
下面通过在myeclipse中新建java web项目来完成第一个Hibernate 项目,因为在myeclipse中增加了对Hibernate 支持,所以可以很快速的构建一个Hibernate项目,这个项目完成如下功能,用户通过jsp提交注册信息,包括姓名,年龄和地址。
首先任意新建一个java web项目,例如新建HibernateTest,之后完成java web项目的各种配置。
然后选中我们新建的项目,点击myeclipse 进行如图的选择
然后出现如下对话框,我们需要hibernate的包放入到web项目的lib文件夹中,然后点击next
这一步我们在src目录新建了一个hibernate.cfg.xml文件,这是hibernate中最为重要的配置文件,其中包含了与数据库相连接的基本信息,之后继续点击下一步
这一步中可以完成对数据库的相关配置,但是在这里我们先不写,等会可以直接操作hibernate.cfg.xml文件来配置数据,所以不要勾选specify database connection details,点击下一步
在这一步我们同样不要勾选create sessionFactory class ,我们会在后面来创建这个类,点击Finish完成。到这里基本的项目设置就算完成了,下面我们来其他的配置
Hibernate既然是要与数据库打交道,那么就需要告诉Hibernate与其交互的数据库的基本信息,打开src目录下面的hibernat.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="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<mapping resource="User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
相信的其中代码的意思大家都能够明白,其中show_sql表示在每次调用hibernate的api的时候,如果有sql语句的生成,那么就在控制台打印出sql语句,dialect属性表示采用Hibernate中对哪个数据的优化方式来优化数据库,这里使用的是mysql,那么就采用了org.hibernate.dialect.MySQLDialect。
然后在src目录下新建一个com.value.bean包,在其中新建一个javabean User,在Hibernate中这个javabean被称为持久化对象。User代码如下
public class User {
private String name;
private String address;
private int age;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后再src目录下,新建一个xml文件,名称为User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!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.hibernatetest.domain.User" table="users">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="address" column="address" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
通过这个文件,我们就是实现了pojo(持久化对象)与数据库中的表的对应关系,class 标签name属性表示对应的java类,table表示对应的数据表, property标签的name 都是java类的属性,需要注意区别大小写,column表示表中的列,type即为数据的类型。
其中有个id属性,这个属性用来标识java类与表中的每一条记录的唯一对应关系,其子标签generator可以在博客中查看详细的解释。
准备工作都做好了,现在就需要来真正的操作数据库了,Hibernate操作数据库表,是通过Session来完成的,那么session的实例又是通过sessionFactory来完成的,那么现在我们就需要创建一个sessionFactory。
新建一个HibernateSessionFacotry类,代码如下
package com.hibernatetest.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static SessionFactory factory ;
static
{
factory = new Configuration().configure().buildSessionFactory();
}
public static Session openSession()
{
Session session = factory.openSession();
return session;
}
public static void closeSession(Session session)
{
if(session != null)
{
session.close();
}
}
}
在静态代码块里面我们构建了一个Configuration对象,调用了configure方法这个方法返回了一个Configuration对象,这个对象其中就包含了我们在hibernate.cfg.xml配置的各种数据的信息,然后将Configuration对象绑定到了SesssionFactory上(调用了buildSessionFactory方法),这样就获取了与我们定义数据库相关的sessionfactory对象,通过这个对象可以获取session来完成数据的操作。
下面是UserDao的代码
public class UserDao {
private Session session;
public UserDao(Session session)
{
this.session = session;
}
public void saveUser(User user)
{
Transaction tx = session.beginTransaction();
try
{
tx.begin();
session.save(user);
tx.commit();
}
catch(Exception ex)
{
tx.rollback();
}
finally
{
session.close();
}
}
需要注意的事情是,在使用session的时候,一定要将事务打开,否则无法完成数据的操作。
下面是用来做测试的Servlet代码
public class addServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.valueOf(request.getParameter("id"));
String username = request.getParameter("username");
int age = Integer.valueOf(request.getParameter("age"));
String address = request.getParameter("address");
User user = new User();
user.setId(id);
user.setAddress(address);
user.setName(username);
user.setAge(age);
Session session = HibernateSessionFactory.openSession();
UserDao dao = new UserDao(session);
dao.saveUser(user);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
这样我们就完成第一个Hibernate的项目
文章系原创,转载请注明