hibernate_day01

今日内容:
  1.hibernate框架概述;ORM 
  2.入门程序 映射/核心xml
  3.方法/接口 configuration/sessionfactory/session/transaction
目标:1.Hibernate执行流程
2.搭建框架,使用Hibernate框架完成增删改查操作

 流程:1.new Configuration().configure();读取解析hibernate.cfg.xml配置文件
      2.配置文件的<mapping resource="domain/Customer.hbm.xml[映射文件]"/>读取并解析映射信息
//创建SessionFactory对象,
//session对象
//开启事务
//编写保存代码
//提交事务
//释放资源

hibernate通过配置文件(hibernate.cfg.xml或hibernate.properties)和映射文件(      .hbm.xml)把JAVA对象或PO(Persis
tent Object持久化对象)映射到数据库中,对数据表进行CURD操作
1.应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactory对象。
  2.从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load()
 ,save(),update(),delete()和saveOrUpdate()等方法对PO进行加载/保存/更新/删除等操作;在查询的情况下,可通过Session对
 象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中
核心配置文件[数据库连接,引入映射xml]/映射配置文件[类与数据库表映射]
常用对象:configuration解析xml/sessionfactory/session CRUD操作/transaction
步骤:建立数据库表/web项目/javaBean/映射xml/核心xml/
-----------------------------------------------------------------------------------------------------------
CRM====================================
CRM项目编写三层 web层[Struts2(servlet,jsp)]/业务层[Spring(service)]/持久层[Hibernate操作数据库(bean CRUD)]
1介绍
Customer Relationship Management 客户关系管理,利用相应的信息技术及互联网技术来协调企业与顾客间在销售/营销/服
务的交互,向客户提供创新式/个性化的客户交互和服务的过程
最终目标:将面向客户的各项信息和活动集成起来,组建个以客户为中心的企业,实现对面向客户的活动的全面管理
    2模块
实现对企业销售/营销/服务等各阶段的客户信息/活动进行统一管理
涵盖企业销售/营销/用户服务等各业务流程,在业务流程中与客户相关活动都会在CRM系统统一管理
基本功能模块:
客户信息管理
联系人管理
商机管理
统计分析等
hibernate开发位置==================================== CRM持久层
  JDBC的接口规范,没有具体的实现,驱动里放接口的具体实现,JDBC代码非常固定
  DbUtils:Apache提供的对JDBC进行简单封装的开源工具类库,能简化JDBC开发,也不影响程序性能
     弊端:数据库与bean的响应参数相同才能封装,底层是以反射进行封装
  hibernate好处:简化开发,提供新功能(缓存)
  框架:软件的半成品,完成软件部分功能
案例1:完成客户的CRUD的操作====================================
  需求
1. CRM系统客户信息管理模块
新增客户信息
客户信息查询
修改客户信息
删除客户信息

2. 要实现客户的新增功能
-------------------------------------Hibernate-------------------------------
Hibernate:开放源代码的对象关系映射框架,对JDBC进行非常轻量级的对象封装,将POJO与数据库表建立映射关系,是个全自动的orm
    框架,可自动生成SQL语句,自动执行,Java程序员能随心所欲的使用对象编程思维来操纵数据库.可应用在任何使用JDBC的场合,
可在Java客户端/Servlet/JSP的Web应用中使用,意义:可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。\
  2.Hibernate:一个持久层的ORM框架!
        ORM对象关系映射
1. ORM映射:Object Relational Mapping
 O:面向对象领域的Object(JavaBean对象)
 R:关系数据库领域的Relational(表结构)
 M:映射Mapping(XML配置文件)
2. 简单一句话:Hibernate使程序员通过操作对象的方式来操作数据库表记录
优点       对JDBC做封装,简化dao层代码
 1.对JDBC访问数据库的代码做封装,简化数据访问dao层繁琐的重复性代码
 2.基于jdbc的主流持久化框架[优秀的orm实现,简化dao层编码工作]
 3.性能非常好[轻量级框架],映射灵活性出色,支持很多关系型数据库[一对一到多对多的各种复杂关系]
 EJB:sun公司提供编写javaEE的框架
快速入门
  1.运行环境
    jar包
    目录结构了解 documentation/jar/project
  2.表结构
