整合struts2+hibernate详细配置步骤及注意事项

刚刚学完这两个框架,就迫不及待的做了一个例子,在整合两个框架的时候,也碰到了一些小问题,下面介绍一下配置的步骤:

1.创建一个自定义的struts2和hibernate的类库

  因为之前写例子都是直接将jar包拖到WEB-INF下的lib包下,但是这里需要导入两个框架的jar包,放在一起的话,会很乱,所以最好是创建自定义的类库:

    1.window->Preferecces->Java->BuildPath->UserLibraries->new.

      

      以struts2的类库为例,输入struts2-core,点击ok.选中该文件,点击Add External JARs..,找到struts2的核心jar包,全部放进来.完成后点击ok.

      

  hibernate的jar包,步骤同上.

2.导入struts和hibernate的jar包.

  新建一个Web project,选中当前工程,右键选择最下方的Propertie->Java buildPath->Libraries->Add Libraries->User Libraries.

          

找到你之前建好的类库,导入即可.

 

3.配置web.xml.

  在web.xml中添加struts2的核心过滤器:

复制代码
  <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>
复制代码

4.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="default" namespace="/" extends="struts-default"> 

</package> </struts>
复制代码

5.src目录下创建并配置hibernate.cfg.xml:

复制代码
<!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> <!-- 配置数据库连接信息 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///hibernate</property> <property name="connection.username">root</property> <property name="connection.password">123</property> <!-- 配置数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <!-- 使用getCurrentSession方式打开会话 --> <property name="hibernate.current_session_context_class">thread</property> </session-factory> </hibernate-configuration>
复制代码

到这里,环境已经配置好了,接下来就可以享受框架带来的便利了

 

 

下面关于hibernate的介绍也比较相信,对于初入门的同学很有帮助。

 

 

Hibernate介绍

 

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 

 

官网  http://hibernate.org/ 

 

以下为其原理和基本的结构示意图

 

 

 

 

一步一步简单讲述其基本应用

 

1、创建java项目,添加hibernate引用

 

下载地址:

 

https://sourceforge.net/projects/hibernate/files/hibernate-orm/

 

下载的完整版本,直接在lib/required中的jar包导入

 

 

 

 

2、导入数据库连接器

 

我使用的是Mysql数据库,大家可以在以下下载,然后导入连接器

 

http://dev.mysql.com/downloads/connector/j/

 

 

 

3、创建数据表

 

create table students(
    id int primary key not null, name nvarchar(50), age int )

 

 

 

4、创建实体类

 

建议实体类符合JavaBean标准,字段、get、set方法,还有默认构造函数。

 

复制代码
package yank.hibernate.sample;

/**
 * 学生信息
 * @author yank * */ public class Student { private Integer id; private String name; private Integer age; /** * 无参构造函数 */ public Student(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
复制代码

 

 

 

5、配置实体与表的映射关系

 

非持久化的属性,不要在这里声明。这里的type并非java的类型或者sql的类型,而是hibernate定义的映射类型,如果未设置,hibernate会自动给一合适的类型。

 

最好安装hibernate的eclipse插件,可能更方便点

 

http://marketplace.eclipse.org/content/hibernate-tools-helios

 

复制代码
<?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 package="yank.hibernate.sample"> <class name="Student" table="students"> <id name="id" column="id"> <generator class="increment" /> <!-- 标识符生成策略 --> </id> <property name="name" type="string" column="name" /> <property name="age" type="int" column="age" /> </class> </hibernate-mapping> 
复制代码

 

这里的类型,应该是Hibernate-Types,这样可以实现JAVA类型与数据库类型的转换。如果没有找到匹配类型,Hibernate会自动判定给一合适类型。

 

注意:使用最后一列(Registry Key)的值即可。

 

 

 

 

6、创建hibernate的配置文件

 

这里就需要配置hibernate如何访问数据库,包括连接驱动,连接地址、用户名、密码,连接池大小等。并且在这里将配置映射文件

 

文件创建在srv根目录下。

 

复制代码
<?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="myeclipse.connection.profile">mysql</property> <property name="connection.url"> jdbc:mysql://localhost:3306/test </property> <property name="connection.username">root</property> <property name="connection.password">admin</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <!-- 映射资源 --> <mapping resource="yank/hibernate/sample/student.hbm.xml" /> </session-factory> </hibernate-configuration>
复制代码

 

SessionFactory- 一个关联于特定数据库全局性的工厂(factory)。如果你要使用多个数据库,通常应该在多个配置文件中使用多个<session-factory>进行配置

 

7、从配置文件加载SessionFactory

 

复制代码
package yank.hibernate.sample;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; /** * hibernate工具类 * @author yank * */ public class HibernateUtils { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
复制代码

 

8、基本功能测试,简单的CRUD可以实现了

 

复制代码
package yank.hibernate.sample;

import java.util.List;

import org.hibernate.SQLQuery; import org.hibernate.Session; public class StudentManager { public static void main(String[] args){ //新增 StudentManager stuMgr = new StudentManager(); stuMgr.createStudent("LiLei", 20); //查询 Student student = stuMgr.findById(1); //编辑,保存 student.setAge(21); stuMgr.update(student); //查询所有 Student last = null; List stuList = stuMgr.findList(); for(Object item : stuList){ System.out.println(((Student)item).getName()); last = (Student)item; } //删除  stuMgr.delete(last); } /** * 新增 * @param id * @param name * @param age */ public void createStudent(String name,Integer age){ Student student = new Student(); student.setName(name); student.setAge(age); this.save(student); } /** * 保存 * @param student */ public void save(Student student){ Session session = HibernateUtils.getSessionFactory().openSession(); session.beginTransaction(); session.save(student); session.getTransaction().commit(); session.close(); } /** * 更新 * @param student */ public void update(Student student){ Session session = HibernateUtils.getSessionFactory().openSession(); session.beginTransaction(); session.update(student); session.getTransaction().commit(); session.close(); } /** * 根据id查询 * @param stuId * @return */ public Student findById(Integer stuId){ Session session = HibernateUtils.getSessionFactory().openSession(); Student student = session.get(Student.class, stuId); session.close(); return student; } /** * 查询集合 */ public List findList(){ Session session = HibernateUtils.getSessionFactory().openSession(); SQLQuery qry = session.createSQLQuery(" select * from Students").addEntity(Student.class); List list = qry.list(); session.close(); return list; } /** * 删除 * @param 学生对象 */ public void delete(Student student){ Session session = HibernateUtils.getSessionFactory().openSession(); session.beginTransaction(); session.delete(student); session.getTransaction().commit(); session.close(); } }
复制代码

 

 

 

9、其他:

 

查询List时报异常

 

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to yank.hibernate.sample.Student

 

代码如下:

 

复制代码
    /**
     * 查询集合
     */
    public List findList(){        
        Session session = HibernateUtils.getSessionFactory().openSession(); SQLQuery qry = session.createSQLQuery(" select * from Students"); List list = qry.list(); session.close(); return list; }
复制代码

 

原因:

 

查询出来的对象不能自动转为JavaBean对象 

 

解决方案:

 

利用addEntity,增加类型映射。

 

复制代码
    /**
     * 查询集合
     */
    public List findList(){        
        Session session = HibernateUtils.getSessionFactory().openSession(); SQLQuery qry = session.createSQLQuery(" select * from Students").addEntity(Student.class); List list = qry.list(); session.close(); return list; }
复制代码

 

  

 

JPA:

 

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

 

Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

 

JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

 

Hibernate是在版本3.2后遵循JPA标准的。

 

转载于:https://www.cnblogs.com/xiadongqing/p/5278875.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值