Hibernate实例

一、Hibernate简介

Hibernate是简化项目中连接数据库的一个框架工具

Hibernate是Java领域类技术成熟稳定的ORM框架

* ORM是对象关系映射
* 使用ORM的好处:使得习惯使用面向对象编程的程序员在项目中尽量少写和底层数据库相关的sql语句
* 这样做的好处:方便程序维护和修改以及跨平台性和扩展

二、使用的工具

(1)eclipse

Eclipse Java EE IDE for Web Developers. Version: Neon.3 Release (4.6.3)

(2)mysql

mysql-5.7.17

(3)Navicat

Navicat Premium_11.2.7简体中文破解版

(4)hibernate插件

jbosstools-4.4.4.Final

(5)junit工具

junit-4.8.2

* JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。
* Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
* Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

(6)jdbc

mysql-connector-java-5.1.7

(三)Hibernate开发的基本步骤

* (1)编写项目配置文档hibernate.cfg.xml
* (2)编写实体类(需遵循Java bins的规范)
* (3)生产对应实体类的映射文件并添加到配置文档中
* (4)调用Hibernate API函数进行测试

hibernate执行流程图

1)编写项目配置文档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.username">root</property><!--数据库用户名 -->
<property name="connection.password">1314</property><!--数据库密码 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property><!--数据库驱动 -->
<!--数据库链接 -->
<property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property> <!--表示数据库的方言,对数据库的语言结构进行优化 -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!--是否把要执行的语句输出到控制台 -->
<property name="show_sql">true</property>
<!--是否对要执行的语句格式化 -->
<property name="format_sql">true</property>
<!--生成表结构的策略,create表示删除原表重新生成,update表示更新原表 -->
<property name="hbm2ddl.auto">create</property>
<!--给数据库中的所有表加上前缀 -->
<property name="hibernate.default_schema">hibernate</property>
<!--getCurrentSession方法创建session要用到的属性 -->
<property name="hibernate.current_session_context_class">thread</property> <mapping class="Students" />
<!--掉用映射 Students.hbm.xml -->
<mapping resource="Students.hbm.xml" /> </session-factory>
</hibernate-configuration>

2)编写实体类(需遵循Java bins的规范)

Students.java

这是这个hibernate实例中的实体类,会映射到数据库的表中

 import java.util.Date;

 //学生类
public class Students { /*
* Java bin类的原则 1.公有的类 2.提供公有的不带参数的默认的构造方法 3.属性私有 4.属性setter/getter封装
*
*/ private int sid;// 学号
private String sname;// 姓名
private String gender;// 性别
private Date birthday;// 出生日期
private String address;// 地址 public Students() { } public Students(int sid, String sname, String gender, Date birthday, String address) {
// super();
this.sid = sid;
this.sname = sname;
this.gender = gender;
this.birthday = birthday;
this.address = address;
} public int getSid() {
return sid;
} public void setSid(int sid) {
this.sid = sid;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", birthday=" + birthday
+ ", address=" + address + "]";
} }

3)生产对应实体类的映射文件并添加到配置文档中

这个配置文件就是将java中的类映射到数据库中的表

每修改一次实例的属性,这个配置文件就需要修改

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-5-29 9:53:03 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="Students" table="STUDENTS"><!--name表示在java中的类 table表示映射在数据库中的表名-->
<id name="sid" type="int"><!--id整个这个标签表示主键 -->
<!--sid表示在java类中的属性名 type表示这个属性的类型-->
<column name="SID" /><!--SID表示的是这个属性映射在数据库中的字段名称-->
<generator class="assigned" /><!--generator表示的是主键的生产方式 assigned表示人为指定 active表示数据库自动生成-->
</id>
<property name="sname" type="java.lang.String"><!--property是属性的意思-->
<column name="SNAME" />
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER" />
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
<property name="address" type="java.lang.String">
<column name="ADDRESS" />
</property>
</class>
</hibernate-mapping>

4)调用Hibernate API函数进行测试

通过junit进行测试

 //这里报错我一直在纠结,其实视频里面这里也有错啊,我浪费时间
//多去看视频下面的评论,有告诉我们很多问题的解决方案
//运行代码时老犯配置错误,原来配置文件中不支持java注释的写法
//我是通过删减犯错位置的代码来发现错误的 /*
* 理解hibernate
* hibernate是对jdbc进行了轻量级的封装,本身还是用的jdbc
*/ /*
* 理解session
* Session对象相当于jdbc中的connection数据库,因为要面对对象的思想操作数据库,
* 所以用session而不是用而不是直接用jdbc
* hibernate是对jdbc进行了轻量级的封装,本身还是用的jdbc
* 所以可以简单理解session为操作数据库对象
* session与connection是一对多的关系,每个session都有一个与之对应的connection,
* 一个connection不同时刻可以供多个session使用
* session的增删改查:save(),update(),delete().createQuery()
*/ /*
* 理解transaction
* hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交方式,
* 所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中
* 如果不开事务,要用session的doWork()方法将数据提交到数据库
*/ /*
* session详解
* 如何获得session对象
* 1)openSession
* 2)getCurrentSession
*/
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; //测试类
public class StudentsTest { private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void init(){
//创建配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new
StandardServiceRegistryBuilder().applySettings(config.getProperties()).configure().build();//这里有点不一样
//创建会话工厂对象
sessionFactory = config.buildSessionFactory(serviceRegistry);
//创建会话对象
session = sessionFactory.openSession();
//开启事务
transaction = session.beginTransaction();
} @After
public void destory(){
transaction.commit();//提交事务
session.close();//关闭会话
sessionFactory.close();//关闭会话工厂
} @Test
public void testSaveStudents(){
//生产学生对象
Students s = new Students(1,"饭饭","男",new Date(),"博客园");
// session.doWork(new Work() {//匿名内部类
// @Override
// public void execute(Connection connection) throws SQLException {
// // TODO Auto-generated method stub
// connection.setAutoCommit(true);
// }
// });
session.save(s);//保存对象进入数据库
// session.flush();//强制刷新流
} }

