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的项目
文章系原创,转载请注明