前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之二 基础Hibernate框架搭建篇

javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之二 基础Hibernate框架搭建篇

作者头像
ShenduCC
发布2018-04-27 11:58:41
6240
发布2018-04-27 11:58:41
举报
文章被收录于专栏:算法修养算法修养算法修养

   我们在搭建完Struts框架之后,从前台想后端传送数据就显得非常简单了。Struts的功能不仅仅是一个拦截器,这只是它的核心功能,此外我们也可以自定义拦截器,和通过注解的方式来更加的简化代码。

  接下来就开始Hibernate的框架的开发。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库(摘自百度百科)。我们只需要知道Hibernate是对数据库操作的封装。

  那么搭建Hibernate 首先要下载哪些包嘞?我把这些包列举出来,在后的项目里,你可以去下载。

  将这些包放到项目的lib文件夹下,下一步,我就开始创建Hibernate.cfg.xml

  Hibernate.cfg.xml 是Hibernate的配置文件,和struts.xml意思有点像。在Hibernate.cfg.xml里面我们会配置数据库的信息,连接数据库的配置,以及数据库中的表。

  首先在src目录下新建一个xml文件,在里面声明

<?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.cfg.xml 文件是这样的

<?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>
    <!-- 数据库连接驱动 -->
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <!-- Oracle数据库连接的url -->
    <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property>
    <!-- 用户名 -->
    <property name="connection.username">root</property>
    <!-- 密码 -->
    <property name="connection.password">root</property>
    <!-- 数据库语言 -->
    <property name="dialect">org.hibernate.dialect.OracleDialect</property>
    <!-- 根据映射文件自动创建表(第一次创建,以后是修改) -->
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">update</property>
    <!-- 配置映射文件 -->
    <mapping resource="com/entity/Users.hbm.xml"/>
    
</session-factory>
</hibernate-configuration>

  每个属性都标了注释。首先 数据库连接驱动的包,我们需要导进去。我这里用的是ojdbc14_11g.jar。把它放到lib文件夹下。

  接下来我们可以看到,配置映射文件里,所以在建完Hibernate.cfg.xml之后,我们需要建实体类。

  新建包com.entity并在里面新建类Users

package com.entity;

public class Users {
    

    private String Name;
    private String Pwd;
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }
    public String getPwd() {
        return Pwd;
    }
    public void setPwd(String pwd) {
        Pwd = pwd;
    }
    
    public Users(){}
    
    public Users(String Name,String Pwd)
    {
        this.Name=Name;
        this.Pwd=Pwd;
    }

}

  然后我们建立相应的映射文件,步骤如下

  1.右键Users.java 新建 xml(Basic xxx)

  2.

  3.取好名字后

  4

5 点next->finish就好了。

在映射文件里面,我们需要添加如下的代码,让映射文件和数据库形成映射

<?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.entity.Users" table="Users">
             <id name="Name">
                 <generator class="native"/>
             </id>
             <property name="Pwd" length="15"/>
             
                                   
     </class>

</hibernate-mapping>

  这里class 是实体类的意思,table是映射到数据库中的表 

  后面的id是主键,property 是属性。<generator class="native"/> 的意思是   由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

  当然我们也可以在Oracle数据库中定义序列和触发器,在这里<generator class="identity">序列名称</generator>

  实体类建完之后,我们还要建一个SessionFactory

  首先:Session 接口是Hibernate 中的核心接口,持久化对象的生命周期,事务的管理和持久化对象的查询,更新和删除都是通过Session完成的。Hibernate 在操作数据库之前,必须先取的Session对象。

  而Hibernate 的SessionFacroty 接口负责初始化Hibernate ,充当数据储存源的代理,并负责创建Session对象,因此要创建一个Session必须要构建一个SessionFactory 实例

  在src目录下创建com.commom包,并在包中创建HibernateSessionFactory 类,在类中读取Hibernate.cfg.xml文件

