一,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.Hibernate框架核心组件 (转自冯岩)
Hibernate框架核心组件 在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件.首先最关键一 ...
-
粗浅看Struts2和Hibernate框架
----------------------------------------------------------------------------------------------[版权申明: ...
-
Hibernate框架_搭建第一个Hibernate框架
一.eclipse搭建 A.创建动态web项目 New-->Dynamic web project(web project) B.导入jar包 1.数据库驱动包 2.hibernate开发必须j ...
-
Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)
写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...
-
Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)
引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...
-
2.0、Hibernate框架的简单搭建
一.Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句 ...
-
【Hibernate框架】对象的三种持久化状态
一.综述 hibernate中的对象有三种状态,分别是TransientObjects(瞬时对象).PersistentObjects(持久化对象)和DetachedObjects(托管对象也叫做离线 ...
-
hibernate框架int和Integer类型区别
hibernate 框架在定义实体时,int类型最好定义为Inttger类型,因为在注入时int是值类型不允许为空.
-
SSH(Struts2+Spring+Hibernate)框架搭建流程<;注解的方式创建Bean>;
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
随机推荐
-
HTML特殊转义字符列表
HTML特殊转义字符列表 最常用的字符实体 显示 说明 实体名称 实体编号 空格 < 小于 < < > 大于 > > & ...
-
MVC &ndash; 3.EF(Entity Framework)
1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...
-
B站运维团队成长的血泪史
胡凯,bilibili运维负责人,曾经就职于金山软件.金山网络.猎豹移动,负责运维相关工作.Bilibili是国内最大的年轻人潮流文化娱乐社区,银河系知名弹幕视频分享UGC平台. 95后二次元新人 ...
-
ajax异步文件上传,iframe方式
不是我写的,我看了他的,思路很明确: 实现思路: 在js脚本中动态创建form,动态创建form中的内容,将文件上传的内容以隐藏域的方式提交过去,然后写好回调等. 感觉思路不难,但是我写不出来,感觉需 ...
-
BootStrap2学习日记9---文本框的前缀和后缀
先来看一段代码: <form method="" action=""> <div class="input-append input ...
-
spring boot 入门操作(三)
spring boot入门操作 devtools热部署 pom dependencies里添加依赖 <dependency> <groupId>org.springframew ...
-
pandas.Dataframe复杂条件过滤
https://*.com/questions/11418192/pandas-complex-filter-on-rows-of-dataframe mask = df.ap ...
-
win10下通过Anaconda安装TensorFlow-GPU1.3版本,并配置pycharm运行Mnist手写识别程序
折腾了一天半终于装好了win10下的TensorFlow-GPU版,在这里做个记录. 准备安装包: visual studio 2015: Anaconda3-4.2.0-Windows-x86_64 ...
-
JAVA(五)反射机制/Annotation
成鹏致远 | lcw.cnblog.com |2014-02-04 反射机制 1.认识Class类 在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在 java中也允许通过一个对象来找 ...
-
学习js第三天小结
1.冒泡排序分析: 例:将数组[9,8,7,6,5,4,3,2,1,0]按照从小打大的顺序进行冒泡排序. 演变过程: 第一趟: 8,7,6,5,4,3,2,1,0,9 比较了9次: 第二趟: 7 ...