Hibernate学习笔记1
xml文件【封装】写SQL语句
<class class='com.briup.user',table='s_emp'>
<property name='id' column='id' type=''></propert>
<property name='name' column='name' type=''></propert>
<property name='age' column='age' type=''></propert>
</class>
解析后的语句:insert into s_emp values();
拼接;
判断插入的值与数据库中的类型是否一致。
hibernate本质的作用:从繁琐的SQL语句中解脱出来
对象持久化【应用层和DAO层的连接(查询,更新,持久化)】
ORM(object relational mapping)【对象关系映射】
orm代表的是:对象和关系型数据库的关系
域和关系型数据库的映射;
类和表的映射;
一个类对应数据库中的一个表;
类里面的对象对应着表里的一行数据;
对象里的属性对应表里的列。
user.java
user.hbm.xml这个文件是对象和关系型数据库完整的映射
hibernate.cfg.xml这个文件配置的是连接数据库需要的一些属性和相应数据源、其他配置
configuration根hibernate,作用就是读取我们的配置文件
hibernate.cfg.xml
transaction事务,在hibernate是单独被提取出来的
query操作数据库的,基于session对象
jar包导入
hibernate.jar
ojdbc14.jar
hibernate依赖的jar包:核心jarhelib
POJO类----Bean【实体对象(一般情况只有属性,方法有属性的get/set、还有就是重写Object的一些方法)】
user create table s_user(
id int id number
name String name varchar2(20)
age int age number
gender String gender varchar2(20)
bird Date bird Date);
create table s_user(
id number primary key,
name varchar2(20),
age number,
gender varchar2(20),
bird Date
);
用get或者load方式加载数据
get没有值返回的是一个null
get首先根据第二个参数去一级缓存session中找,找不到二级缓存
最后到数据库中去找,数据库找不到返回null值
load首先到一级缓存找,没有到二级缓存找,二级缓存也没有找到
,这是看程序中是否调用获取对象的属性(是否只是单纯的接受了参数),
如果不是,采取延迟加载,返回一个id为你设置的值代理对象
不会执行sql语句,如果是获取了属性,会道数据库找,
找到返回,找不到报异常ObjectNotFoundException
HQL 面向对象的hql语句
sql select * from s_emp;
hql from User u where u.name="";
User代表类名 u.name代表的是User里面的属性
hql 查询时基于query这个接口
hibernate 里面对时间java.util.Date可以直接使用
为什么使用ORM?
高效、呈现形式好
ORM中间键
Hibernate
Apache OJB
Ibatis
SQL数据库
数据检索:select
数据操作语言【DML】:insert update delete
数据定义语言【DDL】:create alter drop rename truncate
事物【DCL】:commit rollback savepoint
第一步:建立POJO类或实体Bean
import java.util.Date;
public class User {
private long id;
private String name;
private int age;
private String gender;
private Date bird;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBird() {
return bird;
}
public void setBird(Date bird) {
this.bird = bird;
}
}
第二步:建表
drop table s_user;
create table s_user(
id number primary key,
name varchar2(20),
age number,
gender varchar2(20),
bird date
);
第三步:配置ORM映射,XXX.hbm.xml XXX代表的是类名
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.briup.Bean">
<class name="User" table="s_user">
<!-- 主键的生成策略 -->
<id name="id" column="id">
<generator class="increment"></generator>
</id>
<!-- 属性 -->
<property name="name" column="name"></property>
<property name="age" column="age"></property>
<property name="gender" column="gender"></property>
<property name="bird" column="bird"></property>
</class>
</hibernate-mapping>
第四步:配置hibernate.cfg.xml,文件位置在src下
<!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="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- 数据库的四要素 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">victor</property>
<property name="hibernate.connection.password">victor</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
<property name="hibernate.show_sql">true</property>
<property name="format SQL in log and console hibernate.format_sql">true</property>
<mapping resource="com/***/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
第五步:写测试程序
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
//调用user的时候就会根据User.class去缓存中
//找到相应的内容
//读取配置文件
Configuration conf=new Configuration();
conf.configure();
//建立session的工厂
//SessionFactory重量级【代表会把所有的服务给予】线程安全的是hibernate的一级缓存
//一个数据库里不能总是销毁和重建sessionfactory对象
//维护一个二级缓存
//加载XML文件的时候根据配置文件建立相应的SQL语句
//insert into s_user values(id,name,age,gender,bird);
//建立好放在缓存中
SessionFactory sf=conf.buildSessionFactory();
//根据给出的driver url username password 取货数据库的连接
//建立连接池【建立若干个对象】
//session是hibernate的一级缓存
//线程不安全,session不能被公用
Session session=sf.openSession();
//把事务单独提取出来
Transaction tran=session.beginTransaction();
//持久化保存数据
/*//向数据库中添加数据库或修改数据
User user=new User();
//user.setId(1);
//[这个操作是判断数据库中是否有id=0的用户,有则需改,没有则添加]
user.setName("lihao");
user.setAge(15);
user.setGender("男");
user.setBird(new Date());
//调用user的时候就会根据User.class去缓存中找到相应的内容
session.save(user);*/
//主键序列添加用户信息
//session.saveOrUpdate(user);
//要插入的id无用户信息则进行添加操作,如果有用户信息则修改该id的信息
//用get或者load方式只能基于主键
/*//get方式加载数据
User user1=(User) session.get(User.class, 1L);
//System.out.println(user1);
//输出的是地址
user1.setGender("男");
session.save(user1);
//load方式加载数据
User user2=(User) session.load(User.class, 2L);
//System.out.println(user2);
user2.setGender("男");
session.save(user2);*/
/*//查询数据库中所有的数据
//用sql语句翻译 select * from s_user;
String hql="from User";
Query query=session.createQuery(hql);
List<User> list=query.list();
System.out.println(list);*/
//查询一条结果
//String hql="from User where id="+2;
String hql="from User where name='lisi'";
Query query=session.createQuery(hql);
List<User> list=query.list();
//操作删除
/*String hql="delete from User";
Query query=session.createQuery(hql);
query.executeUpdate();*/
tran.commit();
session.close();
}
}
Hibernate学习笔记1的更多相关文章
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- Hibernate学习笔记
一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...
- Hibernate学习笔记(四)
我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...
- Hibernate学习笔记(三)
我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...
- HIbernate学习笔记(一) 了解hibernate并搭建环境建立第一个hello world程序
Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象 ...
- Hibernate学习笔记-Hibernate关系映射
1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...
- Hibernate学习笔记(1)Hibernate构造
一 准备工作 首先,我们将创建一个简单的基于控制台(console-based)Hibernate应用. 我们所做的第一件事就是创建我们的开发文件夹.并把所有需要用到的Java件放进去.解压缩从Hib ...
随机推荐
- WebRTC之带宽控制部分学习(1) ------基本demo的介绍
转自:http://blog.csdn.net/u013160228/article/details/46392037 WebRTC的代码真是非常之大啊,下载以及编译了我好几天才搞完..... 可以看 ...
- Iphone [Tab Bar实现多view切换,Picker,DataPicter实现
用Tab Bar Controller处理IPhone多个view切换, 而且还附有创建空项目,picker和DataPicker的实现! 具体步骤: 1.创建一个空项目,选择User Interfa ...
- wpf textblock 会覆盖 button里面字体样式的解决方法 还有button的style覆盖。。datepicker里面的按钮的style
.(button使用contont写的时候) 当.button使用 <button.content><textBlock/></button.content>依然会 ...
- opengl纹理映射总结
大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...
- 删除表数据drop、truncate和delete的用法
说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...
- hibernate基础的CRUD的操作
保存记录 session.save(customer); 根据主键进行查询 Customer customer = (Customer)session.get(Customer.class ,1); ...
- 【js 方法】js 页面刷新location.reload和location.replace的区别 【转】
[转]:http://zccst.iteye.com/blog/2162658 reload 方法,该方法强迫浏览器刷新当前页面. 语法: location.reload([bForceGet]) 参 ...
- 【jQuery 分页】jQuery分页功能的实现
自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部 和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...
- 通过PHP扩展phpredis操作redis
我们使用phpredis,这个扩展能让你用PHP操作redis. 源码下载: phpize ./configure ); var_dump($result); echo $redis->get( ...
- 【JavaScript】变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级
参考资料http://caibaojian.com/toutiao/5446 1.所有变量声明(var)或者声明函数都会被提升到当前函数顶部 关于函数表达式,js会将代码拆分为两行代码分别执行.这里需 ...