package com.huizhi.common;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
    //指定要读取配置文件路径
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    //实例化ThreadLocal类
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    //实例化Configuration类
    private  static Configuration configuration = new Configuration();  
    //声明SessionFactory接口
    private static SessionFactory sessionFactory;
    //定义configFile变量并赋值
    private static String configFile = CONFIG_FILE_LOCATION;

    static {
        try {
            //读取默认的配置文件hibernate.cfg.xml
            configuration.configure(configFile);
            //实例化SessionFactory
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private HibernateSessionFactory() { }//创建无参的HibernateSessionFactory构造函数
    //获取Session
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        //判断是否已经存在Session对象
        if (session == null || !session.isOpen()) {
            //如果SessionFactory对象为null,则创建SessionFactory
            if (sessionFactory == null) {
                rebuildSessionFactory();//调用rebuildSessionFactory方法创建SessionFactory
            }
            //判断SessionFactory对象是否为null,如果不是,则打开Session
            session = (sessionFactory != null) ? sessionFactory.openSession()
                    : null;
            threadLocal.set(session);
        }

        return session;
    }
    //创建SessionFactory
    public static void rebuildSessionFactory() {
        try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //关闭Session
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
            session.close();
        }
    }
    //SessionFactory对象的getXXX()方法
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    //configFile属性的setXXX()方法
    public static void setConfigFile(String configFile) {
        HibernateSessionFactory.configFile = configFile;
        sessionFactory = null;
    }
    //configFile属性的getXXX()方法
    public static Configuration getConfiguration() {
        return configuration;
    }
    
}

   上述代码,在HibernateSessionFactory 中通过Configuration 接口读取配置文件Hibernate.cfg.xml,生成SessionFactory 工厂,通过工程获取Session,并将Session放到线程中,定义了Session的获取和关闭的方法,getSession() 和closeSession()。当然也不一定非要这样写,这样写也是封装了Session的获取和关闭。

这里的Session和Severlt中的Session是不一样的、

  接下来我们编写数据库操作Dao类。

  在src目录下新建com.dao包,在里面创建ManageUser类

package com.dao;

import java.util.List;

import com.common.HibernateSessionFactory;

import org.apache.struts2.ServletActionContext;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.entity.*;


public class ManageUser {
    
    //SessionFactory类
    private HibernateSessionFactory sessionFactory;
    

    
    //登录验证
    public boolean CheckLogin(String Name,String Pwd){
        
        boolean flag=false;
        Session session=sessionFactory.getSession();
        String hql = "from Users as u where u.Name = '" +Name+ "' and u.Pwd = '"+Pwd+"'";
        List<Users> users = session.createQuery(hql).list();
        //transaction.commit();
        if(users.size()>0){
            flag = true;
        }
        session.close();                    
        return flag;
    }
    

}

  这里Hibernate 用的查询语句是hql ,hql是Hibernate 整合sql 的自己的数据库操作语句。上面的是查询。

  删除语句:

delete from Executives e where e.ExecutiveID='"+ExecutivesID+"'";

  增加语句:

  直接用session.save(Users);

  更改直接用Session.update(Users);

  的确很方便。

  接下来在action类中 

package com.action;
import com.opensymphony.xwork2.ActionSupport;
import com.common.*;
import com.entity.*;
import com.dao.*;

public class loginAction extends ActionSupport{
    
    private String name;
    private String pwd;
    
    //Dao类
    private ManageUser manageUser;
    private String result;
    
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    
    
    public String execute(){
        
    
        System.out.println(name+" "+pwd);
        manageUser=new ManageUser();
        if(manageUser.CheckLogin(name, pwd)==true){
            result = "{\"login\":\"success\"}";  
            return SUCCESS;
        }
        else{
            result = "{\"login\":\"fail\"}";  
            return INPUT;    
        }
                
    }

}

  这就将Struts和Hibernate 都搭建好了。

 代码可以在这里下载,

 也可以在我的GitHub上下载

https://github.com/SilentCC/SSHTest

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档