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重量级【代表会把所有的服务给予】线程安全的
//一个数据库里不能总是销毁和重建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();
}
}

时间: 2024-10-12 18:50:22

Hibernate学习笔记1的相关文章

《Hibernate学习笔记十一》:树状结构设计

<Hibernate学习笔记十一>:树状结构设计 这是马士兵老师讲解Hibernate的一个作业题,树状结构设计,这是一个比较典型的例子,因此有必要写篇博文记录下. 树状结构的设计,它是在同一个类中使用了多对一(ManyToOne)和一对多(OneToMany). 在完成这个题目我们应该按照如下的步骤进行: 1.先思考数据库的模型应该是什么样的?? 数据库中的模型应该如下:即存在id p_id 2.思考面向对象的模型,及如何来进行映射??? 根据数据库中表的特点,对象应该有id name;由于

《Hibernate学习笔记八》:组件映射

<Hibernate学习笔记八>:组件映射 前面介绍了一对一的单向.双向外键关联,例如,学生证和学生是一个一对一的关系.这篇博文主要是介绍下组件映射,即一个是另一个的一部分,例如,学生证的信息也可以作为学生信息的一部分,即在数据库中只存在学生一个表,而不是有学生和学生证两个表,并且这两个表中有一个一对一的关联关系. 如下: 有人或许会说,那我们就将学生和学生证的信息写在一个类中,则就不需要组件映射了,确实可以这样,但是,根据类的设计原则,我们一般都会将其设计为两个类,然后将学生证的信息作为一个

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

hibernate学习笔记之三(一级缓存的使用和管理)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) 一级缓存 一级缓存生命周期很短,与session生命周期一致,所以一级缓存也叫session级缓存或事务级缓存.位于缓存中的对象处于持久化状态,它与表中的相关记录对应,session能够在某些时间点,按照缓存中持久化对象的属性来同步数据库中表的记录,这一过程称为清理缓存. 一级缓存实现原理. session缓存是由它的实现类sessionImpl中定义的一些集合属性构成的,原理是保证有一个引用在关联

hibernate学习笔记之四(Hibernate中的类型)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) Hibernate中的类型 在*.hbm.xml文件中,<property name="password" column="t_pass">,hibernate根据type转换将java转换成hibernate类型,然后再转换成SQL类型,<property name="password" type="...&q

Hibernate学习笔记(3)

两年前曾经学习过Hibernate,也通过博客将Hibernate的学习过程记录下来了,地址如下: Hibernate学习笔记(1) Hibernate学习笔记(2) 最近在复习Hibernate,在重新学习的过程中,有了一些新的体会和收获,现在将其总结成博客,供以后作为参考资料使用. 一.导入相应的jar包 目前Hibernate更新到了4.x版本,在官网下载后,找到lib文件加中的required文件夹,此外还需要额外导入log4j和数据库驱动包. 二.创建Hibernate配置文件 在sr

Hibernate学习笔记(1)Hibernate配置

一 准备工作 首先我们将创建一个简单的基于控制台的(console-based)Hibernate应用程序. 我们所做的第一件事就是创建我们的开发目录,并且把所有需要用到的Java库文件放进去.解压缩从Hibernate网站下载的Hibernate发布包,并把所有需要的库文件拷到我们项目中去. 学习建User-library-hibernate,并加入相应的jar包 (a)项目右键-buildpath-configure build path-add library (b)选择User-libr

hibernate学习笔记之二(初识hibernate)

(hibernate学习笔记系列来自于 "疯狂Java" 视频学习) Hibernate概述 免费开源Java包,可以使程序和数据库的交互变得容易,并更加符合面向对象的设计. 持久化:将数据保存到数据库中 hibernate持久化类步骤 环境搭建 导入jar包,在hibernate包里的\lib\required文件夹里 导入mysql的JDBC驱动 将上述包添加到路径里面 编写持久化类 要求: 在持久化类中一般需要一个id,通常用Integer类型,这样之后操作会使用null,而不是

Hibernate学习笔记(2)Hibernate问题

(1)数据库驱动问题 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" org.hibernate.HibernateException: JDBC Driver class not found: com.m

《Hibernate学习笔记九》:多对一和一对多的关联关系

<Hibernate学习笔记九>:多对一和一对多的关联关系 前面介绍了一对一的关联关系在Hibernate应该如何来实现,这篇博文就来介绍下多对一和一对多的关联关系. 多对一和一对多的关联关系在我们的生活中也比较常见,例如,在我们学生时代,一个班级可以有多个学生,而一个学生只能属于一个班级,这就是一个多对一(一对多)的例子: 还有在我们的工作中,一个工作小组可以有多个用户,而一个用户只能属于一个小组,这也是一个多对一(一对多)的关系的例子. 1.多对一的单向关联关系 下面就以一个工作小组可以有