四、hibernate基本操作

hibernate基本数据类型

hibernate对象类型

hibernate常用基本类型

五、总结

* 1、什么是ORM?为什么要使用Hibernate?
* ORM是对象关系映射
* 使用ORM的好处是使得习惯使用面向对象编程的程序员在项目中尽量少写和底层数据库相关的sql语句
* 这样做的好处:方便程序维护和修改以及跨平台性和扩展
* Hibernate是Java领域类技术成熟稳定的ORM框架

* 2、Hibernate开发的基本步骤
* (1)编写项目配置文档hibernate.cfg.xml
* (2)编写实体类(需遵循Java bins的规范)
* (3)生产对应实体类的映射文件并添加到配置文档中
* (4)调用Hibernate API函数进行测试

* 3、什么是session?
* hibernate对数据库的操作都要使用session对象,session对象相当于我们使用jdbc开发的一个connection对象
* 我们使用hibernate对数据库的操作本质上就是调用session的API函数来实现的
* save():(增)保存数据 get()/load():(查)取出数据 update():(改)更新数据 delete():(删)删除数据

* 4、openSession与getCurrentSession
* openSession每次创建一个新的实例对象,需要我们显示关闭
* getCurrentSession使用的是一种单例模式,每次创建的都是相同的对象,自动关闭

* 5、单表操作有哪些方法?
* save():(增)保存数据 delete():(删)删除数据 update():(改)更新数据 get()/load():(查)取出数据

* 6、get和load
* get使用时立刻发送sql语句,而且直接获得实体类本身
* load是在使用到具体的实例的非主属性的时候才会发送sql语句,返回的是代理对象

Hibernate实例的更多相关文章

  1. 使用MyEclipse可视化开发Hibernate实例

    2.7  使用MyEclipse可视化开发Hibernate实例 2.7节的例子源代码在配套光盘sourcecode/workspace目录的chapter02_first项目中. 这个实例主要演示如 ...

  2. Hibernate实例二

    Hibernate实例二 一.测试openSession方法和getCurrentSession方法 hebernate中可以通过上述两种方法获取session对象以对数据库进行操作,下面的代码以及注 ...

  3. SSH---整合Struts2&Spring&Hibernate(实例)

    一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...

  4. Hibernate从入门到精通(二)Hibernate实例演示

    上篇Hibernate从入门到精通(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hiber ...

  5. Hibernate(二)Hibernate 实例

    上篇Hibernate(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hibernate的优 ...

  6. Spring MVC4 + Spring Security4 + Hibernate实例

    http://www.yiibai.com/spring-security/spring-mvc-4-and-spring-security-4-integration-example.html 在这 ...

  7. Hibernate实例——Customer表的展示

    Hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...

  8. (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...

  9. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hiberna ...

随机推荐

  1. 026-chmod命令

    语法# chmod [ 选项参数 ]  选择修改权限的对象   权限的改变   目标文件 语义:对哪些目标文件的哪些权限进行修改. (1)# chmod -R ugo +r /home/apple.将 ...

  2. 基于Axis1.4的webservice接口开发(接口调用)

    基于Axis1.4的webservice接口开发(接口调用) 一.webservice接口代码参考上一篇博客: http://www.cnblogs.com/zhukunqiang/p/7125668 ...

  3. python excel操作单元格复制和读取的两种方法

    操作单元格 新建一个sheet, 单元格赋值(两种方法) 单元格A1赋值为’xiaxiaoxu’ 单元格A2赋值为‘xufengchai’ 打印A1和A2单元格的值(两种方法) #coding=utf ...

  4. C/C++之学习笔记

    [C语言的Static inline 函数的作用]     [printf打印格式] %x  打印十六进制 %d 打印十进制 %b 打印二进制 %c 打印字符 %s 打印字符串 %f 打印单精度flo ...

  5. ELK+Kafka学习笔记之FileBeat日志合并配置输出到kafka集群

    filebeat.prospectors: - type: log               #日志输出类型   enabled: true                             ...

  6. bzoj1642 / P2889 [USACO07NOV]挤奶的时间Milking Time

    P2889 [USACO07NOV]挤奶的时间Milking Time 普通的dp 休息时间R其实就是把结束时间后移R个单位而已.但是终点也需要后移R位到n+R. 每个时间段按起始时间排序,蓝后跑一遍 ...

  7. 20145305 《网络对抗》MSF基础应用

    实践过程及结果截图 主动攻击ms08_067 Kali的IP:10.43.46.93 靶机的IP:10.43.49.28 MS08_067远程漏洞攻击实践:Shell 攻击成功的结果 在kali上执行 ...

  8. C#预处理器指令【转】

    本文转载自:http://www.cnblogs.com/miffylf/p/4005223.html C#有许多名为预处理器指令的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各 ...

  9. 第七章 对称加密算法--DES

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 7.1.对称加密算法 特点: 加密与解密使用同一个密钥 是使用最广的算法 常见对称加密 ...

  10. [luogu 3957]跳房子

    题目链接 50分做法 挺显然的一个做法,因为金币量是单调的(如果你花i枚金币可以得到最优解,i+1枚也一定可以),所以可以二分答案 然后对于二分出来的每个答案,都做一遍dp,效率$O(n^2logn) ...