我们在搭建完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

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

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

    即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...

  2. 【百度地图API】如何制作“从这里出发”“到这里去”——公交篇

    原文:[百度地图API]如何制作"从这里出发""到这里去"--公交篇 摘要: 百度地图首页上的“从这里出发”“到这里去”,一直是开发者们很热衷的一个功能.那么, ...

  3. 【百度地图API】如何制作多途经点的线路导航——驾车篇

    原文:[百度地图API]如何制作多途经点的线路导航--驾车篇 摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ----- ...

  4. scrapy爬虫框架调用百度地图api数据存入数据库

    scrapy安装配置不在本文 提及, 1.在开始爬取之前,必须创建一个新的Scrapy项目.进入自定义的项目目录中,运行下列命令 scrapy startproject mySpider 其中, my ...

  5. 【百度地图API】怎样制作多途经点的线路导航——驾车篇

    摘要: 休假结束,酸奶小妹要从重庆驾车去北京.但是途中要去西安奶奶家拿牛奶饼干呢! 用百度地图API,能不能帮我实现这个愿望呢? ----------------------------------- ...

  6. vue框架导入百度地图API接口的方法

    百度请求API接口:

  7. Android应用中使用百度地图API定位自己的位置(二)

    官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发人员们提供了例如以下类型的地图覆盖物: ...

  8. [百度地图] 用于类似 DWZ UI 框架的 百度地图 功能封装类 [MultiZMap.js] 实例源码

    MultiZMap 功能说明 MultiZMap.js 本类方法功能大多使用 prototype 原型 实现,它是 ZMap 的多加载版本,主要用于类似 DWZ 这个 多标签的 UI 的框架: 包含的 ...

  9. 深入浅出百度地图API开发系列(2):创建地图

    上一篇文章里,先介绍了一下百度地图API开发所涉及到的一些基础概念,包括投影,坐标系等基础概念,再有了这些基础后,我们可以开始开发自己的web地图了.先来个代码示例(建议大家都是用百度地图API大众版 ...

随机推荐

  1. 4052: [Cerc2013]Magical GCD

    4052: [Cerc2013]Magical GCD Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 70[Submit][ ...

  2. 修改mysql方法

    我已验证: 方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('n ...

  3. AOP执行增强-Spring 源码系列(5)

    AOP增强实现-Spring 源码系列(5) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostProc ...

  4. 获取 metadata 的完整例子 - 每天5分钟玩转 OpenStack(166)

    我们将通过实验详细分析 instance 从 nova-api-metadata 获取信息的完整过程. 环境介绍 1. 一个 all-in-one 环境(多节点类似). 2. 已创建 neutron ...

  5. HDFS入门(1)

    2015.07.12笔记 1.HDFS Distributed File System(操作系统实现人机交互,最重要的功能是文件管理,使用文件管理系统,windows.Linux文件管理系统有共性:用 ...

  6. WebService从服务端到客户端的用例

    1.首先编写Wsdl(基于契约优先的方式),要注意的是命名空间(若是使用include或import)最好使用一致的,代码如下: <?xml version="1.0" en ...

  7. 在NAS设备上用NFS服务为RAC数据库和集群件存储oracle文件时的mount选项

    今天在家折腾自己的小实验室,把自己NAS上的一个目录用NFS挂载到一套11g RAC的实验环境中. 当我在备份数据库到NAS上时,发现一个奇怪的问题,同样的目录下,默认backup 备份集的情况,备份 ...

  8. HTML 部分常用属性、组成属性|...超链接、路径、锚点、列表、滚动、URL编码、表格、表单、GET和POST

    URL地址 就是我们所说的网址:www.jd.com 浏览器内核,渲染引擎 Ie内核:triteent 谷歌/欧鹏:blink 火狐:gecko 苹果:webkit 渲染引擎是出现兼容性的根本问题 - ...

  9. Java位向量的实现原理与巧妙应用

    Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...

  10. HackerRank The Chosen One [预处理][gcd]

    题解:tags:[预处理][gcd]故事背景:光头钻进了茫茫人海.这是一个典型の通过前缀后缀和来降低复杂度的问题.先用pre数组与suf数组分别维护前缀gcd和后缀gcd.如果 a[i] % gcd( ...