Hibernate 学习-2

package com.yh.hib.test;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.yh.hib.entity.Emp;
import com.yh.hib.entity.EmpCondition;
import com.yh.hib.utils.DateUtils;

public class HibernateTest {

@Test
public void selEmp() {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;
// Transaction tx=null;

String name = "王加宾";
try {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.openSession();
// tx=session.beginTransaction();
Query query = session
.createQuery("from Emp where job like ? and ename=:n");// ?
// 命名参数
// query.setString(0, name);
query.setParameter("n", name);
query.setParameter(0, "%保洁%");//对问号进行赋值

List<Emp> list = query.list();
// Iterator<Emp> it = query.iterate();
// while (it.hasNext()) {
// Emp emp = it.next();
// System.out.println(emp.getEname());
// }
// 以上是1+n

// Iterator<Emp> it1=query.iterate();
// while(it1.hasNext()){
// Emp emp=it1.next();
// System.out.println(emp.getEname());
// }
for (Emp emp : list) {
System.out.println(emp.getEname());
}

// List<Emp> list1=query.list();

} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}

/**
* 按主键查找
*/
@Test
public void findById() {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;

try {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.openSession();

// Emp emp=(Emp)session.get(Emp.class, 9999);//立即加载 ,查询不存在的时候,返回null
Emp emp = (Emp) session.load(Emp.class, 9999);// 延迟加载、懒加载:用的时候才发送sql
// .查询不存在的时候,用的时候会抛出异常
System.out.println("7369员工姓名:" + emp.getEname());

} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}

}

@Test
public void saveEmp() {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;
Transaction tx = null;

try {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.getCurrentSession();// 获取当前线程中的session
// ,当事务结束,session自动关闭
tx = session.beginTransaction();

Emp emp = new Emp(); // 瞬时状态:内存中存在,数据库中不存在,不在session 中
// emp.setEmpno(9995);
emp.setEname("王加宾");
emp.setJob("保洁2");

session.save(emp);
// session.update(emp);
// session.saveOrUpdate(emp);
// session.merge(emp);

tx.commit();// 持久状态:内存中存在,数据库中存在,session 存在
// session.evict(emp);
//
// emp.setJob("经理");
//
// session.update(emp);

} catch (Exception e) {
// TODO Auto-generated catch block

e.printStackTrace();
tx.rollback();
} finally {
if (session != null && session.isOpen()) {
session.close();// 游离状态:数据库中存在,session中不存在
}
}
}

@Test
public void delEmp() {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;
Transaction tx = null;

try {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.getCurrentSession();// 获取当前线程中的session
// ,当事务结束,session自动关闭
tx = session.beginTransaction();

Emp emp = (Emp) session.get(Emp.class, 9999);

session.delete(emp);
tx.commit();

} catch (Exception e) {
// TODO Auto-generated catch block

e.printStackTrace();
tx.rollback();
} finally {
if (session != null && session.isOpen()) {
session.close();// 游离状态:数据库中存在,session中不存在
}
}
}

/**
* 多条件动态查询
*/
@Test
public void selByConditions() {//通过条件查找,实现多条件查找
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;

EmpCondition condition = new EmpCondition();

condition.setJob("CLERK");
condition.setSalary(1000d);
condition.setBeginDate(DateUtils.string2Date("1981-04-01"));
condition.setEndDate(DateUtils.string2Date("1985-09-09"));

String hql = "from Emp where 1=1";

if (condition.getJob() != null) {
hql += " and job=:job";//命名参数

}

if (condition.getSalary() != null) {
hql += " and sal>:salary";
}

if (condition.getBeginDate() != null) {
hql += " and hiredate>=:beginDate";
}

if (condition.getEndDate() != null) {
hql += " and hiredate<=:endDate";
}

try {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.openSession();

Query query = session.createQuery(hql);

query.setProperties(condition);// 以下注释代码,就是此方法的底层实现

// if(condition.getJob()!=null){
// query.setParameter("job", condition.getJob());
//
// }
//
// if(condition.getSalary()!=null){
// hql+=" and sal=:salary";
// }
//
// if(condition.getBeginDate()!=null){
// hql+=" and hiredate>=:beginDate";
// }
//
// if(condition.getEndDate()!=null){
// hql+=" and hiredate<=:endDate";
// }

List<Emp> list = query.list();
for (Emp emp : list) {
System.out.println(emp.getEname() + "*****" + emp.getJob());
}

} catch (Exception e) {
// TODO Auto-generated catch block

e.printStackTrace();

} finally {
if (session != null && session.isOpen()) {
session.close();// 游离状态:数据库中存在,session中不存在
}
}
}

}

时间: 2025-01-09 21:31:59

Hibernate 学习-2的相关文章

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

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

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

Hibernate学习——一般配置

mysql建表语句: create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) ); Employee.java package com.study; public class Employee { private

【Hibernate学习】 ——ORM(三)

前面几种关系我们以前就经常用,对于继承我们也并不陌生,经常接触的类与类之间的继承用extends关键字,那么在表与表的关系中如何表示呢?下面我们来讲继承映射. 继承有三种实现的策略,单表继承,具体表继承,类表继承.下面来分析一下这三种方式 继承关联类关系  单表继承 每棵类继承树使用一个表,可知,这三个类在一张表中.如下表: 这张表包括了父类,子类的所有属性,通过Type来区分是哪个子类. 对象模型映射到关系模型: <classname="com.bjpowernode.hibernat.

hibernate 学习知识总结

1.最近用hibernate 学会很多知识,总结如下: (1)数据库表格已经设置默认值,在进行数据插入的时候,bean里面不赋值的话,插入之后该字段依旧是null 是因为hibernate默认插入和更新所有字段,如果某些字段不需要操作,需要配置下 (i)xml文件配置方式: <property name="account" type="java.lang.String" insert="false"> <column name=

【Hibernate学习】 ——ORM(一)

Hibernate是一种能实现ORM的框架.ORM即Object Relational Mapping,对象关系映射.也就是将关系数据库中表的数据映射成为对象,也就是说将表与表之间的操作映射成对象与对象之间的操作,通过实体类来达到操作表的目的.总之就是把对数据库的操作转化为对对象的操作,从而更体现了面向对象的思想. 一对一关联映射策略包括主键关联和唯一外键关联. 单向一对一 主键关联 让两个对象有相同的主键值,表名它们之间的一对一关系,数据库没有额外的字段来维护它们之间的关系,仅仅通过表的主键来

【Hibernate学习】 ——ORM(二)

上篇博客主要介绍了一对一的关系,主要理解单向与双向的区别,主键关联与唯一外键关联的区别.下面继续介绍一对多与多对多关联. 一对多关联映射 一个班级对应多个学生 单向一对多关系 关系表: classes代码 <classname="com.bjpowernode.hibernat.Classes"table="t_classes"> <idname="id"> <generatorclass="native&

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

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

hibernate学习随记

hibernate学习随记: 一:hibernate的核心类和接口 ①  Configuration 类 它的用处是: 读取hibernate.cfg.xml 管理对象关系映射文件 <mapping resource=””> 加载hibernate 的驱动,url ,用户.. 管理hibernate配置信息 ②  hibernate.cfg.xml ③  对象关系映射文件 ④  SessionFactory (会话工厂) 可以缓存sql语句和数据(称为session级缓存)!! 是一个重量级的

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

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