2、hibernate关键API

来源:互联网 发布:德州理工大学 知乎 编辑:程序博客网 时间:2024/05/18 00:24
在Java应用中使用Hibernate的步骤

- 创建Hibernate的配置文件
- 创建持久化类
- 创建对象——关系映射文件
- 通过Hibernate API编写访问数据库的代码

有两种配置文件:Hibernate配置文件,主配置文件,一个;对象——关系映射文件

配置MyEclipse使用struts和Hibernate

1、手工配置MyEclipse使用Hibernate

下载Hibernate包:hibernate-distribution-3.6.10.Final-dist.zip

2、在MyEclipse中创建Web project,增加struts支持,将struts涉及的包拷贝到新建web项目的WEB-INF\lib下,包括:commons-fileupload-1.2.2.jar、commons-io-2.0.1.jar、commons-lang3-3.1.jar、commons-logging-1.1.1.jar、dom4j-1.6.1.jar、javassist-3.11.0.GA.jar、struts2-core-2.3.14.jar、xwork-core-2.3.14.jar

因为是增加struts,所以要对web.xml进行配置,将struts的filter加进去:

<filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
 
  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>

Hibernate与Web无关,所以只要配置Struts就行了。

然后在src目录下新建struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="hibernate" extends="struts-default"></package></struts>


至此,struts的集成完成了

3、hibernate的集成

(1)点击Web项目,在MyEclipse中点击MyEclipse——Project capabilities——add hibernate capabilities,在这个界面中,将JAR Library Installation选为Copy checked libraryJars to project folder and add to build-path项,其他不动点击next

(2)进入hibernate配置文件创建配置页面,如果存在hibernate配置文件,选择Existing,否则选择New,这里选New,然后next

(3)数据库连接细节配置,因为要手工配置,这里将勾选项去掉,然后next

(4)session工厂创建,因为要手工配置,这里将勾选项去掉,然后finish

这时在src目录下创建了hibernate.cfg.xml文件(hibernate主配置文件):

<?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"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>    <session-factory>        </session-factory></hibernate-configuration>


主配置文件的一个作用就是配置数据库连接的信息

 hibernate.cfg.xml的配置:

<session-factory>        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>    <property name="connection.username">root</property>    <property name="connection.password">qwerty123</property>    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>        <property name="show_sql">true</property>    </session-factory>


连接数据库需要数据库的url,即connection.url,需要登录的用户名和密码,需要数据库的驱动类,再就是数据库的方言,即dialect,最后的show_sql指出在执行hibernate查询时是否显示对应的sql语句。

4、创建持久化类

持久化类符合JavaBean的规范,包含一些属性,以及与之对应的get和set方法
持久化类有一个id属性,用来惟一标识Person类的每一个对象。在面向对象术语中,这个id属性被称为对象标示符(OID)
hibernate要求持久化类必须提供一个不带参数的默认构造方法

import java.sql.Date;public class Person{private Integer id;private String username;private String password;private Integer age;private Date registerDate;public Integer getId(){return id;}public void setId(Integer 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;}public Integer getAge(){return age;}public void setAge(Integer age){this.age = age;}public Date getRegisterDate(){return registerDate;}public void setRegisterDate(Date registerDate){this.registerDate = registerDate;}}


在mysql中创建hibernate数据库,然后创建表person,

/* Formatted on 2013/08/27 09:38 (QP5 v5.50) */CREATE TABLE `person` (  `id` int(11) NOT NULL,  `username` varchar(20) NOT NULL,  `password` varchar(20) NOT NULL,  `age` int(11) NOT NULL,  `registerDate` date NOT NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;5、创建前端注册页面:
<body>    <form action="savePerson.action">    username:<input type="text" name=username" size="20"/><br/>    password:<input type="password" name="password" size="20"/><br/>    age:<input type="text" name="age" size="20"/><br/>        <input type="submit" value="submit"/>    </form>  </body>


6、创建action,因为注册页面涉及到提交action了

import com.cdtax.model.Person;import com.cdtax.service.PersonService;import com.cdtax.service.impl.PersonServiceImpl;import com.opensymphony.xwork2.ActionSupport;public class PersonAction extends ActionSupport{private String username;private String password;private int age;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;}public int getAge(){return age;}public void setAge(int age){this.age = age;}public String savePerson() throws Exception{Person person = new Person();person.setUsername(username);person.setPassword(password);person.setAge(age);java.sql.Date registerDate = new java.sql.Date(new java.util.Date().getTime());person.setRegisterDate(registerDate);PersonService personService = new PersonServiceImpl();personService.savePerson(person);return SUCCESS;}}


