首先介绍一下javaEE开发的三层架构

  Web层    也被称为表现层    它是表现层的一个设计模型:也就是大家常用的MVC开发模式

  Service层   它是和需求相关的

  DAO层   它只和数据库打交道,对数据库进行增删改查(CURD)、

  Hibernate是持久层的框架   只能对数据库进行增删改查

  框架的底层其实就是web

  框架其实就是一个骨架,准备了大量代码:框架的目的就是抽取一些重复性结构的代码,减少程序的开发量

而hibernate主要就是替换DAO层的框架,hibernate操作简单,通过保存一个实体对象,自动将数据保存到数据库,形  两个步骤:描述一个实体对象,对应数据库的表

         描述实体的属性,对应数据库表中的字段

  Hibernate的环境搭建

   1、 创建一个项目,导入相关jar包,hibernate的必须包  mysql的jar包  日志包(非必须的包,日志包就是在控制台上打印执行的sql语句)

    2、创建实体类和对应的数据库

    3、创建一个映射文件  名称为(实体类.hbm.xml)

      描述实体类和数据库的关系

      描述实体类中字段和数据库表中字段的关系

      配置核心文件   文件需要在src下创建hibernate.cfg.xml

        配置文件中 基本配置   

                基本四项(数据库驱动  连接串  用户名 和密码)、

        ·        其他配置

                加载映射文件

        下面是一个示例配置

              

<?xml version="1.0" encoding="UTF-8"?>
<!-- 约束 :规定xml的写法-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.itheima.domain" >
<!--
记忆性知识
.配置 实体和数据库表的关系
<class> 描述实体和数据库表的关系
name="" 实体的全限定类名 因为用到反射
table="" 对应的数据表名称
lazy 最后一节课 非记忆性知识:
catalog="" 数据库名称
package="" 包的名称 如果有了此配置 以后在该包下的所有类 不需要写全限定类名 只需要类的名称
但是如果不是该包下的内容 需要配置全限定名
length="" 表示字段的长度
type="" 表示字段的类型
.hibernate的类型 string
.java的类型 java.lang.String
.数据库类型 varchar()
<column name="cust_name" sql-type="数据库类型"></column>
但如果没写 默认使用实体类类的类型 -->
<class name="Customer" table="cst_customer" >
<!--
.配置 实体字段和数据库表字段的关系
2.1 特殊字段 id
<id></id>
name="" 实体的属性名称 get/set方法 去掉get首字母小写
column="" 数据库表字段的名称
column="" 配置可以省略 前提是实体的字段名称 和数据库的字段名称必须保持一致
但开发中 实体字段使用驼峰式命名规则 cust_name ==>> custName
今天省略 <generator class="native"></generator>
主键生成策略 class="native" 策略名称
native 表示使用数据库默认的本地策略
oracle和mysql的主键生成策略不一样
mysql auto_increament 自动增长
oralce sequence 序列
native 自动根据数据库 自动匹配
2.2 普通字段
-->
<id name="cust_id" column="cust_id">
<generator class="native"></generator>
</id> <!-- 普通字段 -->
<property name="cust_name" >
<!-- <column name="cust_name" sql-type="数据库类型"></column> -->
</property>
<property name="cust_source" column="cust_source"></property>
<property name="cust_industry" column="cust_industry"></property>
<property name="cust_level" ></property>
<property name="cust_phone" ></property>
<property name="cust_mobile" ></property>
</class>
</hibernate-mapping>
   核心配置文件中的其他配置
    

<?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 session的工厂  创建session对象

此处的session 指的是java和 数据库的会话

session作用 : session内部封装了操作数据的api 等效以前的connction

-->

<session-factory>

<!-- 1.基本四项 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql:///ee291_hibernate_day01</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">root</property>

<!-- 2.其他配置 从配置文件中找  都是优化内容-->

<!-- 配置方言

不同数据库的基本语法一致 但不同的数据库有自己的特色

为了方便hibernate生成不同sql使用

-->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 在控制台上是否打印sql -->

<property name="hibernate.show_sql">true</property>

<!-- 格式化sql -->

<property name="hibernate.format_sql">true</property>

<!-- ddl : 数据库定义语言 怎么创建表 怎么删除表 怎么给表加字段

没用(测试使用 测试表结构)

create-drop :

先判断数据库存不存在表 如果存在删除 创建新表(根据xml来) 操作数据 操作完以后删除表

数据库没有表 创建表的时候 xml没有指定长度 默认采用该字段的最大长度

create

先判断数据库存不存在表 如果存在删除 创建新表(根据xml来) 操作数据

数据库有表且只有一条记录

重要(上线使用)

update   : 以xml为主 修改数据库(还是以数据库为主 先创建数据库 再写实体类)

validate : 以数据库为主 如果不一致的情况数据库报错

-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- c3p0连接池

配置后报错

org.hibernate.service.spi.ServiceException: Unable to create requested service

[org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]

原因是 没有导入c3p0的连接池包

org.hibernate.connection.C3P0ConnectionProvider 不是一个类 而是一个字符串

org.hibernate.c3p0.internal.C3P0ConnectionProvider 这是一个类

为什么俩个都可以? 字符串是以前hibernate的早期版本 处理版本兼容问题

-->

<!-- <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> -->

<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>

<!-- 3.加载映射 -->

<mapping resource="com/itheima/domain/Customer.hbm.xml" />

</session-factory>

</hibernate-configuration>

一个简单的demo

    

