Struts2
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值进行登陆判断。