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、测试

posted @ 2019-03-18 16:26  strawqqhat  阅读(89)  评论(0编辑  收藏  举报
#home h1{ font-size:45px; } body{ background-image: url("放你的背景图链接"); background-position: initial; background-size: cover; background-repeat: no-repeat; background-attachment: fixed; background-origin: initial; background-clip: initial; height:100%; width:100%; } #home{ opacity:0.7; } .wall{ position: fixed; top: 0; left: 0; bottom: 0; right: 0; } div#midground{ background: url("https://i.postimg.cc/PP5GtGtM/midground.png"); z-index: -1; -webkit-animation: cc 200s linear infinite; -moz-animation: cc 200s linear infinite; -o-animation: cc 200s linear infinite; animation: cc 200s linear infinite; } div#foreground{ background: url("https://i.postimg.cc/z3jZZD1B/foreground.png"); z-index: -2; -webkit-animation: cc 253s linear infinite; -o-animation: cc 253s linear infinite; -moz-animation: cc 253s linear infinite; animation: cc 253s linear infinite; } div#top{ background: url("https://i.postimg.cc/PP5GtGtM/midground.png"); z-index: -4; -webkit-animation: da 200s linear infinite; -o-animation: da 200s linear infinite; animation: da 200s linear infinite; } @-webkit-keyframes cc { from{ background-position: 0 0; transform: translateY(10px); } to{ background-position: 600% 0; } } @-o-keyframes cc { from{ background-position: 0 0; transform: translateY(10px); } to{ background-position: 600% 0; } } @-moz-keyframes cc { from{ background-position: 0 0; transform: translateY(10px); } to{ background-position: 600% 0; } } @keyframes cc { 0%{ background-position: 0 0; } 100%{ background-position: 600% 0; } } @keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } } @-webkit-keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } } @-moz-keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } } @-ms-keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } }