一,Hibernate框架介绍  

  没有Hibernate之前,使用jdbc来连接数据库时,需要反射加载驱动,再获取连接

  在连接上获取sql承载块,传入sql语句执行,获取结果集,解析结果

  Hibernate框架,核心对象就是使用连接字串获取的session,自动完成对象关系映射,不需要手动来解析对象

二,程序实例

1.新建web项目,导入框架包

2.编写  User.java

package com.zhaolong.bean;

import java.sql.Date;

public class User {

    private Integer id;
private String name;
private String gender;
private String age;
private Date birthday;
private String phone;
private String address;
private String card;
private String email;
private String wechat;
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
} public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getWechat() {
return wechat;
}
public void setWechat(String wechat) {
this.wechat = wechat;
} public User(String name, String gender, String age, Date birthday,
String phone, String address, String card, String email,
String wechat) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.birthday = birthday;
this.phone = phone;
this.address = address;
this.card = card;
this.email = email;
this.wechat = wechat;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", gender=" + gender
+ ", age=" + age + ", birthday=" + birthday + ", phone="
+ phone + ", address=" + address + ", card=" + card
+ ", email=" + email + ", wechat=" + wechat + "]";
} }

3.编写实体类的映射文件  User.hbm.xml

<?xml version="1.0"?>
<!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.zhaolong.bean.User" table="HUQB_USER">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="gender"/>
<property name="age"/>
<property name="birthday"/>
<property name="phone"/>
<property name="address"/>
<property name="card"/>
<property name="email"/>
<property name="wechat"/>
</class> <!-- 创建命名查询 --> <query name="findAllUsers">
<![CDATA[
from User
]]>
</query> <!-- 查询年龄大于30的所有人 -->
<query name="findUsersByAge">
<![CDATA[
from User u where u.age>:age
]]>
</query> <!-- 本地命名查询 -->
<sql-query name="findAllUsersLocal">
<!-- 通过return 标签指定返回结果的映射 -->
<return class="com.zhaolong.bean.User"/>
<![CDATA[
select * from huqb_user
]]>
</sql-query> </hibernate-mapping>

4.编写连接字串配置文件  hibernate.cfg.xml

<?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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<!--<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">java</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
-->
<!-- 配置方言 -->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- 配置连接地址 -->
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<!-- 配置用户名 -->
<property name="connection.username">mart</property>
<!-- 配置密码 -->
<property name="connection.password">java</property>
<!-- 配置驱动 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="show_sql">true</property>
<!-- 对sql语句进行格式化 -->
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/zhaolong/bean/User.hbm.xml"/>
</session-factory> </hibernate-configuration>

5.根据cfg文件获取操作数据库的session,可以自己编写,也可以选择自动生成  HibernateSessionFactory

