Hibernate(第一天)

https://study.163.com/course/courseMain.htm?courseId=1004377001

对网易云课堂hibernate课程的文字总结:

一、javaEE的三层结构:

1、web层:视图层;

                             用到struct2框架

2、service层:业务逻辑层;

                             用到spring框架

3、dao层:持久化层;

                              用到hibernate框架                 

                             用来对数据库进行增删改查crud操作;

 

二、MVC思想:分层

1、m:模型

2、v:视图

3、c:控制器

 

三、Hibernate概述:

1、是什么?

      1.1什么是框架?

      写程序,使用框架之后,帮我们实现一部分功能。使用框架好处,少写一部分代码实现功能

      1.2 什么是hibernate框架(重点记住)?

       hibernate框架应用在javaee三层结构中dao层框架

       在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装。使用hibernate好处,不需要写复杂jdbc代码了,不需要写sql语句实现。

      hibernate开源轻量级的框架:免费,源代码是开放的,不需要依赖其他东西,就可以直接来使用。

      hibernate版本:hibernate3.x;hibernate4.x:现在不去用,该版本是过度版本;hibernate5.x:现在在用;

                             其中lib:hibernate相关jar包;

      1.3hibernate思想:对db进行crud操作

         即什么是orm思想 ?

              hibernate使用orm思想对数据库进行crud操作;

              在web阶段学习的javabean,javabean更正确的叫法,叫做实体类。

              orm:用到实体类,O:object ;R:relational;M:mapping;对象关系映射。

              即hibernate用orm对象关系映射思想来对数据库进行crud操作;

              对象关系映射:

              (1)让实体类和数据库表进行一一对应关系;

                        让实体类首先和数据库表对应;比如:user类和user表

                        让实体类属性和表里面的字段对应;

              (2)不需要直接操作数据库表,而操作表对应的实体类对象即可;

             画图说明:

                         在框架阶段要用配置文件完成很多功能;

      知识点:

            jdbc:加载驱动、创建连接,预编译,执行.......

            javabean可以封装数据,javabean写法规范:属性是私有的,私有属性有公开的get,set方法;javabean更正确的叫法,叫做实体类。

2、能做什么

3、怎么来做;

4、为什么能做

 

四、hibernate入门:

1、搭建hibernate环境:

hibernate用到dao层框架,可以单独使用;所以可以建立java project;也可以建立成web project;

1.1创建java project项目

预期目录结构:

 

1.2导入hibernate的jar包:

            要知道在什么里面找到的hibernate的lib的require

 

            jpa是规范也得导入;

 导入其他日志jar包,因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包。

下载链接:http://archive.apache.org/dist/logging/log4j/

slf4j下载链接:http://repo2.maven.org/maven2/org/slf4j/

http://repo2.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.2/

mysql驱动:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.0.4,做jdbc时用

 

1.3创建实体类,即Javabean

(1)使用hibernate时,不需自己手动创建表,hibernate帮把表创建;即只需创建数据库即可。

完整的实体类为:

package cn.itcast.entity;

public class User {
	/*hibernate要求实体类有一个属性唯一的*/
	private int uid;
	private String username;
	private String password;
	private String address;
	public int getUid() {
		return uid;
	}
	public void setUid(int 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;
	}
	
}

1.4配置实体类和数据库表一一对应关系(映射关系)

(1)使用配置文件实现映射关系

(1.1)创建xml格式的配置文件

             映射配置文件名称和位置没有固定要求

             建议:在实体类所在的包里创建,实体类名称.hbm.xml

(2)配置文件是xml格式,在配置文件中首先引入xml约束;

             在hibernate里面引入的约束dtd约束。

在目录:hibernate-release-5.0.7.Final\hibernate-release-5.0.7.Final\project\hibernate-core\src\main\resources\org\hibernate下

