Java Web:Struts2+Hibernate

Struts2

Struts2框架Link

Struts2框架已经在上面这篇博文中讲述
而Struts2+Hibernate,实际上是Sturts2中的Action类调用Hibernate框架提供的数据库操纵接口,来完成数据库的使用。

Hibernate

什么是Hibernate

  • Hibernate是一种持久化技术
    简单的说就是把数据存储到介质中去,我们能再次使用它。

  • Hibernate封装了JDBC
    学过Java Web的同学都应该知道Java直接操纵数据库的方式,是通过JDBC提供的执行SQL语句的接口,这相当于我们直接在命令行下使用数据库),也就是JDBC进阶版。它提供了更好的接口取代JDBC的接口。

  • Hibernate是ORM框架,即对象/关系映射
    关系,即原生的关系数据库,比如说我们在数据库中有个User表,表里有username+password这两列,name和passwd,每次我们使用这个表都要和数据库连接,执行SQL语句,返回结果。而Hibernate把它对象化了,每次我们使用这个表,只需要使用相应的对象,并使用提供的接口去完成操作,而不必去理会其他的细节

实例:接着Struts2的登陆设计

流程:
- 前期准备:导入核心Jar包到lib文件夹,连接数据库所需要的参数
- 1.Hibernate配置文件,配置连接数据库所需要的参数
- 2.Hibernate映射文件,把对象数据库表联系起来
- 3.调用Hibernater API完成数据库操作

1.配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!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>
    <!-- 数据库连接URL、用户名、密码、驱动程序、数据库方言 -->
    <property name="connection.url">jdbc:mysql://localhost:3306/user</property>
    <property name="connection.username">root</property>
    <property name="connection.password">412563</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- 由类和映射文件自动生成数据库表 -->
    <property name="hbm2ddl.auto">update</property>
    <!-- 显示运行过程中执行的SQL语句,console控制台下可见 -->
    <property name="show_sql">true</property>
    <!-- 映射文件的位置 -->
    <mapping resource="com/pojo/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

2.映射文件

2.1对象
package com.pojo;
//同Struts2一样实现get、set的方法,这里多了个ID作为主键
public class User {
private int id;
private String user;
private String password;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getUser() {return user;}
public void setUser(String user) {this.user = user;}
public String getPassword() {return password;}
public void setPassword(String password) {this.password = password;}
}
2.2映射
<?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">
<!-- 对象的类所在包名即User的包的位置 -->
<hibernate-mapping package="com.pojo">
<!-- 持久化对象的名字,表名,数据库名 -->
<class name="User" table="user" catalog="user">
    <!-- 类中定义的属性作为主键 -->
    <id name="id" type="int">
        <column name="id"></column>
        <generator class="native"></generator>
    </id>
    <!-- 类中定义的属性 -->
    <property name="user" type="string">
        <column name="user"></column>
    </property>
    <!-- 类中定义的属性 -->
    <property name="password" type="string">
        <column name="password"></column>
    </property>
</class>
</hibernate-mapping>

3.创建操作类使用Hibernater API

package com.dao;
//导入PO(数据库映射的持久化对象)对象
import com.pojo.User;
//Hibernate使用的层次结构,由下到上
  //先启动基础配置,创建Configuration对象,并生成SessionFactory对象
  import org.hibernate.cfg.Configuration;
  //通过Configuration对象生成会话工厂,SessionFactory产生会话实例
  import org.hibernate.SessionFactory;
  //Session接口已经又基本的方法来对PO进行操作了,比如get、set、update、delete
  import org.hibernate.Session;
  //在Session接口的基础上,我们还可以使用Query接口进行查询,使用Transaction对事务(JDBC事务、JTA等)进行管理
  import org.hibernate.Query;import org.hibernate.Transaction;
//接受Query返回的list类型
import java.util.List;

public class UserDAO {
//创建find方法,接收Action类传过来的对象,并对数据库进行查询,返回查询结果
public boolean find(User user){
    //Hibernate初始化,并生成SessionFactory对象
    Configuration cfg=new Configuration();
    cfg.configure();
    //创建SeesionFactory,形成工厂模式
    SessionFactory sessionFactory=cfg.buildSessionFactory();
    //创建会话对象
    Session session=null;
    //创建事务对象
    Transaction tx=null;
    //使用try、catch、finally来完成一次查询会话的历程
    try{
        //开启会话
        session=sessionFactory.openSession();
        //开启事务
        tx=session.beginTransaction();
        //使用Query接口进行查询,使用HQL语言
        String hql = "from User where user = ? and password=?";
        //借助Session创建Query对象来执行查询
        Query query = session.createQuery(hql);
        //赋与查询值
        query.setParameter(0, user.getUser());
        query.setParameter(1, user.getPassword());
        //list()方法返回List类型的查询结果
        List list = query.list();
        //判断查询结果的有无来确认登陆成功与否
        if(list.size()>0){
            return true;
        }
        else{
            return false;
        }   
    }catch(Exception e){
        //事务撤销
        if(tx!=null)
        tx.rollback();
        throw e;
    }finally{
        //会话关闭
        if(session!=null){
            session.close();
        }
    }           
}
}

最后修改Struts2的Action类

先导入PO对象以及UserDAO到login中,再新建一个PO对象接受登陆页面传来的user和password使用set方法,最后创建UserDAO对象,使用find方法传送带验证数据PO对象,返回boolean值进行登陆判断。

你可能感兴趣的:(java,Hibernate,Web,struts2.0)