hibernate之单表映射
项目源码地址:https://github.com/weiliangchun/JavaCode/tree/master/hibernateImooc/1-1Hibernate-single
第一章 Hibernate初识
1-1 课程介绍
- 什么是ORM
- Hibernate简介
- 编写第一个示例
1-2 什么是ORM
- ORM(Object/Relationship Mapping):对象/关系映射
利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是要编写很多和底层数据库相关的SQL语句
- 写SQL语句有什么不好吗?
- 不同的数据库使用的SQL语法不同,比如:PL/SQL与T/SQL
- 同样的功能在不同的数据库中有不同的实现方式。比如分页SQL
- 程序过分依赖SQL对程序的移植以及扩展、维护带来很大的麻烦
- 有没有办法让程序员彻底抛弃书写SQL的思想,完全的使用面向对象思想开发软件呢?
1-3 Hibnerate简介
Hibnerate是Java领域的一款开源的ORM框架技术
Hibnerate对JDBC进行了非常轻量级的对象封装
其他主流的ORM框架技术
- MyBatis
- Toplink
- EJB
1-4 开发前的准备
- 开发工具:Eclipse
- Hibernate Tools for Eclipse Plugins
- Hibernate Tools是由JBoss推出的一个eclipse综合开发工具插件,该插件可以简化ORM框架Hibernate,以及JBoss Seam,EJB3等的开发工作
最新版本eclipse oxygen在Help --> Eclipse Marketplace --> 搜索JBoss Tool --> 安装
其他版本去:http://tools.jboss.org/downloads/jbosstools/oxygen/4.5.0.Final.html#marketplace 下载对应版本的ZIP包,然后选择安装
1-5 编写第一个Hibernate例子
- 创建Hibernate的配置文件
- 创建持久化类
- 创建对象-关系映射文件
- 通过Hibernate API编写访问数据库的代码
- 导入Hibernate必须的jar包
hibernate-release-5.2.11.Final/lib/required - 导入Mysqk的JDBC驱动
mysql-connector-java-5.1.16-bin.jar - 导入JUnit4的jar包
junit-4.10.jar
1-6 创建hibernate工程
- File --> new Java Project --> Hibernate_001
- Windows --> Preferences --> Java --> Build Path --> User Libraries --> New
- hibernate-core 引入 hibernate-release-5.2.11.Final/lib/required 中的所有jar包
- mysql-jdbc 引入 mysql-connector-java-5.1.16-bin.jar
- junit4 引入 junit-4.10.jar
- 右键项目 --> Build Path --> Add Library --> User Libraries --> 勾选hibernate-core,junit4,mysql-jdbc
1-7 hibernate配置文档
- 创建hibernate的配置文件
hibernate-release-5.2.11.Final\project\hibernate-core\src\main\resources\org\hibernate\hibernate-configuration-3.0.dtd
<property name="connection.username">root</property>
<property name="connection.password">123456</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.MySQL5Dialect</property>
这里因为我是MySQL版本是5以上的,所以在最后一行的方言属性配置必须为
org.hibernate.dialect.MySQL5Dialect
,5以下的版本为org.hibernate.dialect.MySQLDialect
。
1-8 创建持久化类
Students类
package cc.wlc.vo;
import java.util.Date;
/*
* 学生类
*/
public class Students {
// 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 + "]";
}
}
1-9 创建对象-关系映射文件和数据库
- new --> Hibernate XML Mapping File --> 选择类Students --> Finish
- 在hibernate.cfg.xml中添加
<mapping resource="Students.hbm.xml"/>
- 创建数据库 hibernate
1-10 使用JUnit进行测试
- @Test: 测试方法
- @Before: 初始化方法
- @After: 释放资源
- 右键项目 --> New --> Source Folder (test) --> 创建类 StudentsTest
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/*
* 测试类
*/
public class StudentsTest {
@Before
public void init() {
}
@After
public void destroy() {
}
@Test
public void testSaveStudents() {
}
}
1-11 通过hibernate API编写访问数据库的代码
hibernte4以下的代码
//创建配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//创建会话工厂对象
sessionFactory = config.buildSessionFactory(serviceRegistry);
//打开会话
session = sessionFactory.openSession();
//打开事务
transaction = session.beginTransaction();
hibernate4以上的代码
//获得配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//创建会话工厂对象
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//打开会话
Session session = sessionFactory.openSession();
//打开事务
transaction = session.beginTransaction();
或
//创建配置对象
Configuration config = new Configuration().configure();
//创建会话工厂
sessionFactory = config.buildSessionFactory();
//打开会话
session = sessionFactory.getCurrentSession();
//打开事务
transaction = session.beginTransaction();
第二章 Hibernate进阶
2-1 课程简介
- hibernate.cfg.xml常用配置
- session简介
- transaction简介
- session详解
- 对象关系映射常用配置
2-2 hibernate.cfg.xml常用配置
hibernate前缀可以省略。即:hibernate.dialect等同于dialect
2-3 session简介
- hibernate的执行流程
不建议直接使用JDBC的connection操作数据库,而是通过使用session操作数据库
session可以理解为操作数据库的对象
session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用
把对象保存在关系数据库中需要调用session的各种方法,如:save(),update(),delete(),createQuery()等。
2-4 transaction简介
- hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且sho手动提交事务,对象并不会真正保存在数据库中
- 如果想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务(注意:通常不推荐这样做)
2-6 sesssion详解(上)
- 如何获得session对象?
- openSession
- getCurrentSession
如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
如果是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
2-7 session详解(下)
- openSession与getCurrentSession的区别
- getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要你手动关闭,如果使用openSession而没有手动关闭,多次之后会导致连接池溢出
- openSession每次创建新的session对象。getCurrentSession使用现有的session对象
2-8 对象关系映射常用配置
<hibernate-mapping
schema="schemaName"
catalog="catalogName"
default-cascade="cascade_style" //级联风格
default-access="field|property|ClassName" //访问策略
default-lazy="true|false" //加载策略
package="packagename"
/>
<class
name="ClassName"
table="tableName"
batch-size="N"
where="condition"
entity-name="EntityName"
/>
<id name="propertyName" type="typename">
column="column_name"
length="length"
<generator class="generatorClass" />
</id>
主键生成策略
第三章 Hibernate单表操作
3-1 课程简介
- 单一主键
- 基本类型
- 对象类型
- 组件属性
- 单表操作CRUD实例
3-2 单一主键
- assigned 由java应用程序负责生成(手工赋值)
- native 由底层数据库自动生成标识符,如果是MySQL就是increment,如果是Oracle就是sequence...
3-3 基本类型
3-4 对象类型
- MySQL不支持SQL的CLOB类型,在MySQL中,用TEXT,MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据
3-5 组件属性
- 实体类中的某个属性属于用户自定义的类的对象
<component name="address" class="Address">
<property name="postcode" column="POSTCODE"/>
<property name="phone" column="PHONE"/>
<property name="address" column="ADDRESS"/>
</component>
3-6 单表操作CRUD实例
- save
- update
- delete
- get/load(查询单个记录)
- get和load的区别:
- 在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象
load方法会在调用后返回一个代理对象
该代理对象只保存了实体对象的id.直到使用对象的非主键属性时才会发出sql语句 - 查询数据中不存在的数据时,get方法返回null
load方法抛出异常org.hibernate.ObjectNotFoundException
hibernate之单表映射的更多相关文章
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- MyBatis快速入门(1):搭建环境和单表映射
一.MyBatis简介 一说起对象关系映射框架,大家第一时间想到的肯定是Hibernate.Hibernate作为一个著名的框架,功能十分强大.我们只需要配置好实体类和数据表之间的关系,Hibe ...
- Hibernate学习---单表查询
我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...
- Hibernate初探之单表映射
http://www.imooc.com/video/7816 1.什么是ORM?为什么使用Hibernate? 对象关系映射:为了少写和底层数据库相关的sql语句,方便程序的维护.修改,提高跨平台性 ...
- hibernate课程 初探单表映射4-1 课程总结
ORM是一种面向对象编程的方法,用这种方法来避免写数据库底层语言sql语句,这样有利于java的跨平台,扩展.维护.而hirenate是ORM的一种框架 hirbernate开发基本步骤编写配置文档h ...
- hibernate课程 初探单表映射3-1 hibernate单表操作简介
本章简介: 1 单一主键 2 基本类型 3 对象类型 4 组件属性 5 单表操作CRUD实例
- hibernate对单表的增删改查
ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...
- (一)Hibernate初探之——单表映射
Hibernate充当持久化层 项目结构: 一.创建项目导入jar包. hibernate-core & junit4 & mysql-jdbc 二.src目录下 ...
- hibernate课程 初探单表映射1-9 创建关系映射文件
创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...
随机推荐
- C语言作用于修饰符
之前就遇到了坑,莫名其妙报错. 总结下: extern 声明在其他文件里 static 仅当前文件可见
- SpringMVC+Jquery实现Ajax
一.什么是Ajax? Ajax:异步的JavaScript和Json(这里XML改为了Json): 作用:用于完成网页局部刷新功能(修改少量数据只用局部刷新,不用再整个网页重新加载): 二.Sprin ...
- aixcoder智能编程助手开发插件推荐
1. aixcoder安装使用 1.1. 介绍 1.1.1. 功能 智能代码提示她用强大的深度学习引擎,能给出更加精确的代码提示: 代码风格检查她有代码风格智能检查能力,帮助开发者改善代码质量: 编程 ...
- idea ssm项目移包报错问题
写完代码之后发现包结构太乱了 想要规划一下 结果报错 这里面的包路径都可以点进去,还是报找不到com.lf.company.entity.Business 后来发现是 在移动前和移动后都存在这个m ...
- 【PostgreSQL-9.6.3】触发器实例
1. 创建一个触发器,表中的行在任何时候被插入或更新时,当前用户名和时间也会被标记在该行中.并且它会检查雇员的姓名以及薪水. --创建测试表 CREATE TABLE emp ( empname te ...
- mongodb分片集群安装教程
mongodb 集群包含副本集群,主从集群以及分片集群,分片集群比较复杂,这里测试我采用了三台机器,交差部署 blog地址:http://www.cnblogs.com/caoguo 一 .环境:#m ...
- Android中Adapter和Bridge模式理解和应用
一 Adapter模式 意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作. 适用性: 使用一个已存在的类,而它的接口 ...
- Python 之列表操作
# len(list)列表元素个数 # max(list)返回列表元素最大值 # min(list)返回列表元素最小值 # list(seq)将元组转换为列表 # list.append(obj)在列 ...
- zoom,zoom与haslayout的关系,zoom与transform: scale( )的区别
1.zoom:(缩放)
- bootstrapValidator代码中开启验证和判断验证是否通过
//开启验证 $('#saveadmin_form').data('bootstrapValidator').validate(); //是否通过校验 if(!$('#saveadmin_form') ...