找到约束,粘贴到配置文件中即可。

    (3)配置映射关系(重点

<?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>
	<!-- 1.配置类和表对应 
		class标签
		name属性:实体类的全路径;包名
		table属性:数据库表名称
	-->
	<class name="cn.itcast.entity.User" table="t_user">
		<!-- 2.配置实体类id和表id对应
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值
		 -->
		 <!-- id标签
		 		name属性:实体类里面id属性名称
		 		column属性:生成的表字段名称
		 		name和column的值可不一样
		  -->
		 <id name="uid" column="uid">
		 	<!-- 设置数据库表id增长策略
		 		native:生成表id值就会是主键自动增长
		 	 -->
		 	 <generator class="native"></generator>
		 </id>
			 <!-- 配置其他属性和表的字段的对应 
			 	name属性:实体类属性名称
			 	column属性:生成表字段名称
			 -->
		 <property name="username" column="username"></property>
		 <property name="password" column="password"></property>
		 <property name="address" column="address"></property>
	</class>
</hibernate-mapping>

 

1.5创建hibernate的核心配置文件

数据库的配置

(1)核心配置文件的格式xml,核心配置文件名称和位置固定的

位置:必须在src下

名称:必须hibernate.cfg.xml

(2)引入dtd约束

(3)核心配置文件中做些相关配置

hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载;所以要想加载其他配置文件,只能将其他配置文件添加到核心配置文件中。

(3.1)配置数据库的信息

properties文件路径:hibernate-release-5.0.7.Final\hibernate-release-5.0.7.Final\project\hibernate-spatial\databases\postgis\resources

(3.2)配置hibernate的信息

(3.3)把映射文件放到核心配置文件中

ddl:数据定义语言;建表create,就是数据定义语言;

完整 的配置文件内容为:

<?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">root</property>
	
	<!-- 第二部分:配置hibernate的信息 可选的-->
	<!-- 输出底层SQL语句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 输出底层SQL语句 进行格式化 -->
	<property name="hibernate.format_sql">true</property>
	<!-- hibernate帮 创建表,需要配置之后
			update:如果已经有表,更新,如果没有,创建表
	-->
	<property name="hibernate.hbm2ddl.auto">update</property>
	<!--配置数据库方言
			在MySQL中实现分页,关键字limit,只能使用在mysql中
			在oracle数据库,实现分页rownum
			让hibernate框架识别不同数据库自己特有的关键字或者语句
	 -->
	<property name="hibernate。dialect">org.hibernate.dialect.MySQLDialect</property>
	
	<!-- 第三部分:把映射文件放到核心配置文件中 必须的-->
	<mapping resource="cn/itcast/entity/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

1.6实现添加操作,测试

(1)加载hibernate核心配置文件

(2)创建SessionFactory对象

Session的工厂,为了创建Session;

(3)使用SessionFactory来创建Session对象

注意:此时的Session跟http中的Session是没有任何关系的

(4)开启事务

建议,手动做事务的操作

(5)写具体逻辑crud操作

(6)提交事务

(7)关闭资源(有连接)

(1-4是固定的,5是变化的,6-7是固定的)

运行:在单元测试方法名上右击鼠标--->Run As---->JUnit Test

观察:console

package cn.itcast.hibernatetest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.itcast.entity.User;

public class HibernateDemo {
	@Test
	public void testAdd() {
		/*(1)加载hibernate核心配置文件
		在hibernate里面封装对象
		到src下面找到名称是hibernate.cfg.xml文件,
		加载到下面Configuration对象中去。
		*
		*/
		Configuration cfg=new Configuration();
		cfg.configure();
		
    	/*(2)创建SessionFactory对象
    	 * 读hibernate核心配置文件内容,创建SessionFactory
    	 * 在过程中,根据映射关系,在配置数据库里面把表创建
    	 */
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		
		/*(3)使用SessionFactory来创建Session对象
		 * 类似于jdbc连接
		 */
		Session session=sessionFactory.openSession();
		
		/*(4)开启事务
		 * 
		 */
		Transaction tx=session.beginTransaction();
		
		/*(5)写具体逻辑crud操作
		 * 添加功能
		 */
		User user=new User();
		user.setUsername("小王");
		user.setPassword("250");
		user.setAddress("日本");
		//调用session对象完成添加
		session.save(user);
		
		/*(6)提交事务
		 * 
		 */
		tx.commit();
		
		/*(7)关闭资源(有连接)
		 * 
		 */
		session.close();
		sessionFactory.close();
	}
}

看到效果:

(1)是否生成表

(2)表里面是否有记录

知识点:

xml约束有哪些?有,dtd、schema。在hibernate里面引入的约束dtd约束。

ctrl+shift+t:搜索某个类

事务:操作中的基本单元,多个操作要么都成功,要么都失败。

JUnit是java中的单元测试;

 

五、hibernate配置文件的详解:

1、映射配置文件hibernate.hbm.xml

(1)映射配置文件和位置没有固定格式

(2)映射配置文件中,标签name属性值写实体类相关内容

(2.1)class标签name属性值实体类全路径

(2.2)id标签和property标签name属性值实体类属性名称

(3)id标签和property标签中,column属性是可以省略的,其值默认为name属性值

(4)property标签type属性,设置生成表的字段的类型,hibernate自动生成对应的类型。

2、核心配置文件hibernate.cfg.xml

(1)配置写位置要求

(2)配置三部分要求

(2.1)数据库部分是必须的

(2.2)hibernate部分是可选的

(2.3)映射文件必须的

(3)核心配置文件名称和位置固定的

(3.1)位置:src下面

(3.2)名称:hibernate.cfg.xml

 

六、hibernate的api

1、Configuration

到src下面找到名称是hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)。

 

2、SessionFactory(重点

(1)使用Configuration对象来创建SessionFactory对象

在创建SessionFactory对象过程中做事情:

      根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建。

(2)创建SessionFactory过程中,这个过程特别耗资源

(2.1)在hibernate操作中,建议一个项目一般创建一个SessionFactory对象。所有人用的都是统一的这个对象。

(3)具体实现

(3.1)写工具类,写静态代码块实现,(类加载时执行,执行一次)

静态代码块在类加载时候执行,执行一次

注意:web项目中,不需要关闭session,因为第一次关闭session后,第二次再用就会得不到session。

3、Session(重点)

(1)session类似于jdbc中的connection

(2)调用session里面不同的方法来实现crud操作

(2.1)添加save方法

(2.2)修改update方法

(2.3)删除delete方法

(2.4)根据id查询get方法

(3)session对象最大特点:单线程对象(该对象只能自己用,别人不能跟我共用)

(3.1)session对象不能共用,只能自己使用。

比如360安全卫士打开是个进程,其中的电脑清理、优化加速都是每个线程,当优化加速在执行时,不能接着再点击优化加速;即单线程

4、Transaction

(1)事务对象

(2)事务提交和回滚方法

tx.commit()

tx.rollback();

(3)事务概念

事务特性:原子性,一组操作要么都成功,有一个失败,就都失败;一致性:操作之前之后数据总量没变化;隔离性:多个事务同时操作同条记录;他们之间不受影响;持久性,当提交数据库中是否生效了;

七、解决配置文件没有提示问题

1、可以上网:找到约束,帮助提示

2、为什么没有提示呐?

就是因为找不到配置文件中的约束条件

解决方法:把约束文件引入到eclipse中;

在windows菜单中选择Preference

然后:

(1)在配置文件中复制一句话

http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd

(2)

(3)重启eclipse开发工具

ALT+/:提示写代码

 

八、实验过程中出现的错误:

Attribute "column" must be declared for element type "properties".

在hibernate.hbm.xml文件中:

改为:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值