Hibernate框架学习(一)——入门

一、框架是什么

1、框架是用来提高开发效率的

2、封装好了一些功能,我们需要使用这些功能时,调用即可,不需要手动实现

3、框架可以理解成一个半成品的项目,只要懂得如何驾驭这些功能即可

二、hibernate框架是什么

三、hibernate

1、操作数据库的时候,可以以面向对象的方式来完成,不需要书写SQL语句

2、hibernate是一款orm框架

  1)orm:object relating mapping.对象关系映射

  2)

  3)orm分4级

    hibernate属于4级:完全面向对象操作数据库

    mybatis属于2级

    dbutils属于1级

四、hibernate框架的搭建

1、下载Hibernate5

https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/

下载之后解压目录结构如下:

documentation文件夹:存放Hibernate的相关文档,包括参考文档的API文档

lib文件夹:存放Hibernate编译和运行所依赖的Jar包,其中required子目录下包含了运行Hibernate5项目必须的jar包

project文件夹:存放Hibernate各种相关的源代码

2、创建数据库和表

3、引入Hibernate的开发包

数据库安装包:

Hibernate/lib/required/*.jar:

日志记录的包:

4、创建实体(持久化类)

Hibernate使用普通Java对象(Plain Old Java Object),即POJO的编程模式来进行持久化,POJO类中包含的是与数据库表相对应的各个属性,这些属性通过getter和setter方法来访问,对外部隐藏了内部的实现细节。

 1 package cn.itheima.domain;
 2
 3 public class Customer {
 4     private Long cust_id;
 5     private String cust_name;
 6     private String cust_source;
 7     private String cust_industry;
 8     private String cust_level;
 9     private String cust_linkman;
10     private String cust_phone;
11     private String cust_mobile;
12     ......
13 }

5、创建映射文件

实体类Customer目前不具备持久化操作的能力,而Hibernate需要知道实体类Customer映射到数据库Hibernate中的哪个表,以及类中的哪个属性对应数据库的表中的哪个字段,这些都需要在映射文件中配置。

先导入约束(window--->Preferences--->XML--->XML Catalog--->User Specified Entries窗口,点击Add按钮)

在实体类Customer所在的包中,创建一个名称为Customer.hbm.xml的映射文件,在该文件中定义了实体类Customer的属性是如何映射到cst_customer表的列上的。

 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     <!-- 建立类和表的一个映射关系 -->
 7     <!--
 8         class标签:用来建立类和表的映射
 9             *name属性:类中的全路径
10             *table属性:表名(如果类名和表名一致,那么table属性可以省略)
11             *catalog属性:数据库名称,可以省略
12      -->
13     <class name="cn.itheima.domain.Customer" table="cst_customer">
14
15         <!-- 建立类中的属性与表中的主键的映射 -->
16         <!--
17             id标签:用来建立类中的属性与表中的主键字段对应
18                 *name属性:类中的属性名
19                 *column属性:表中字段名(如果类中的属性名和表中字段名一致,那么column属性可以省略)
20                  *length属性:字段的长度
21                  *type属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型
22          -->
23
24         <id name="cust_id" column="cust_id">
25             <!-- 主键生成策略 -->
26             <generator class="native"></generator>
27         </id>
28
29         <!-- 建立类中普通属性与表中的字段的映射 -->
30         <!--
31             property标签:用来建立类中的普通属性与表中的字段的对应
32             *name属性:类中的属性名
33             *column属性:表中字段名(如果类中的属性名和表中字段名一致,那么column属性可以省略)
34              *length属性:字段的长度
35              *type属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型
36          -->
37
38         <property name="cust_name" column="cust_name"></property>
39         <property name="cust_source" column="cust_source"></property>
40         <property name="cust_industry" column="cust_industry"></property>
41         <property name="cust_level" column="cust_level"></property>
42         <property name="cust_linkman" column="cust_linkman"></property>
43         <property name="cust_phone" column="cust_phone"></property>
44         <property name="cust_mobile" column="cust_mobile"></property>
45     </class>
46 </hibernate-mapping>

6、创建Hibernate的核心配置文件

Hibernate的配置文件主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。在src下创建一个名称为hibernate.cfg.xml文件。

在解压过后的Hibernate5目录下,点击project,选择etc文件,打开hibernate.properties,分别查找(Ctrl+f)MYSQL,show,hbm2

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7     <!--
 8         #hibernate.dialect org.hibernate.dialect.MySQLDialect
 9         #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
10         #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
11         #hibernate.connection.driver_class com.mysql.jdbc.Driver
12         #hibernate.connection.url jdbc:mysql:///test
13         #hibernate.connection.username gavin
14         #hibernate.connection.password
15      -->
16          <!-- 数据库驱动 -->
17         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
18         <!-- 数据库URL -->
19         <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
20          <!-- 数据库连接用户名 -->
21         <property name="hibernate.connection.username">root</property>
22          <!-- 数据库连接密码 -->
23         <property name="hibernate.connection.password">123456</property>
24         <!-- 数据库方言
25             不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
26             sql99标准: DDL 定义语言  库表的增删改查
27                       DCL 控制语言  事务 权限
28                       DML 操纵语言  增删改查
29             注意: MYSQL在选择方言时,请选择最短的方言.
30          -->
31         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
32
33     <!-- #hibernate.show_sql true
34          #hibernate.format_sql true
35     -->
36         <!-- 将hibernate生成的sql语句打印到控制台 -->
37         <property name="#hibernate.show_sql">true</property>
38         <!-- 将hibernate生成的sql语句格式化(语法缩进) -->
39         <property name="#hibernate.format_sql">true</property>
40
41     <!--
42         ## auto schema export  自动导出表结构. 自动建表
43         #hibernate.hbm2ddl.auto create        自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
44         #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
45         #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
46         #hibernate.hbm2ddl.auto validate    校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
47      -->
48         <property name="hibernate.hbm2ddl.auto">update</property>
49         <!-- 引入orm元数据
50             路径书写: 填写src下的路径
51          -->
52         <mapping resource="cn/itheima/domain/Customer.hbm.xml"/>
53     </session-factory>
54 </hibernate-configuration>

7、书写测试代码

 1 package cn.itheima.a_hello;
 2
 3 import org.hibernate.Transaction;
 4 import org.hibernate.Session;
 5 import org.hibernate.SessionFactory;
 6 import org.hibernate.cfg.Configuration;
 7 import org.junit.Test;
 8
 9 import cn.itheima.domain.Customer;
10
11 //测试Hibernate框架
12 public class Demo {
13
14     @Test
15     //保存客户
16     public void fun1(){
17         Configuration  conf=new Configuration().configure();
18
19         SessionFactory sessionFactory=conf.buildSessionFactory();
20         Session session=sessionFactory.openSession();
21         Transaction tx=session.beginTransaction();
22         //===============================
23         Customer c=new Customer();
24         c.setCust_name("百度公司");
25
26         session.save(c);//执行保存
27         //===============================
28         tx.commit();
29         session.close();
30         sessionFactory.close();
31     }
32 }

遇到的问题:

1)报错org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : cn.itheima.domain.Custom

该异常为:hibernate的映射找不到异常,即映射资源找不到

修改配置文件的路径(hibernate.cfg.xml中的Customer.hbm.xml文件),这样就可以加载到映射配置文件。

2)报错org.hibernate.exception.GenericJDBCException: could not execute statement

数据库中的表的id属性,设置了主键,但是忘记了将自动递增选项勾上

3)hibernate写入mysql中文乱码

在项目的hibernate的配置文件hibernate.cfg.xml里修改name为“hibernate.connection.url"的property的值为:

运行成功后,表cst_customer中多了一条记录,如下:

原文地址:https://www.cnblogs.com/cxq1126/p/8361208.html

时间: 2024-07-31 12:29:14

Hibernate框架学习(一)——入门的相关文章

hibernate 框架学习笔记---网上摘抄的一个非常好的例子

编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao.查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考. 首先定义接口泛型DAO接口 GenericDao package com.th.huz; import java.io.Serializable;import java.util.Collection;import java.util.Iterator;import java.uti

j2ee开发之hibernate框架学习笔记

hibernate框架技术重点学习笔记 1.针对不同的数据库,有不同的数据库实现类,使其符号对应的数据库? mysqlDaoImpl oracleDaoImpl ... ... 2.对象和表记录的转换存在着转换问题->orm,对象和关系的一种映射 3.框架:解决一种问题的方案集合! 4..配置文件 Xxx.cfg.xml  主配置文件 xxx.hbm.xml映射文件: 映射基础 普通属性 主键 集合属性 关联关系:一对多  多对一 多对多  一对一 继承结构 5.其他特性:数据库连接池  懒加载

一级缓存 ---- Hibernate框架学习

叙:hibernate中有一个特色,即,hibernate的持久态能自动更新数据库,不需要手动设置更新操作代码,而持久态的这一特色所依据的便是hibernate的一级缓存技术.那么之前学过了hibernate的三态,现在学习一下一级缓存: hibernate的一级缓存 首先,要明白什么是缓存: 什么是缓存? 缓存:一种优化方式,将数据存储在本地,当使用到保存的数据时不必再向服务器或者终端进行请求数据的操作,直接读取本地数据即可. 然后现在了解一下hibernate的缓存: hibernate缓存

二、框架学习 (一)Hibernate框架学习 (2)Hibernate概念和api使用

目录 1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) 正文 实体类编写规则 1 实体类里面属性是私有的 2 私有属性使用公开的set和get方法操作. 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的

Hibernate框架学习(二)——api详解

一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. 1 //1.创建,调用空参构造(还没有读配置文件) 2 Configuration conf=new Configuration(); 3 //2.读取指令配置文件=>空参加载方法,加载src下的hibernate.cfg.xml文件 4 conf.configure(); 5 6 //3.读取指定orm元数据(扩展),如果主配置中已经引入映射配置,不需要手动加载 7 //conf.addResource(

hibernate框架学习笔记1:搭建与测试

hibernate框架属于dao层,类似dbutils的作用,是一款ORM(对象关系映射)操作 使用hibernate框架好处是:操作数据库不需要写SQL语句,使用面向对象的方式完成 这里使用eclipse工具搭建: 官网下载:https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/ 下载.zip文件后解压: lib文件夹下的required文件夹内的jar包为必须包: 另外还需要MySQL的驱动包:

hibernate框架学习笔记2:配置文件详解

实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private String c

hibernate框架的简单入门

1.什么是框架 框架是一个半成品,框架帮我们实现了一部分的功能. 2.使用框架的最大好处 使用框架的最大好处就是,少写一部分代码但仍能实现我们所需要实现的功能. 3.什么是hiberbnate框架 (1)hibernate框架应用在javaEE三层结构中的dao层框架 (2)hibernate底层的代码就是jdbc,hibernate就是对jdbc的封装,使用hibernate就不需要写jdbc复杂的代码了,而且可以不写sql语句,就能实现对数据库的基本的,增,删,改,查. (3)hiberna

Java SSH框架学习(入门)

SSH就是 struts+spring+hibernate 的一个集成框架,是java中一种流行的JAVA WEB 应用程序开源框架.因为我最熟悉的还是ASP.NET的的MVC和Python的Django框架,今天有必要学习下java 的流行框架SSH,其实作为WEB应用的整体框架,我发现其中有很多类似的地方,比如这里的Struts就是Django中的Views层+模板层的一个前台数据填充模块,而spring 就是连接Struts和Hibernate 的中间业务逻辑层,但是这在Django中已经