1 web内容回顾
(1) javaee三层结构
(2) mvc思想
2 hibernate概述
3 hibernate入门案例
4 hibernate配置文件
5 hibernate的api使用
Web内容回顾
JavaEE三层结构
1 web层:struts2框架、Spring mvc框架、Spring Boot框架
2 service层: Spring框架
3 dao层:Hibernate框架、mybatis框架
(1) 对数据库进行crud(增删改查)操作
MVC思想
1 m:模型
2 v:视图
3 c:控制器
Hibernate概述
什么是框架
1写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,分代码实现功能
什么是 hibernate框架(重点)
1 hibernate框架应用在 javaee三层结构中do层框架
2在dao层里面做对数据库crud(增删改查)操作,使用 hibernate实现crud操作, hibernate底层代码就是jdbc, hibernate对jdbc进行封装,使用 hibernate好处,不需要写复杂jdbc代码了,不需要写sql语句实现
3 hibernate开源的轻量级的框架
4 下载下来后lib文件夹下保存了hibernate相关的jar包
什么是orm思想
1 hibernate使用orm思想对数据库进行crud操作
2在web阶段学习 javabean,更正确的叫法实体类
3 orm: object relational mapping,对象关系映射
文字描述:
(1)让实体类和数据库表进行—对应关系
让实体类首先和数据库表对应
让实休类属性和表里面字段对应
(2)不需要直接操作数据库表,而操作表对应实体类对象
Hibernate入门
搭建Hibernate环境
第一步 导入hibernate的jar包
因为使用 hibernate时候,有日志信息输出, hibernate本身没有日志输出的jar包,导入其
他日志的jar包
不要忘记还有 mysql驱动的jar :mysql-connector-java-5.0.4-bin.jar
第二步 创建一个实体类(例子User)
1 package cn.itcast.entity; 2 3 public class User { 4 /*hibernate要求实体类中要有一个属性唯一的*/ 5 private int uid; 6 private String username; 7 private String password; 8 private String address; 9 10 11 public int getUid() { 12 return uid; 13 } 14 public void setUid(int uid) { 15 this.uid = uid; 16 } 17 public String getUsername() { 18 return username; 19 } 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 public String getPassword() { 24 return password; 25 } 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 public String getAddress() { 30 return address; 31 } 32 public void setAddress(String address) { 33 this.address = address; 34 } 35 36 37 }
(1) 使用 hibernate时候,不需要自己手动创建表, hibernate帮把表创建
第三步配置实体类和数据库表—一对应关系(映射关系)
使用配置文件实现映射关系
(1) 创建xml格式的配置文件
映射配置文件名称和位置没有固定要求
建议:在实体类所在包里面创建,实体类名.hbm. Xml
(2)配置是是xml格式,在配置文件中首先引入xml约束
学过约束dtd、schema,在 hibernate里面引入的约束dtd约束
(2) 配置映射关系(User.hbm.xml)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <!-- 1配置类和表对应 7 c1ass标签 8 name属性:实体类全路径 9 tab1e属性:数据库表名称 10 --> 11 <class name="cn.itcast.entity.User" table="t_user"> 12 <!-- 2配置实体类id和表id对应 13 hibernate要求实体类有一个属性唯一值 14 hibernate要求表有字段作为唯一值 15 --> 16 <!-- id标签 17 name属性:实体类里面主d属性名称 18 co1umn属性:生成的表字段名称 19 --> 20 <id name="uid" column="uid"> 21 <!-- 设置数据库表id增长策略 22 native:生成表id值就是主键自动增长 23 --> 24 <generator class="native"></generator> 25 </id> 26 <!-- 27 配置其他属性和表字段对应 28 name属性:实体类属性名称 29 column属性:生成表字段名称 30 --> 31 <property name="username" column="username"></property> 32 <property name="password" column="password"></property> 33 <property name="address" column=" address"></property> 34 </class> 35 </hibernate-mapping>
第四步 创建 hibernate的核心配置文件。
(1)核心配置文件格式xml,但是核心配置文件名称和位置固定的
位置:必须src下面
名称:必须 hibernate.cfg.xml
(2)引入dtd约束
(3) hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
第一部分:配置数据库信息
第二部分:配置hibernate信息
第三部分:把映射文件放到核心配置文件中
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">343492</property> <!-- 第二部分:配置hibernate信息 可选的--> <!--输出底层sql语句 --> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!--hibernate帮创建表,需要配置后 update:如果已经有表,更新,如果没有,创建 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置数据库的方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 第三部分:把映射文件放到核心配置文件中 --> <mapping resource="cn/itcast/entity/User.hbm.xml"/> </session-factory> </hibernate-configuration>
实现添加的操作
第一步 加载hibernate核心配置文件
第二步创建 Sessionfactory对象
第三步使用 Sessionfactory创建 session对象
第四步开启事务
第五步写具体逻辑crud操作
第六步提交事务
第七步关闭资源
看到效果:
(1)是否生成表
(2)看表是否有记录
1 package cn.itcast.hibernatetest; 2 3 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.Transaction; 7 import org.hibernate.cfg.Configuration; 8 import org.junit.Test; 9 10 import cn.itcast.entity.User; 11 12 public class HibernateDemo { 13 14 @Test 15 public void testAdd(){ 16 // 第一步 加载hibernate核心配置文件 17 //在hibernate里面封装了对象 18 Configuration cfg = new Configuration(); 19 cfg.configure(); 20 21 22 // 第二步创建 Sessionfactory对象 23 //读取hibernate核心配置文件内容,创建ssssionFactory 24 //在过程中,根据映射关系,在配置数据库里面把表创建了 25 SessionFactory sessionFactory = cfg.buildSessionFactory(); 26 27 // 第三步使用 Sessionfactory创建 session对象 28 //类似于连接 29 Session session = sessionFactory.openSession(); 30 31 // 第四步开启事务 32 Transaction tx = session.beginTransaction(); 33 34 // 第五步写具体逻辑crud操作 35 //添加功能 36 User user=new User(); 37 user.setUsername("小王"); 38 user.setPassword("250"); 39 user.setAddress("日本"); 40 //调用session的方法实现添加 41 session.save(user); 42 43 44 // 第六步提交事务 45 tx.commit(); 46 47 // 第七步关闭资源 48 session.close(); 49 sessionFactory.close(); 50 } 51 }
Hibernate配置文件详解
Hibernate映射配置文件
1 映射配置文件名称和位置没有固定要求
2 映射配置文件中,标签name属性值写实体类相关内容
(1) class标签name属性值实体类全路径
(2) id标签和property标签name属性值实体类属性名称
3 id标签和 property标签, column属性可以省略的
(1)不写值和mame属性值一样的
4 property标签type属性,设置生成表字段的类型,自动对应类型
Hibernate核心配置文件
1 配置写位置要求
2 配置三部分要求
(1)数据库部分必须的。
(2) hibernate部分可选的
(3)映射文件必须的
3 核心配置文件名称和位置固定的
(1)位置:src下面
(2)名称: hibernate cfg.xml
Hibernate核心api
Configuration
(1)到src下面找到名称 hibernate.cfg.xm配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
SessionFactory
1使用configuration对象创建sessionFactory对象
(1)创建 sessionFactory过程中做事情:
根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
2创建 sessionFactory过程中,这个过程特别耗资源的
(1) 在 hibernate操作中,建议一个项目一般创建一个 sessionFactory对象
3具体实现
(1)写工具类,写静态代码块实现。
*静态代码块在类加载时候执行,执行一次
1 package cn.itcast.utils; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.hibernate.cfg.Configuration; 7 8 public class HibernateUtils { 9 private final static Configuration cfg; 10 private final static SessionFactory sessionFactory; 11 //静态的代码块 12 static { 13 // 第一步 加载hibernate核心配置文件 14 //在hibernate里面封装了对象 15 cfg = new Configuration(); 16 cfg.configure(); 17 18 19 // 第二步创建 Sessionfactory对象 20 //读取hibernate核心配置文件内容,创建ssssionFactory 21 //在过程中,根据映射关系,在配置数据库里面把表创建了 22 sessionFactory = cfg.buildSessionFactory(); 23 } 24 25 public static SessionFactory getSessionFactory(){ 26 return sessionFactory; 27 } 28 }
Session
1 session类似于jdbc connection
2 调用 session里面不同的方法实现crud操作,
(1)添加 save方法
(2)修改 update方法
(3)删除 delete方法
(4)根据id查询get方法
3 session对象单线程对象
(1) session对象不能共用,只能自己使用
Transaction
1 事务对象
2 事务提交和回滚方法
3事务概念
(1)事务四个特性
原子性、一致性、隔离性、持久性