Create database hibernate_day01;
Use hibernate_day01;
CREATE TABLE `cst_customer` (
 `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
 `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
 `cust_user_id` bigint(32) DEFAULT NULL COMMENT '负责人id',
 `cust_create_id` bigint(32) DEFAULT NULL COMMENT '创建人id',
 `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
 `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
 `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
 `cust_linkman` varchar(64) DEFAULT NULL COMMENT '联系人',
 `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
 `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
 PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8;
  3.搭建Hibernate开发环境
1.创建WEB工程,引入Hibernate开发所需jar包
 MySQL的驱动jar包
 Hibernate开发需要的jar包(资料/hibernate-release-5.0.7.Final/lib/required/所有jar包)
 日志jar包(资料/jar包/log4j/所有jar包)

  4.编写JavaBean实体类  Customer
  5.创建类与表结构的映射
1. 在JavaBean所在包下创建映射配置文件
 默认命名规则:实体类名.hbm.xml
 在xml配置文件中引入约束[引入hibernate3.0的dtd约束,不要引入4的约束]
<!DOCTYPE hibernate-mapping PUBLIC 
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
2.如果不能上网,编写配置文件是没有提示的,需要自己来配置
 复制http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd --> window --> preferences --> 搜索xml -->
 选择xml catalog /点击add/现在URI/粘贴复制的地址/选择location,选择本地的DTD的路径
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>
<class name="com.itheima.domain.Customer" table="cst_customer">
<id name="cust_id" column="cust_id">
<generator class="native"/>
</id>
<property name="cust_name" column="cust_name"/>
<property name="cust_user_id" column="cust_user_id"/>
<property name="cust_create_id" column="cust_create_id"/>
<property name="cust_source" column="cust_source"/>
<property name="cust_industry" column="cust_industry"/>
<property name="cust_level" column="cust_level"/>
<property name="cust_linkman" column="cust_linkman"/>
<property name="cust_phone" column="cust_phone"/>
<property name="cust_mobile" column="cust_mobile"/>
</class>
</hibernate-mapping>
  6.编写Hibernate核心的配置文件    

1. 在src目录下,创建名称为hibernate.cfg.xml的配置文件
2. 在XML中引入DTD约束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

3.资料/hibernate-release-5.0.7.Final/project/etc/hibernate.properties,查看具体配置信息
 必配的4大参数
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///hibernate_day01
#hibernate.connection.username root
#hibernate.connection.password 123
 数据库的方言(数据库特有的东西) [必须配置的]
#hibernate.dialect org.hibernate.dialect.MySQLDialect
 可选配置
#hibernate.show_sql true
#hibernate.format_sql true
#hibernate.hbm2ddl.auto update
 引入映射配置文件[必须引入映射文件,框架需要加载]
 <mapping resource="com/itheima/domain/Customer.hbm.xml"/>
  7.写Hibernate入门代码 
回忆:快速入门
1. 下载Hibernate框架的开发包
2. 编写数据库和表结构
3. 创建WEB的项目,导入了开发的jar包
  MySQL驱动包、Hibernate开发的必须要有的jar包、日志的jar包
4. 编写JavaBean,以后不使用基本数据类型,使用包装类
5. 编写映射的配置文件(核心),先导入开发的约束,里面正常配置标签
6. 编写hibernate的核心的配置文件,里面的内容是固定的
7. 编写代码,使用的类和方法
Hibernate映射配置文件==================================== 作用:类与表结构的映射 类与表产生关系
   映射文件:  .hbm.xml hbm(hibernate mapping)
<class>标签:类与数据库表建立映射关系
 name: 类全路径
 table:表名.(如果类名与表名一致,table属性可以省略)
 catalog:数据库名称,基本都会省略不写
 <id>标签:类中属性与表中主键建立映射  目的:配置主键
 name:类中属性名
 column:表中字段名.(如果类中属性名与表中字段名一致,column可省略)
 length:字段长度,数据库已经创建好,length可以不写.没创建好,生成表结构时,最好指定length
<property> 将类中普通属性与表中字段建立映射
 name:类中属性名
 column:表中字段名.(如果类中属性名与表中字段名一致,column可省略)
 length:数据长度
 type:数据类型[一般都不需要编写,如果要写需按着规则来]
 Hibernate数据类型 type="string"
 Java数据类型 type="java.lang.String"
 数据库字段数据类型 <column name="name" sql-type="varchar"/>
核心配置文件==================================== 两种方式 作用:连接数据库以及加载映射文件
   1.属性文件的形式 properties
hibernate.connection.driver_class=com.mysql.jdbc.Driver
缺点:不能自动加载映射的配置文件,需要每个代码类手动编写代码加载
   2.XML文件 开发基本选择
  hibernate.cfg.xml
  <property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
优点:
  格式清晰
  编写提示
  //可以在配置文件中自动加载映射配置文件[最主要的]
  ---关于hibernate.cfg.xml配置方式
   必有配置
  数据库连接信息:
hibernate.connection.driver_class:连接数据库驱动程序
hibernate.connection.url:连接数据库名称URL
hibernate.connection.username:数据库用户名
hibernate.connection.password:数据库密码
  方言:
hibernate.dialect:数据库方言
   可选的配置
  hibernate.show_sql:显示SQL 控制台
  hibernate.format_sql:格式化SQL
  hibernate.hbm2ddl.auto:通过映射转成SQL DDL(DCMQ)语句
  create 每次都会创建一个新的表.[测试用]
  create-drop 每次都会创建一个新的表,执行结束时将这个表删除[测试用]
  //update 如果有表,使用原来的表.没有表,创建新的表.同时更新表结构[添加记录].
  validate校验 如果有表,使用原来的表.同时校验映射文件与表中字段是否一致,不一致就会报错.
   加载映射
   XML方式:<mapping resource="domain/Customer.hbm.xml" />
常用接口和/类      Configuration/SessionFactory/Session/Transaction
  Configuration类/作用     作用:加载配置文件
1.Configuration类
  Configuration对象用于配置和启动Hibernate。
  Hibernate应用通过该对象来获得对象-关系映射文件中的元数据以及动态配置Hibernate的属性,创建SessionFactory对象
  简单一句话:加载Hibernate配置文件和获取SessionFactory对象
2. Configuration类的其他应用[了解]
    加载配置文件的种类[支持xml和properties],开发中基本使用XML
   如果使用properties,通过Configuration configuration = new Configuration();可以假装配置文件
  但需要手动加载映射文件 config.addResource("domain/Student.hbm.xml");
  如果采用的XML的配置文件,通过Configuration configuration = new Configuration().configure();加载配置文件
  SessionFactory:重要    
1. 生成Session对象的工厂类
2. 特点   缓存好,下次需要直接用,
  Configuration通过加载配置文件创建该对象,保存当前的数据库配置信息和所有映射关系及预定义SQL语句.同时,还负责维
  护Hibernate的二级缓存
预定义SQL语句:Configuration类创建了SessionFactory对象时,已在SessionFacotry对象中缓存一些SQL语句
常见的SQL语句是增删改查(通过主键来查询) 目的:提高效率
  一个SessionFactory实例对应一个数据库,应用从该对象中获得Session实例。
  SessionFactory是线程安全的,意味着它的一个实例可以被多个线程共享.
  SessionFactory是重量级的,不能随意创建或销毁它的实例,只访问一个数据库就只创建一个SessionFactory实例.
      应用初始化时完成
  SessionFactory需要较大的缓存[存放预定义SQL语句及实体映射信息]另外配置一个缓存插件[Hibernate的二级缓存],被多
  线程所共享
3. 总结
  一般应用使用一个SessionFactory,最好在应用启动时完成初始化。
   sessionfactory:分为           被所有的session所共享,二级缓存
     内部:缓存,sql语句,加载配置  session:一级缓存
外部:二级缓存[不讲]
    每个session把提交的数据放到sessionfactory中,下一个session可以从中获取
作用:1.一个数据库对应一个SessionFactory对象,不要轻易创建和销毁 2.被所有的session所共享,二级缓存 
   3.缓存sql语句
    HibernateUtil工具类:HibernateUtil
Session接口 [重点]    作用:完成增删改查操作
1.概述
  Session是在Hibernate中使用最频繁的接口.也被称为持久化管理器.提供和持久化有关的操作CRUD
  应用程序与数据库之间交互操作的单线程对象,是Hibernate运作的中心
  Session是线程不安全的
  所有持久化对象必须在 session 的管理下才可以进行持久化操作
  Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处
  持久化类与 Session 关联起来后就具有了持久化的能力
2.特点
  非线程安全的.应避免多个线程使用同一个Session实例
  Session轻量级,创建和销毁不会消耗太多的资源.为每次客户请求分配独立的Session实例
  Session有一个缓存,被称之为Hibernate的一级缓存.每个Session实例都有自己的缓存
3.常用方法
  save(obj)
  delete(obj)  注意:先查询再删除修改 
  get(Class,id) 通过主键查询一条记录
  update(obj)
  saveOrUpdate(obj) 保存或者修改[没有数据就保存数据,有就修改]
  createQuery() SQL语句查询
 Transaction接口  事务  
2.常用方法
  commit()提交事务
  rollback()事务回滚
3.特点
  Hibernate框架默认情况下事务不自动提交.需手动提交事务
  如果没开启事务,那每个Session的操作都相当于一个独立的事务
新增客户代码===============================================
步骤    
   在资料/crm/ui/WebRoot下所有的文件,拷贝到工程中 引入JSTL的标签库,防止JSP页面会报错
   el表达式只能在jsp中被解析






 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值