Hibernate-1
hibernate框架是什么
1、框架是用来提高开发效率的;2、封装好了一些功能,我们需要使用这些功能时,调用即可,不需要再手动实现;3、所以框架可以理解成是一个半成品的项目,只要懂得如何驾驭这些功能即可。
web层(jsp,structs2框架)——service层(JavaBean)——dao层(hibernate框架,帮我们完成数据库操作)。
优点:操作数据库的时候,可以以面向对象的方式来完成,不需要书写SQL语句。
hibernate是一款orm框架(对象关系映射)
orm分4级:hibernate属于4级:完全面向对象操作数据库;mybatis属于2级;dbutils属于1级。
hibernate框架的搭建
1、导包(必须包和驱动包)
2、创建数据库,准备表
3、书写orm元数据(对象与表的映射配置文件)
4、书写主配置文件(src下,文件名字为hibernate.cfg.xml)
5、书写代码测试
配置文件详解
orm元数据:
根元素:
<!--配置表与实体对象的关系-->
<!--package属性:填写一个报名。在元素内凡是需要书写完整类名的属性,可以直接写简单类名了-->
<hibernate-mapping package="cn.itheima.domain">
class元素:
<!--
class元素:配置实体与表的对应关系的
name:完整类名
table:数据库表名
-->
<class name="customer" table="cst_customer">
id元素:
<!--id元素:配置主键映射的属性
name:填写主键对应属性名
column(可选):填写表中主键列名。默认值:列名会默认使用属性名
type(可选):填写列(属性)的类型,hibernate会自动检测实体的属性类型。每个类型有三种填法:Java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空,默认值:false
length(可选):配置数据库中列的长度,默认值:使用数据库类型的最大长度
-->
<id name="cst_id">
property元素:
<!--
property元素:除id之外的普通属性映射
name:填写属性名
column(可选):填写列名
type(可选):填写列(属性)的类型,hibernate会自动检测实体的属性类型。每个类型有三种填法:Java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空,默认值是:false
length(可选):配置数据库中列的长度,默认值:使用数据库类型的最大长度
-->
<property name="cust_name" column="cust_name">
<!--<column name="cust_name" sql-type="varchar" ></column> -->
</property>
hibernnate主配置
必选属性配置(5个):
<!--数据库驱动-->
<property name="hibername.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--数据库url-->
<property name="hibernate.connection.url">jdbc:mysql://hibernate_32</property>
<!--数据库连接用户名-->
<property name="hibernate.connection.username">root</property>
<!--数据库连接密码-->
<property name="hibernate.connection.password">1234</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生成的语句格式化(语法缩进)-->
<property name="hibernate.format_sql">true</property>
<!--
## auto schema export 自动导出表结构,自动建表
#hibernate.hbm2ddl.auto create 自动建表,每次框架运行都会创建新的表,以前的表将会被覆盖,表数据会丢失。(开发环境中测试使用)
#hibernate.hbm2ddl.auto create-drop 自动建表,每次框架运行结束都会将所有表删除(开发环境中测试使用)
#hibernate.hbm2ddl.auto update(推荐使用) 自动生成表,如果已经存在不会再生成,如果表有变动自动更新表(不会删除任何数据)
#hibernate.hbmddl2.auto validate 校验。不自动生成表,每次启动会校验数据库中表是否正确,校验失败
-->
<property name="hibernate.hbmddl2.auto">validate</property>
元数据引入入配置
<!--
引入orm元数据
路径书写:填写src下的路径
-->
<mapping resource="cn/itheima/domain/Customer.hbm.xml">
hibernateAPI详解
configuration:创建——加载主配置——加载orm元数据(扩展)——创建sessionFactory
//1 创建,调用空参构造
Configuration conf = new Configuration();
//2 读取指定主配置文件-->空参加载方法,加载src下的hibernate.cfg.xml文件
conf.configure();
//3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置,不需要手动加载
//conf.addResource(resourceName)
//conf.addClass(persistentClass)
//4 根据配置信息,创建SessionFactory对象
SessionFactory sf = conf.buildSessionFactory();
SessionFactory
//学习SessionFactory对象
//SessionFactory功能:用于创建操作数据库核心对象session 对象的工厂,简单说功能就一个——创建session对象
//注意:1.SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大
2.SessionFactory属于线程安全的对象设计
//结论:保证在web项目中只创建一个SessionFactory。
//打开一个新的session对象
sf.openSession();
//获得一个与线程绑定的session对象
sf.getCurrentSession();
Session
//学习session对象
//session对象功能:表达hibernate框架与数据库之间的连接(会话)。session类似于JDBC年代的connection对象,还可以完成对数据库中数据的增删改查操作。session是hibernate操作数据库的核心对象
获得事务
//session获得操作事务的Transaction对象
//获得操作事务的tx对象
//Transaction tx = session.getTransaction();
//开启事务并获得操作事务的tx对象
//Transaction tx2 = session.beginTransaction();
//增
Customer c = new Customer();
c.setCust_name("传智播客");
session.save(c);
//查
Customer customer = session.get(Customer.class,1l);
System.out.println(customer);
//改
Customer c = session.get(Customer.class,1l);
c.setCust_name("黑马程序员");
session.update(c);
//删
Customer c = session.get(Customer.class,1l);
session.delete(c);
Transaction
封装了事务的操作
打开事务
//方式1
Transaction tx = session.getTransaction();
tx.begin();
//方式2:推荐
Transaction tx2 = session.beginTransaction();
提交事务
tx2.commit();
回滚事务
tx2.rollback();
CRM练习:保存客户
crm:customer relation manager 客户关系管理系统
准备:
1、创建web项目
2、导包(hibernate包,数据库驱动包,标签库包,BeanUtil包)
3、引入静态页面
4、搭建hibernate框架
5、思路分析
AddCustomerServlet(获得表单提交的数据并封装到Customer对象中-调用servlet保存Customer对象-重定向到Customer列表)
CustomerService:调用dao保存Customer
CustomerDao:hibernate框架完成保存操作
6、开发
7、测试