然后配置struts.xml

<struts><package name="hibernate" extends="struts-default"><action name="savePerson" class="com.cdtax.action.PersonAction" method="savePerson"></action></package></struts>


对于一个应用,前端页面调用action,action调用service层,service层调用dao层,这里action调用PersonService,对于上层,下层只提供接口,所以定义一个接口,定义一个实现:

public interface PersonService{public void savePerson(Person person);}


 

import com.cdtax.dao.PersonDAO;import com.cdtax.dao.impl.PersonDAOImpl;import com.cdtax.model.Person;import com.cdtax.service.PersonService;public class PersonServiceImpl implements PersonService{public void savePerson(Person person){PersonDAO personDAO = new PersonDAOImpl();personDAO.savePerson(person);}}


service层调用DAO层,一样使用接口和实现

public interface PersonDAO{public void savePerson(Person person);}


 

import org.hibernate.Session;import org.hibernate.Transaction;import com.cdtax.dao.PersonDAO;import com.cdtax.model.Person;import com.cdtax.util.HibernateUtil;public class PersonDAOImpl implements PersonDAO{public void savePerson(Person person){Session session = HibernateUtil.openSession();Transaction tx = session.beginTransaction();try{session.save(person);tx.commit();}catch(Exception ex){if(null != tx){tx.rollback();}ex.printStackTrace();}finally{HibernateUtil.close(session);}}}


DAOImpl具体实现数据的增删改查操作,这里又定义了一个工具类HibernateUtil:

import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil{private static SessionFactory sessionFactory;static{try{sessionFactory = new Configuration().configure().buildSessionFactory();}catch(Exception ex){ex.printStackTrace();}}public static Session openSession(){Session session = sessionFactory.openSession();return session;}public static void close(Session session){if(null !=session){session.close();}}}


用于session的管理。

7、然后就要配置对象——关系映射,就是类与表的对应

在src下创建配置文件,文件的命名规则是:类名+.hbm.xml,这里是对Person类和person表进行对应,建立Person.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.cdtax.model.Person" table="person"><id name="id" column="id" type="int"><generator class="increment"></generator></id><property name="username" column="username" type="string"></property><property name="password" column="password" type="string"></property><property name="age" column="age" type="int"></property><property name="registerDate" column="registerDate" type="date"></property></class></hibernate-mapping>


在后,要在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"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>    <session-factory>        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>    <property name="connection.username">root</property>    <property name="connection.password">qwerty123</property>    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>        <property name="show_sql">true</property>        <mapping resource="Person.hbm.xml" />        </session-factory></hibernate-configuration>


8、映射关系表

对象——关系映射表,以<hibernate-mapping>为根元素,然后是若干class子元素,class子元素用来描述对象与哪个表对应以及对象属性与表中的哪列对应

<class name="com.cdtax.model.Person" table="person">说明Person对象与表person对应,将来数据保存在person表中;
<id name="id" column="id" type="int"><generator class="increment"></generator></id>用来指出对象的OID以及表的主键列名对应关系及类型
<property name="username" column="username" type="string"></property>
<property name="password" column="password" type="string"></property>
<property name="age" column="age" type="int"></property>
<property name="registerDate" column="registerDate" type="date"></property>用来指出其他对象属性与表字段的对应关系及类型,name是对象的属性,column是表的字段

9、运行程序,在注册页面填入信息然后点击submit,在myeclipse执行窗口出现:

Hibernate: select max(id) from person
Hibernate: insert into person (username, password, age, registerDate, id) values (?, ?, ?, ?, ?)

数据插入到了person表中。

10、重要的API:

SessionFactory 、 Configuration、Session等。 

 

原创粉丝点击