hibernate第一天
首先介绍一下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第一天的更多相关文章
- Hibernate第一个程序(最基础的增删改查) --Hibernate
本例实现Hibernate的第一个程序,Hibernate的优点我想大家都很清楚,在这里不做过多赘述.总之,使用Hibernate对数据库操作,也就是来操作实体对象的! 项目目录: 一.第一步要做的就 ...
- Hibernate第一天——入门和基本操作
第一个接触的框架就是这个Hibernate框架了,Hibernate本意是 冬眠 ,这里有必要引用CSDN上某位网友某个帖子的评论先引出框架的概念: 框架:一个软件半成品,帮你做了一些基础工作,你就可 ...
- Hibernate第一个例子
我们先搭建这样的一个架构 里面包括实体类,实现类, 大配置, 小配置(映射文件), 以及架包 实体类我们就不重点介绍了 我们先把我们所需要用到的架包导入进来 我们先在src根目录下新建一个文件夹名为l ...
- Hibernate第一个程序
1. 下载资源:www.hibernate.org 2. 资源介绍hibernate-release-4.3.10.Final a) Documentation 相关文档 b) Lib 相关jar包 ...
- Hibernate—第一个案例
百度百科上是这样写道的:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可 ...
- Hibernate第一篇【介绍Hibernate,简述ORM,快速入门】
前言 前面已经学过了Struts2框架了,紧接着就是学习Hibernate框架了-本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门 什么是Hibernate框架? Hib ...
- Hibernate 第一个体验程序
首先要导入包,将下载的hibernate所有required包导入,将下载的hibernate用来写log的slf4j的api和nopjar包导入,将下载的mysql链接引擎jar包导入. 然后新建j ...
- SSH框架之Hibernate第一篇
1.2Hibernate的概述: 1.2.1 什么Hibernate? Hibernate(开发源代码的对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它 ...
- 用my eclipse 新建hibernate 第一个程序
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 今天就来开始建我们的第一个hibernat ...
随机推荐
- css 页面特殊显示效果
1.移动端最小设置字体为12px,如果想要更小字体效果: -webkit-transform:scale(0.9); 2.文字超过两行时,末尾显示点点的效果: overflow:hidden;text ...
- ADO.NET生成的数据库连接字符串解析
1.概述 当我们使用ADO.NET数据实体模型生成的时候,在项目目下生成一个.edmx文件的同时,还会在app.config里面出现如下一个代码串: <?xml version="1. ...
- 关于对vector3及其衍生变量的理解
关于对vector3,vector2类及其衍生变量的理解 vector3简单来讲即表示向量和点的系统类,这个结构用于处理向量和点,也包含许多做向量运算的函数. 而vector2即少一维向量的类,用于处 ...
- 正则和grep——再做正则就去死
grep 文本过滤工具 基本正则表达式 grep 语法 基本正则表达式的元字符 次数匹配 位置锚定 分组 扩展正则表达式 基本正则表达式的元字符 次数匹配 位置锚定 分组 或者 grep的介绍 lin ...
- Spring in action记录
最近一段时间重新学习了一遍SPRING,现在对这些笔记整理一下,一来算是对之前的学习有一个交代,二来当是重新学习一次,三来可以留下备份 这次学习中以SPRING IN ACTION 4这学习资料,整书 ...
- Vue源码学习02 初始化模块init.js
接上篇,我们看到了VUE分了很多模块(initMixin()stateMixin()eventsMixin()lifecycleMixin()renderMixin()),通过使用Mixin模式,都是 ...
- 微信小程序用setData修改数组或对象中的一个属性值
在page中有如下数组 data: { info:[ { name:"yuki", tou:"../img/head.jpg", zGong:130, gMon ...
- centos 源码安装python
一.准备环境 首先在官网下载想要的python对应版本http//www.python.org/downloads/source 下载tgz就可以了.文件有两种 1,Python-版本号.tgz(解压 ...
- 最长上升子序列(NlogN)总结
最长上升子序列总结 最开始的知道最长上升子序列的时候,简单DP的时候,但是后来遇到很多最长上升子序列的问题就没法用DP来解决,时间复杂度和空间复杂度都不允许.
- javascript中数组与字符串之间的转换以及字符串的替换
数组转化为字符串: var a=['aa','bb','cc']; var b=a.join('-'); console.log(b)----->'aa-bb-cc' 字符串中的替换: 1.re ...