Hibernate框架用法

时间:2023-01-24 08:12:22

一,Hibernate框架介绍  

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

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

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

二,程序实例

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

Hibernate框架用法

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&period;Hibernate框架核心组件 &lpar;转自冯岩&rpar;

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

  2. 粗浅看Struts2和Hibernate框架

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

  3. Hibernate框架&lowbar;搭建第一个Hibernate框架

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

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

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

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

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

  6. 2&period;0、Hibernate框架的简单搭建

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

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

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

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

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

  9. SSH&lpar;Struts2&plus;Spring&plus;Hibernate&rpar;框架搭建流程&lt&semi;注解的方式创建Bean&gt&semi;

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

随机推荐

  1. HTML特殊转义字符列表

    HTML特殊转义字符列表 最常用的字符实体 显示  说明  实体名称  实体编号   空格       <       小于   <  < >  大于  > > & ...

  2. MVC &ndash&semi; 3&period;EF(Entity Framework)

    1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...

  3. B站运维团队成长的血泪史

    胡凯,bilibili运维负责人,曾经就职于金山软件.金山网络.猎豹移动,负责运维相关工作.Bilibili是国内最大的年轻人潮流文化娱乐社区,银河系知名弹幕视频分享UGC平台.   95后二次元新人 ...

  4. ajax异步文件上传,iframe方式

    不是我写的,我看了他的,思路很明确: 实现思路: 在js脚本中动态创建form,动态创建form中的内容,将文件上传的内容以隐藏域的方式提交过去,然后写好回调等. 感觉思路不难,但是我写不出来,感觉需 ...

  5. BootStrap2学习日记9---文本框的前缀和后缀

    先来看一段代码: <form method="" action=""> <div class="input-append input ...

  6. spring boot 入门操作&lpar;三&rpar;

    spring boot入门操作 devtools热部署 pom dependencies里添加依赖 <dependency> <groupId>org.springframew ...

  7. pandas&period;Dataframe复杂条件过滤

    https://*.com/questions/11418192/pandas-complex-filter-on-rows-of-dataframe mask = df.ap ...

  8. win10下通过Anaconda安装TensorFlow-GPU1&period;3版本,并配置pycharm运行Mnist手写识别程序

    折腾了一天半终于装好了win10下的TensorFlow-GPU版,在这里做个记录. 准备安装包: visual studio 2015: Anaconda3-4.2.0-Windows-x86_64 ...

  9. JAVA(五)反射机制&sol;Annotation

    成鹏致远 | lcw.cnblog.com |2014-02-04 反射机制 1.认识Class类 在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在 java中也允许通过一个对象来找 ...

  10. 学习js第三天小结

    1.冒泡排序分析: 例:将数组[9,8,7,6,5,4,3,2,1,0]按照从小打大的顺序进行冒泡排序. 演变过程: 第一趟: 8,7,6,5,4,3,2,1,0,9    比较了9次: 第二趟: 7 ...