一、框架是什么

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方法来访问,对外部隐藏了内部的实现细节。

 package cn.itheima.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 cust_mobile;
......
}

5、创建映射文件

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

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

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

 <?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属性:类中的全路径
*table属性:表名(如果类名和表名一致,那么table属性可以省略)
*catalog属性:数据库名称,可以省略
-->
<class name="cn.itheima.domain.Customer" table="cst_customer"> <!-- 建立类中的属性与表中的主键的映射 -->
<!--
id标签:用来建立类中的属性与表中的主键字段对应
*name属性:类中的属性名
*column属性:表中字段名(如果类中的属性名和表中字段名一致,那么column属性可以省略)
*length属性:字段的长度
*type属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型
--> <id name="cust_id" column="cust_id">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id> <!-- 建立类中普通属性与表中的字段的映射 -->
<!--
property标签:用来建立类中的普通属性与表中的字段的对应
*name属性:类中的属性名
*column属性:表中字段名(如果类中的属性名和表中字段名一致,那么column属性可以省略)
*length属性:字段的长度
*type属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型
--> <property name="cust_name" column="cust_name"></property>
<property name="cust_source" column="cust_source"></property>
<property name="cust_industry" column="cust_industry"></property>
<property name="cust_level" column="cust_level"></property>
<property name="cust_linkman" column="cust_linkman"></property>
<property name="cust_phone" column="cust_phone"></property>
<property name="cust_mobile" column="cust_mobile"></property>
</class>
</hibernate-mapping>

6、创建Hibernate的核心配置文件(必选配置4+1、可选配置3、orm元数据引入)

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

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

 <?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>
<!--
#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password
-->
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库URL -->
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
<!-- 数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库连接密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- 数据库方言
不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
sql99标准: DDL 定义语言 库表的增删改查
DCL 控制语言 事务 权限
DML 操纵语言 增删改查
注意: MYSQL在选择方言时,请选择最短的方言.
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- #hibernate.show_sql true
#hibernate.format_sql true
-->
<!-- 将hibernate生成的sql语句打印到控制台 -->
<property name="#hibernate.show_sql">true</property>
<!-- 将hibernate生成的sql语句格式化(语法缩进) -->
<property name="#hibernate.format_sql">true</property> <!--
## auto schema export 自动导出表结构. 自动建表
#hibernate.hbm2ddl.auto create 自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
#hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
#hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
#hibernate.hbm2ddl.auto validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 引入orm元数据
路径书写: 填写src下的路径
-->
<mapping resource="cn/itheima/domain/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>

7、书写测试代码

 package cn.itheima.a_hello;

 import org.hibernate.Transaction;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import cn.itheima.domain.Customer; //测试Hibernate框架
public class Demo { @Test
//保存客户
public void fun1(){
Configuration conf=new Configuration().configure(); SessionFactory sessionFactory=conf.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
//===============================
Customer c=new Customer();
c.setCust_name("百度公司"); session.save(c);//执行保存
//===============================
tx.commit();
session.close();
sessionFactory.close();
}
}

遇到的问题:

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中多了一条记录,如下:

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

  1. Hibernate入门第一讲——Hibernate框架的快速入门

    Hibernate框架的概述 什么是框架? 框架指的是软件的半成品,已经完成了部分功能. JavaEE开发的三层架构 了解框架的基本概念之后,我们就来看看Hibernate框架处于JavaEE开发的经 ...

  2. hibernate框架学习笔记6:事务

    MySQL的事务.JDBC事务操作: 详细见这篇文章:比较详细 http://www.cnblogs.com/xuyiqing/p/8430214.html 如何在hibernate中配置隔离级别: ...

  3. hibernate框架学习笔记3:API详解

    Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...

  4. [ 学习笔记 ] Hibernate框架学习之一

    一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...

  5. [ SSH框架 ] Hibernate框架学习之二

    一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...

  6. [ SSH框架 ] Hibernate框架学习之三

    一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...

  7. Hibernate 框架学习

    什么是hibernate框架? 1.它是应用在javaee 三层架构中的dao层 它的底层就是JDBC 它对JDBC进行了封装,好处就是不用写jdbc的代码,和sql语句,它是一个开源的轻量级框架,现 ...

  8. j2ee开发之hibernate框架学习笔记

    hibernate框架技术重点学习笔记 1.针对不同的数据库,有不同的数据库实现类,使其符号对应的数据库? mysqlDaoImpl oracleDaoImpl ... ... 2.对象和表记录的转换 ...

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

    实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private ...

随机推荐

  1. 修改eclipse最近访问的工程的配置文件

    此文件为:org.eclipse.ui.ide.prefs 配置项为:RECENT_WORKSPACES= 示例:RECENT_WORKSPACES=E\:\\Workspaces\\wokspace ...

  2. Codeforces 994B. Knights of a Polygonal Table

    解题思路 将骑士按力量从小到大排序,到第i个骑士的时候,前面的i-1个骑士他都可以击败,找出金币最多的k个. 用multiset存金币最多的k个骑士的金币数,如果多余k个,则删除金币数最小的,直到只有 ...

  3. web开发必看:你的网站支持https吗?

    如果有一项技术可以让网站的访问速度更快.更安全.并且seo权重提升(百度除外),而且程序员不需要改代码就可以全站使用,最重要的是,不需要额外花钱,那有这么好的事情吗? HTTP通信协议是全球万维网ww ...

  4. Unity类继承关系 图

    UnityEngine(命名空间) 其他命名空间 其他类 Object(类) 其他类(继承自Object) Component(类)(继承自Object) 其他类(继承自Component) Tran ...

  5. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  6. Pyhton学习——Day48

    # 转载:http://www.cnblogs.com/yuanchenqi/articles/6437362.html#python关于mysql的API--pymysql模块# 执行sql语句# ...

  7. 区间dp+四边形不等式优化

    区间dp+四边形优化 luogu:p2858 题意 给出一列数 \(v_i\),每天只能取两端的数,第 j 天取数价值为\(v_i \times j\),最大价值?? 转移方程 dp[i][j] :n ...

  8. sklearn学习7-----决策树(tree)

    1.使用示例 2.树模型参数:[很多参数都是用来限制树过于庞大,即担心其过拟合] #  1.criterion  gini  or  entropy:用什么作为衡量标准 ( 熵值或者Gini系数 ). ...

  9. 《Exception》第八次团队作业:Alpha冲刺(大结局)

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件测试基础技术.2.学习迭代式增量软 ...

  10. keepalived 和 heartbeat对比

    Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP): Heartbeat是基于主机或网络的服务的高可用 ...