Hibernate——基础及XML配置
1、入门
hibernate是跟数据库打交道的,一般跟数据库打交道的都不简单
原始、底层直接的一些操作、编码量比较大、费时、用框架高效
把原来一点一点实现的东西,现在给个半成品,不用在这上边发时间,把重点放在业务上,而不是底层的
DAO层 Hibernate MyBatis 都是针对DAO 层的简化框架 增删改查操作数据库,这两个框架各有优缺点,市场都挺大的,你不都了解,也不太合适
MVC调用部分 Struts2.0 SpringMVC
Spring
核心特点:以对象的方式实现对数据库的增删改查操作
灵魂:映射
增删改就是调方法
难点:持久化对象的状态及其转换
2、Hibernate理解
开发过程中有许多重复性的内容,能不能定义一个类我直接把类和属性给他,他帮我封装好再给我,将来需要的时候就调它,比如每次取出来结果后都得遍历,能不能定义一个类,每次需要遍历时,我就调它
半成品 按着这个引导,精力就放在具体细节上 项目维护,代码重用方便
帮忙完成底层功能 银行要求安全 速度快 可能就不受框架约束
分层会延迟速度 各种方法调用都会延迟 ,性能会拖延
一提到持久化就是跟数据库挂钩
3、
持久化:程序数据在瞬时状态和持久状态间转换的过程
比如听一首歌,下载在磁盘上,但当我听的时候,这首歌的数据是在cpu上的,cpu是瞬时的掉电即失,磁盘是持久的
持久化的两种方式:
a、序列化
啥叫序列化?
把生成的对象信息持久化保存到文件中或流中,把字节流写入数据流 以二进制状态保存,实现了平台无关性
DataInputStream DataOutStream 读写二进制文件
FileInputStream FileOutStream 读写文本文件
BufferedReader FileReader 字符流也可以读文本文件的
啥叫Soket(套接字)?
两台计算机通过网络通信连接,实现数据的交换
持久化图示:
内存 存用户信息 瞬时状态
jdbc 操作数据库 增删改查 | |
数据库 存一张跟内存相对应的表 持久状态
JDBC回顾:
JDBC操作数据库到底有什么缺点,才催生了这么多框架来解决这个问题?
重复性工作多
代码冗余
在dao层之前一直都是把数据封装成对象来操作的,比如add数据,只有到dao层了,只能把它给拆开,不然没法执行sql语句了
反过来查询也是一样
优点:效率高
代码移植困难:比如数据库迁移,比如一开始数据量不大放在Mysql中,后来数据量大了,需要把数据移植到oracle中,由于两个数据库语句差异很大,以后一个页面一个页面的修改语句是很麻烦的
用jdbc时,在dao之前一直都是面向对象,以一个对象的形态在传递,到了dao层之后是用sql语句操作数据库,必须得把对象打散,等于这一部分就不是面向对象了,java讲究低耦合,但在这部分是和sql语句耦合在一起了,将来如果更换数据库,这部分就得全部重新写
现在不再直接去操作底层的jdbc的那些东西了,直接使用hibernate提供的那些方法,还是以对象形式传递,不用自己拆解了,是hibernate帮我做了拆分
缺点:分析型的,数据量大的
优点:事务型的增删改查
ORM:对象关系映射
编写程序的时候,以对象的方式处理数据
保存数据的时候,以关系型数据的方式存储的
4、Hibernate配置
a、选择需要的jar包:根目录下的 hibernate3.jar lib下的required 、jpa(持久化的接口) 文件夹中所有的所有jar包 放到项目的lib文件下 再加个ojdbc6(oracle数据库驱动的jar包)
b、配置文件
名字必须叫hibernate.cfg.xml
在src下new -->other-->myeclipse-->xml-->xml(basic ...) 点next create选第一个 select选第二个 hibernate/configration DTD3.0
DTD文件时在写xml文件格式时,用来规范里边能写什么不能些什么,会有代码提示
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<!-- 管跟数据库 -->
<session-factory>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:ORCL
</property>
<property name="connection.username">book</property>
<property name="connection.password">ok</property>
<!-- 描述映射文件的保存路径 -->
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="cn/bdqn/hibernate/entity/Book.hbm.xml" />
</session-factory>
</hibernate-configuration>
几个需要注意的点:
用户会话:HttpSession
hibernate和数据库的交流:session,是hibernate核心API,甭管干什么,先拿到session再说,通过会话工厂来拿到session
运行程序时,会先读配置文件,再由configration创建会话工厂
持久化类也就是实体类 po包=entity包 = bean包
凡是实体类、数据传递、缓存都需要实现序列化,然后会生成一个版本序列,主要是用来判断你存的那个类跟这个类是不是同一个
在定义持久化类时,跟数据库一一对应,数据类型尽量写包装类,不要写值类型,因为数据库允许为空,而值类型不允许为空的,除非数据库也写not null 才可以
c、映射文件
名字必须叫 Book.hbm.xml
在项目下建个包 创建book类
选中包,再如上建个新建的xml select选第二个 hibernate/Maping/ DTD 3.0
<hibernate-mapping package="cn.bdqn.hibernate.entity">
<!--上边写package的路径了,下边class就不用写全名了,直接写类名即可
name=类名 table=表名 -->
<class name="Book" table="Book">
<!-- name属性名 colum列名-->
<id name="id" column="id">
<!-- 配置主键生成方式,手动分配 -->
<generator class="assigned"></generator>
</id>
<!-- 映射普通的属性和列的对应关系 name属性名 colum列名 type 属性 java类型 -->
<property name="title" column="title" type="java.lang.String"/>
<!-- 使用hibernate内置的类型 别名设置type属性-->
<property name="author" column="author" type="string"/>
<!-- 默认地,hibernate认为属性名与列名相同,可省略colum,数据类型也可以自动判断 -->
<property name="publisher"/>
<property name="price"/>
<property name="pic"/> </class>
</hibernate-mapping>
最后再回到hibernate.cfg.xml 下 Configuration 视图下Maping --> add 选择 Book.hbm.xml
dialect 设置方言 选择对应的数据库 oracle9/10g 因为hibernate可以根据方言自动生成增删改查语句
在properties那 add 选择show sql value改成true 作用是把hibernate执行的sql语句向控制台输出自动 ; 再选择foramt sql 让sql语句格式化,易读
Hibernate——基础及XML配置的更多相关文章
- Java框架:spring框架整合hibernate框架的xml配置(使用注解的方式)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能
1.1 问题 使用Hibernate实现对员工表的增.删.改.查. 1.2 方案 Hibernate使用步骤: 导入Hibernate包,以及数据库驱动包. 引入Hibernate主配置文件hiber ...
- mybatis 基础(一) xml配置
如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬! mybatis: 1.轻量级 2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库, ...
- struts2 mybatis spring hibernate 框架 pom.xml配置 下载地址
访问以下地址:搜索需要框架的配置 选择需要的版本 http://mvnrepository.com
- Hibernate JavaBean.hbm.xml配置
主键生成策略: hibernate中必须设置主键 <generator> 由数据库维护: identity:用于自动生成主键方式(没有自增主键的数据库不使用eg:oracle) seque ...
- Hibernate学习笔记2.1(Hibernate基础配置)
Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...
- Hibernate实现有两种配置,xml配置与注释配置
hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...
- hibernate实现有两种配置,xml配置与注释配置。
(1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) <?xml version='1.0' encoding= ...
- hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
随机推荐
- angularjs 相关资料
1.angularjs 框架结构 bootstrap process :http://www.oschina.net/translate/angularjs-the-next-big-thing?pr ...
- asp显示记录条数
Sql = "select * from xin126 where ID=" & id Rs.Open Sql,Conn,1,1 %> 共有<strong st ...
- alias function varibales in Linux/GNU and Mac alias命令细说
细说,在古文言中是”奸细佞臣的话“,现如今成了”详细说明“的缩略. alias是MS-DOC中cmds中doskey的counterpart,是”别名“或者”化名“的意思 alias强大之处在于可以化 ...
- 理解逐次逼近寄存器型ADC:与其它类型ADC的架构对比【转】
转自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=86760 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨 ...
- [转]微软SerialPort秘籍[SerialPort为什么死锁程序的分析]
既然是秘籍,显然是写一些大家不常找到的,MSDN里遗漏提示大家注意的东西. 用过.net 2.0中,自带SerialPort的人,大多都遇到过.莫名其妙的执行Close的时候会死掉的问题.而Wince ...
- 【jqGrid for ASP.NET MVC Documentation】.学习笔记.3.本地化语言包
1 引用本地化语言包 在 js/i18n 文件夹中,提供了大量预定义的语言包.它包括为所有字符串定义的,包括消息,标题,分页信息,搜索/添加/删除 的对话框 文本等. 在jQuery库文件后,在jqG ...
- Linux下后台程序完成自动输入密码等交互行为的例子
今天要开发一个定时任务,然后加入cron列表中.但是有个问题摆在眼前,脚本的执行中需要输入数据库密码: mysql -u root -p << SQL use db; set names ...
- IOS 音频开发文件大小计算
音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频 https://developer.apple.com/library/ios/documentation/MusicA ...
- sql server 快捷键
书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个书签. F2 功能键 书签:移动到上一个书签. SHIFT+F2 取消查询. ALT ...
- WPF:窗体置顶
1.设置窗体TopMost属性 private DispatcherTimer timer; public Window1() { InitializeComponent(); Loaded += n ...