public void demo2(){

     详解:

  Configuration 加载配置文件

*  new Configuration() 表示加载hibernate.properties文件

*   .configure() 加载hibernate.cfg.xml

*   .configure(路径) 加载hibernate.cfg.xml

*   buildSessionFactory() 构建session工厂

*   configuration.addResource(resourceName) 加载映射文件 在核心配置文件中加载过了

*  configuration.addClass(Class)   加载实体类.class  要求 映射文件的名称必须是 实体类名.hbm.xml

  *SessionFactory 由Configuration加载核心配置文件创建(基本四项)

* SessionFactory 作用 创建session对象

* SessionFactory 加载需要浪费大量资源 工厂一般不关闭

    

    

    Configuration configuration = new Configuration().configure();

    SessionFactory sessionFactory = configuration.buildSessionFactory();

    Transaction transaction = session.beginTransaction();//开启事务

 

    Customer customer = new Customer();

    customer.setCust_name("门三三石22");

    session.save(customer);

    transaction.commit(); //事务提交

    session.close();

    sessionFactory.close();

    

  session对象内部封装了一套对数据库的增删改查的方法

  

  1.查询 get(Object)

*  2.增加 save(Object)

* 3.修改 update(Object)

* 4.删除 delete(Object)

  只需要将需要操作的对象传入即可

  详细的操作可以在hibernate的doc文件中查找其具体操作方法

  

}

hibernate第一天的更多相关文章

  1. Hibernate第一个程序(最基础的增删改查) --Hibernate

    本例实现Hibernate的第一个程序,Hibernate的优点我想大家都很清楚,在这里不做过多赘述.总之,使用Hibernate对数据库操作,也就是来操作实体对象的! 项目目录: 一.第一步要做的就 ...

  2. Hibernate第一天——入门和基本操作

    第一个接触的框架就是这个Hibernate框架了,Hibernate本意是 冬眠 ,这里有必要引用CSDN上某位网友某个帖子的评论先引出框架的概念: 框架:一个软件半成品,帮你做了一些基础工作,你就可 ...

  3. Hibernate第一个例子

    我们先搭建这样的一个架构 里面包括实体类,实现类, 大配置, 小配置(映射文件), 以及架包 实体类我们就不重点介绍了 我们先把我们所需要用到的架包导入进来 我们先在src根目录下新建一个文件夹名为l ...

  4. Hibernate第一个程序

    1. 下载资源:www.hibernate.org 2. 资源介绍hibernate-release-4.3.10.Final a) Documentation  相关文档 b) Lib 相关jar包 ...

  5. Hibernate—第一个案例

    百度百科上是这样写道的:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可 ...

  6. Hibernate第一篇【介绍Hibernate,简述ORM,快速入门】

    前言 前面已经学过了Struts2框架了,紧接着就是学习Hibernate框架了-本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门 什么是Hibernate框架? Hib ...

  7. Hibernate 第一个体验程序

    首先要导入包,将下载的hibernate所有required包导入,将下载的hibernate用来写log的slf4j的api和nopjar包导入,将下载的mysql链接引擎jar包导入. 然后新建j ...

  8. SSH框架之Hibernate第一篇

    1.2Hibernate的概述: 1.2.1 什么Hibernate? Hibernate(开发源代码的对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它 ...

  9. 用my eclipse 新建hibernate 第一个程序

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 今天就来开始建我们的第一个hibernat ...

随机推荐

  1. LeetCode 63. Unique Path II(所有不同路径之二)

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  2. 走进 Xamarin Test Recorder for Xamarin.Forms

    此篇是承接之前 走进 UITest for Xamarin.Forms 的,所以如果没有看过之前的可以先看下之前的 UITest 比起上一篇纯敲代码只适合程序员的 UITest ,这一篇不管是程序员还 ...

  3. net start mongodb 服务名无效解决方案

    net start mongodb 服务名无效 或者 net start mongodb 发生错误5,拒绝访问.是因为没有用管理员权限运行cmd. 解决方案:在window中,在搜索框输入cmd后,在 ...

  4. 版本控制之四:SVN客户端重新设置帐号和密码(转)

    在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...

  5. 利用VS2008发布一个简单的webservice

    一个开发好的webservice,怎样发布出去,供其他电脑访问呢? 本文将介绍如何发布一个简单的webservice,其中的内容都是在网上查看别人文章,自己仿照着做了一遍,因此,难免会发生错误,如果发 ...

  6. Pie

    Problem Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no ...

  7. 解决打开MATLAB时出现“Waring:could not read file classpath.txt”,等问题

    估计刚安装好的matlab是不会出现这个问题的,出现问题肯定是在某一次用360或者电脑管家清理垃圾之后才会出现这个问题. 首先声明我的matlab版本是matlab R2014a,下载链接:(额,网盘 ...

  8. phonegap与H5中的接口对比

    接口 HTML5 phonegap 差异 地理定位 geolocation 单次定位: navigator.geolocation.getCurrentPosition(Success, [error ...

  9. 小米/红米导入VCF联系人乱码问题解决

    PS:尽量不要用什么豌豆荚啊.微信啊.QQ啊之类的通讯录备份,那就等于把自己的通讯录免费送给腾讯他们了....还是自己手动的好一些,但是小白用户或者经常丢手机的卖就卖吧,总比联系人都丢了要好~~~ 默 ...

  10. 自定义view-滑动开关

    介绍 前段时间,我看到了一篇关于可滑动开关Switch组件的文章,效果图如下: 思路也挺简单的:这个控件主要由田径场式背景和滑块组成.他将田径场式背景分为3部分,最左边的半圆,中间的两条直线部分和最右 ...