Hibernate实例
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&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实例的更多相关文章
- 使用MyEclipse可视化开发Hibernate实例
2.7 使用MyEclipse可视化开发Hibernate实例 2.7节的例子源代码在配套光盘sourcecode/workspace目录的chapter02_first项目中. 这个实例主要演示如 ...
- Hibernate实例二
Hibernate实例二 一.测试openSession方法和getCurrentSession方法 hebernate中可以通过上述两种方法获取session对象以对数据库进行操作,下面的代码以及注 ...
- SSH---整合Struts2&Spring&Hibernate(实例)
一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...
- Hibernate从入门到精通(二)Hibernate实例演示
上篇Hibernate从入门到精通(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hiber ...
- Hibernate(二)Hibernate 实例
上篇Hibernate(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hibernate的优 ...
- Spring MVC4 + Spring Security4 + Hibernate实例
http://www.yiibai.com/spring-security/spring-mvc-4-and-spring-security-4-integration-example.html 在这 ...
- Hibernate实例——Customer表的展示
Hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...
- (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)
hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...
- 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架
这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hiberna ...
随机推荐
- windows8.1的启动目录的路径
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\ 或者使用斜杠表示,就像这样: C:/ProgramData/Microsof ...
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSpan之后 ...
- 基于Axis1.4的webservice接口开发(代码开发)
基于Axis1.4的webservice接口开发(代码开发) 一.开发环境: 我的开发环境是MyEclipse 2015+Apache-Tomcat-8.0.21. 二.代码开发: 1.新建一个Web ...
- Java设计模式应用——观察者模式
告警结果产生后,可能需要发送短信,邮件,故障管理系统.这些转发操作不应当影响告警生成入库,并且类似事件可能根据不同场景,客户习惯不同,此时,使用观察者模式则可以很好的适应上述场景. 观察者模式应当包括 ...
- Linux服务器配置---ftp用户黑名单
用户黑白名单 一个Linux主机中会多个用户,而我们希望有些用户不能去访问ftp.ftp服务器可以通过配置文件“/etc/vsftpd/user_list”来设置一个用户列表,这个列表可以是黑名单,也 ...
- php 字符串长度函数
php 字符串长度函数 php 字符串长度函数,在php测试字符串长度的函数有二个,一个是strlen,另一个是mb_strlen前一个默认是支持,后一个需要开启一个插件,下面我们来介绍一下二个函数的 ...
- [转载] iframe嵌入网页的用法
iframe并不是很常用的,在标准的网页中非常少用.但是有朋友经常问到,下面我简单地介绍一下它的用法,你只要熟练掌握这些参数足矣. <iframe>也应该是框架的一种形式,它与<fr ...
- 【翻唱】白金disco
http://video.yingtu.co/0/bbea91f8-e1ce-4211-9519-2371745f4ec0.mp4 [翻唱]白金disco
- c++的友元类、方法及其益处
在java中,我们知道除了public和private,protected外,还有默认的包可见性访问级别,虽然如此,很多时候出于早期设计缺陷的原因,我们需要访问一些包或者protected可见性级别的 ...
- 01: RabbitMQ
目录: 1.1 RabbitMq与Redis队列对比 1.2 在win7 64位机上安装RabbitMQ 1.3 RabbitMQ消息分发轮询 与 持久化 1.4 RabbitMQ 设定某个队列里最大 ...