【Struts2+Hibernate4】按照MVC思想使用Hibernate查询数据库,并

本文将介绍Struts2与Hibernate的整合,两东西的整合并不需要用到Spring,完全可以各司其职,Struts2完成Java文件与Jsp页面交互,Hibernate完成数据库到Java文件的交互。

一、基本目标

还是那张在Mysql中已经用烂的Testtable表。

在index.jsp点击查询之后,能够把这张表的所有内容输出出来。而且表格是梅花间竹的不同颜色。当然这个例子已经很多书籍上说过了。

目录结构如下,严格按照MVC思想。

二、基本准备

1、这里就不再多说了,在Eclipse for Javaee新建一个Web工程之后,把Struts2必备的包,具体可以参考《【Struts2】Struts2纯手工安装、配置以及Helloworld,以最新版struts 2.3.20 GA做例子》(点击打开链接)与Hibernate必要的包,具体可以参考《【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查》(点击打开链接)放到WEB-INF文件夹下的lib目录。最后lib文件夹如下图:

2、之后在web.xml只需要配好Struts2就可以了,Hibernate是一个Java插件来的,有包就可以用了。无须配置,具体如下:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=""xmlns=""xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><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></web-app>

三、制作过程

1、首先先写好持久层M吧。在src根目录下的hibernate.cfg.xml与《【Hibernate】Hibernate的层次划分,Hibernate4.3的初始化的新写法》(点击打开链接)唯一的区别就是最后一行指明Test表的映射Java是test.model.TestTable.java。而不是根目录下的TestTable.java:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN"""><hibernate-configuration><session-factory><!–所用的数据库驱动 –><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!–所用的数据库登陆密码 –><property name="hibernate.connection.password">root</property><!–所用的数据库名称为test,根据实际更改 –><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property><!–所用的数据库用户名 –><property name="hibernate.connection.username">root</property><!–所用的数据库方言,与所用数据库驱动一样,可以在网上查到,这里是mysql –><property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property><property name="hibernate.format_sql">true</property><!–如果是update表明Hibernate将保留原来的数据记录,插入时把新记录添加到已有的表,–><!–如果是create,则总是创建新的表,如果原来数据库已有的这个表,则这个表的记录会被全部清洗 –><property name="hibernate.hbm2ddl.auto">update</property><!–罗列Testtable表与Java文件的映射,这里就Testtable.java的一张表,所以就写一个Testtable.java –><mapping class="test.model.Testtable" /></session-factory></hibernate-configuration>

至于TestTable.java则一字未改,TestTable还是那个TestTable.java,只是因为这里是在Web工程的test.model包中,所以打头多了一个包名。

package test.model;import javax.persistence.*;@Entity@Table(name = "testtable")public class Testtable {private int id;private String username;private String number;// 表示主键与自动生成项@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}@Column(name = "username")public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}@Column(name = "number")public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}@Overridepublic String toString() {return id + "," + username + "," + number;}}2、同样一直未改的还有数据库服务类dbDAO.java,数据库服务完全通过hql语句操作,以后要搞直接使用本类中的方法就可以了。再也不用管Hibernate中奇奇怪怪的执行事务的Session初始化问题,不用再也一堆语句,就为了初始化那个Session。

package test.model;import org.hibernate.*;import org.hibernate.cfg.*;import org.hibernate.service.*;import org.hibernate.boot.registry.*;public class dbDAO {private Session session;// 构造函数,初始化Session,相当于连接数据库public dbDAO() {//这里使用了Hibernate4.3.8的写法,这里Hibernate又把初始化的方法修改了,非常蛋疼Configuration cfg = new Configuration().configure();ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);this.session = sessionFactory.openSession();}// 执行查询public Query query(String hql){return session.createQuery(hql);}// 执行插入、修改public void save(Object object){Transaction transaction=session.beginTransaction();session.save(object);transaction.commit(); }// 执行删除public void delete(Object object){Transaction transaction=session.beginTransaction(); session.delete(object);transaction.commit(); }// 析构函数,中断Session,相当于中断数据库的连接protected void finalize() throws Exception {if (session.isConnected() || session != null) {session.close();}}}3、之后再来写C层。首先在src新建并配置好Struts.xml,指明query这个Action的执行方法是test.action.query.java

泪,一种痛苦的雨滴,不知从什么时候开始已在我的世界下个不停。

【Struts2+Hibernate4】按照MVC思想使用Hibernate查询数据库,并

相关文章:

你感兴趣的文章:

标签云: