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. only_full_group_by问题而引发的对group by的深入思考

    问题背景 最近在项目中使用mysql的group by进行分组查询的场景比较多,其中一次遇到了一个问题,即在开发环境执行一个如下sql时是正确且可执行的, select a,b,max(c) from ...

  2. 禁止F12与右键

    实践项目的代码哦,给大家分享下,如何屏蔽右键与F12. 应用网站  www.empiretreasure.vip   与       www.MineBook.vip.可以去逛逛哦. 不多说了,上代码 ...

  3. python3 字典的常用方法

    字典的方法(可能需要重新整理) 函数 说明 D代表字典对象   D.clear() 清空字典 D.pop(key) 移除键,同时返回此键所对应的值 D.copy() 返回字典D的副本,只复制一层(浅拷 ...

  4. python 元组 序列上使用enumerate()函数

    不能直接for n,x,y in enumerate(data)

  5. Linux Touch命令的8种使用技巧

    Linux touch命令不仅可以用于在Linux上创建空文件. 您可以使用它来更改现有文件的时间戳,包括其访问权限和修改时间. 本文介绍了8种可以通过Linux终端使用touch命令的方案. 我们在 ...

  6. Python Web学习笔记之图解TCP/IP协议和浅析算法

    本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1主要包括三部分:建立连接.传 ...

  7. bzoj3505 / P3166 [CQOI2014]数三角形

    P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...

  8. 20145302张薇 《网络对抗技术》 web基础

    20145302张薇 <网络对抗> web基础 实验问题回答 1.什么是表单 表单在网页中主要负责数据采集功能:一般网页上需要用户输入.选择的地方都会用到表单 表单标签:即,用于确定表单所 ...

  9. 20145302张薇 《网络对抗》MSF应用基础

    20145302张薇 <网络对抗>MSF应用基础 实验内容 掌握metasploit的基本应用方式 1.主动攻击--ms08_067 2.针对浏览器的攻击--ms11_050 3.针对客户 ...

  10. Python3基础 super 子类调用父类的__init__

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...