这是黑马视频的学习笔记
web内容回顾
1.javaEE三层结构:web层(struts2框架),service层(spring框架), dao层(hibernate框架,对数据库进行crud操作)
2.mvc思想:模型、视图、控制器
hibernate框架概述
1. 框架:写程序,使用框架之后,帮我们实现一部分功能,可以少写代码
2. hibernate框架:应用到dao层,可以实现对数据库crud操作(底层是jdbc,封装了jdbc,不需要写jbdc代码和sql语句)。开源轻量级的框架。
3. hibernate版本:3.x====》4.x(过渡版本)====>5.x(使用的版本)
4. lib文件夹:里面是相关jar包
5. orm思想
(1)hibernate使用orm思想对数据库进行crud操作
(2)在web阶段学习javabean,更正确的叫做 实体类
(3)orm:对象关系映射 建立实体类和数据库表的一一对应关系。属性对应字段。从而通过操作实体类就能间接操作数据库表
hibernate的入门案例
1.hibernate环境搭建
a.导入jar包;: required里面的所有,jpa里面的jar包。log4j和slf4j-api、slf4j-log4j。还要导入数据库的驱动jar包
使用hibernate时,会有日志信息输出,hibernate自己却没有支持日志输出的jar包。所以要导入其他日志的jar包
b. 创建实体类
package cn.itcast.entity;
public class User {
private Integer uid;
private String username;
private String password;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", address=" + address + "]";
}
}
注:使用hibernate不需要自己手动创建表,hibernate会帮助自动创建
c.配置实体类和数据库表之间的映射关系(使用配置文件)
配置文件时xml,名称位置没有硬性要求,建议:位置在实体类的包里面,名称是 实体类.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.itcast.entity.User" table="t_user">
<id name="uid" column="uid">
<generator class="native"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
d. 创建hibernate的核心配置文件
核心配置文件的名称位置都是固定的。位置在src下面,名称是hibernate.cfg.xml
注: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="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate_day02?serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">666666</property>
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="cn/itcast/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
e . 实现添加操作
先加载配置文件,创建sessionFactory对象,创建session对象,开启事务,写逻辑,提交事务,关闭资源
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.itcast.entity.User;
ublic class Test {
public static void main(String[] args) {
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
User user3=new User();
user3.setUsername("lucy");
user3.setPassword("520");
user3.setAddress("越南");
session.save(user3);
//提交事务
tx.commit();
//关闭资源
session.close();
sessionFactory.close();
}
}
hibernate配置文件
映射配置文件
1.映射配置文件名称位置没有固定要求。
2.标签中的name属性值写的都是实体类的内容;
class标签的name属性值是实体类的全路径。id和property标签的name属性值是 实体类属性名
3.id和property标签的column属性可以省略,默认和name属性值一样
4.property标签还有type属性,用来设置生成的表的字段的类型。不写会自动对应类型
核心配置文件
1.配置写的位置都在session-factory里面
2.数据库配置必须,hibernate配置可选,映射文件配置必须
3.核心配置文件的名称位置固定
hibernate的api的使用
eclipse中绿色是类,紫色是接口
configuration:作用是到src下找hibernate.cfg.xml配置文件,创建对象,把配置文件放在对象里面(加载核心配置文件)
sessionFactory:在创建sessionFactory对象过程中会根据核心配置文件创建数据表。创建sessionFactory过程中,很耗资源,故建议在一个项目中只创建一个sessionFactory对象。
创建一个工具类,写静态代码块实现。静态代码块在类加载时执行,但只执行一次
package cn.itcast.entity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
static SessionFactory sessionFactory;
static Configuration configuration;
static {
Configuration configuration=new Configuration();
configuration.configure();
sessionFactory=configuration.buildSessionFactory();
}
public static Session getSessionObject() {
return sessionFactory.getCurrentSession();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
session:
1. 类似于jdbc中的connection
2.调用session里面不同的方法实现crud操作
添加:save方法
修改:update方法
删除:delete方法
根据id查询:get方法
3. session对象是单线程对象
session对象不能公用,只能自己使用
transaction:事物对象
事物提交和回滚方法:commit(); rollback();
事物概念:原子性,一致性、隔离性、持久性,
配置文件没有提示问题
1.可以上网
2.把约束文件引入eclipse中,window=====》preferences=====》xml Catalog====》add=====》uri填网络地址,loaction填本地路径====》ok,重启eclipse