package com.zhaolong.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration; /**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class HibernateSessionFactory { /**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static org.hibernate.SessionFactory sessionFactory; private static Configuration configuration = new Configuration();
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static String configFile = CONFIG_FILE_LOCATION; static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
} /**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
} return session;
} /**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
} /**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null); if (session != null) {
session.close();
}
} /**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
} /**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
} }

6.编写数据测试类  AddTest

package com.zhaolong.test;

import java.sql.Date;

import org.hibernate.Session;
import org.hibernate.Transaction; import com.zhaolong.bean.User;
import com.zhaolong.util.HibernateSessionFactory; public class AddTest { public static void main(String[] args) { Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); User u1=new User("诸葛亮", "男", "35",
new Date(System.currentTimeMillis())
, "110", "蜀国", "1234567890", "zgl@huqb.com", "zhugeliang01");
User u2=new User("黄月英", "女", "33",
new Date(System.currentTimeMillis()+100000000)
, "119", "蜀国", "0987654321", "hyy@huqb.com", "huangyueying01"); User u3=new User("曹丕", "男", "45",
new Date(System.currentTimeMillis())
, "120", "魏国", "1234567890", "cp@huqb.com", "caopi");
User u4=new User("甄姬", "女", "33",
new Date(System.currentTimeMillis()+100000000)
, "114", "魏国", "0987654321", "zj@huqb.com", "zhenji01");
User u5=new User("荀彧", "男", "45",
new Date(System.currentTimeMillis())
, "120", "魏国", "1234567890", "cp@huqb.com", "caopi");
User u6=new User("曹操", "男", "33",
new Date(System.currentTimeMillis()+100000000)
, "114", "魏国", "0987654321", "zj@huqb.com", "zhenji01"); session.save(u1);
session.save(u2);
session.save(u3);
session.save(u4);
session.save(u5);
session.save(u6);
tx.commit(); session.close(); }
}

Hibernate框架用法的更多相关文章

  1. 1.Hibernate框架核心组件 (转自冯岩)

    Hibernate框架核心组件 在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件.首先最关键一 ...

  2. 粗浅看Struts2和Hibernate框架

    ----------------------------------------------------------------------------------------------[版权申明: ...

  3. Hibernate框架_搭建第一个Hibernate框架

    一.eclipse搭建 A.创建动态web项目 New-->Dynamic web project(web project) B.导入jar包 1.数据库驱动包 2.hibernate开发必须j ...

  4. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  5. Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)

    引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...

  6. 2.0、Hibernate框架的简单搭建

    一.Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句 ...

  7. 【Hibernate框架】对象的三种持久化状态

    一.综述 hibernate中的对象有三种状态,分别是TransientObjects(瞬时对象).PersistentObjects(持久化对象)和DetachedObjects(托管对象也叫做离线 ...

  8. hibernate框架int和Integer类型区别

    hibernate 框架在定义实体时,int类型最好定义为Inttger类型,因为在注入时int是值类型不允许为空.

  9. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

随机推荐

  1. yarn logs -applicationId [applicationID]

    yarn logs -applicationId application_1435648583743_0001 报错: tmp/logs/.../application_1435648583743_0 ...

  2. PyCharm创建虚拟环境 和 TVTK库的安装

    注:示例系统环境:Windows10 64位 + Anaconda3: 昨天安装TVTK库遇到些麻烦,当时随便将库下到个文件夹安装后(没找到VENV文件夹...), 进行测试:from tvtk.to ...

  3. 【[SHOI2007]园丁的烦恼】

    \(CDQ\) 分治的神奇操作 这个问题跟偏序问题好像差的不小啊 但是就是可以转化过去 对于一个查询我们可以把它拆成四个,也就是用二维前缀和的方式来查询 我们发现其实前缀和的定义就是多少个点的横纵坐标 ...

  4. Golang测试包

    Golang测试包 golang自带了测试包(testing),直接可以进行单元测试.性能分析.输出结果验证等.简单看着官方文档试了试,总结一下: 目录结构和命令 使用golang的测试包,需要遵循简 ...

  5. .Net Sokcet 异步编程

    一.概述 使用Socket 进行实时通讯,如果使用APM,只需要一个Socket类即可.如果使用EAP,则还需要一个SocketAsyncEventArgs类.本文以EAP的方式展开讨论. Socke ...

  6. SOE 部署错误 ClassFactory cannot supply requested class问题及解决方案

    一.问题描述 虽然SOE开发已经老早出来了(ArcGIS 10.1 不再支持DCOM开发,所以以往的基于AO+WebService需要转变思路),不过由于跟工作关联性不是很大,一直未系统学习过.网上下 ...

  7. 移动端h5列表页上拉加载更多

    背景 上星期公司要求做一个回收书籍的h5给安卓用,里面有一个功能是回收记录列表.设计师那边出的稿子是没有要求分页或者是上拉刷新的,但是众所周知,列表页数据很多的情况下,h5加载是很慢的.所以我一开始是 ...

  8. AutoMapper 帮助类

    AutoMapper帮助类 /// <summary> /// AutoMapper帮助类 /// </summary> public static class AutoMap ...

  9. goldengate简单配置

    goldendate配置单项同步 源数据库    extract抽取进程 trail文件 复制进程 目标进程 由于最开始配置goldengate的时候,没有弄清除原理,导致出错了都不知道怎么解决. 最 ...

  10. Python 基础 模块

    python 中模块和保定 概念 如果将代码分才投入多个py 文件,好处: 同一个变量名也互不影响.   python 模块导入 要使用一个模块,我们必须先导入该模块.python 使用import ...