Hibernate学习笔记1:入门和基本操作

这是黑马视频的学习笔记

  • 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值