package com.aowin.dao;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.aowin.model.User;
public class UserDAOTest {
private static SessionFactory sessionFactory;
//BeforeClass:在所有方法之前执行
@BeforeClass
public static void beforeClass(){
//读取配置
Configuration config = new Configuration().configure("com/aowin/res/hibernate.cfg.xml");
//创建SessionFactory对象 Hibernate操作 需要Session对象 Session对象SessionFactory对象创建而来
//SessionFactory从配置信息中创建
sessionFactory = config.buildSessionFactory();
}
//Test:要求返回值为void
@Test
public void saveUser(){
User user = new User();
user.setAddress("上海");
user.setAge(22);
user.setCreateTime(new Date());
user.setUsername("张三");
//如果用openSession 则打开的Sesion需要手动管理(开启和关闭)
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
session.close();
}
@Test
public void saveUser2(){
User user = new User();
user.setAddress("杭州西湖区");
user.setAge(23);
user.setCreateTime(new Date());
user.setUsername("舒峰");
//第二种拿到Session的方法
//getCurrentSession:不是手动管理的,交给Hibernate管理,
//前提:<property name="current_session_context_class">thread</property>
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
/**
* 根据主键 删除
*/
@Test
public void testDetele1(){
User user = new User();
user.setId(3);
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//有ID就能delete
//new的id 数据库中没有记录时 也发sql,并报错
//new的id 数据库中有记录 就删除了
session.delete(user);//Hibernate 不建议直接对数据表中的字段进行操作
session.getTransaction().commit();
}
//HQL(按名字删除)- 查询
@Test
public void getUesr() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//get():查询方法之一
User user = (User)session.get(User.class, 1);
System.out.println(user.getUsername());
session.getTransaction().commit();
}
@Test
public void testSave(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User u = (User)session.get(User.class, 4);//查询纳入session管理
u.setAddress("杭州");//持久状态在事务提交的时候会和数据库同步
session.getTransaction().commit();
}
/**
* 更新
*/
@Test
public void testUpdate1(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User user = (User)session.get(User.class, 2);
user.setUsername("舒峰");
session.update(user);
session.getTransaction().commit();
}
/**
* merge:
* 没id,往数据库增加 一条记录:发一个insert
* 有id,但是数据库中没记录:往数据库增加一条记录. 发一个select 一个insert
* 有id,数据库中有对应记录:发一个select 一个update,更新set后的字段,其他字段不变
*/
@Test
public void testUpdate2(){
User user = new User();
user.setUsername("张三");
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//merge:合并
session.merge(user);
session.getTransaction().commit();
}
@Test
public void testSave2(){
User user = new User();
user.setAddress("上海");
user.setAge(22);
user.setCreateTime(new Date());
user.setUsername("张三");
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(user);
user.setUsername("王五");
session.getTransaction().commit();
}
//HQL语句能够 实现sql的复杂操作
/**
* 按名字删除
*/
@Test
public void testDelete(){
//hql语句 类似SQL语句.
//hql操作的是model类
//SQL语句操作的是表的字段名
String hql = "delete from User u where u.username = ? ";
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//返回值表示影响的行数
int result = session.createQuery(hql).setString(0,"王五").executeUpdate();
System.out.println(result);
session.getTransaction().commit();
}
/**
* 根据id查找 get
*/
@Test
public void testGetUser1(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//Load:只有在用到的时候才去数据库查询 延迟加载
User user = (User)session.load(User.class,7);
session.getTransaction().commit();
}
@Test
public void testGetUser2(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//语句一执行就取数据库加载
User user = (User)session.get(User.class,7);
session.getTransaction().commit();
}
@Test
public void testGetAllUser(){
String hql ="from User";
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
List<User> userList = (List<User>)session.createQuery(hql).list();
for(User user : userList){
System.out.println(user.getId()+"-"+user.getUsername());
}
session.getTransaction().commit();
}
@Test
public void testSelectByUsername(){
String hql = " from User u where u.username = ? and u.age= ?";
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
List<User> userList = (List<User>)session.createQuery(hql).setString(0,"张三").setInteger(1, 22).list();
for(User user :userList){
System.out.println(user.getId()+"-"+user.getAge());
}
session.getTransaction().commit();
}
@AfterClass
public static void close(){
sessionFactory.close();
}
}
package com.aowin.dao;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.aowin.model.User;
import com.aowin.vo.UserVO;
public class UserDAO {
private static SessionFactory sessionFactory;
@BeforeClass
public static void beforClass() {
Configuration conf = new Configuration().configure("com/aowin/res/hibernate.cfg.xml");
sessionFactory = conf.buildSessionFactory();
}
@AfterClass
public static void close(){
sessionFactory.close();
}
@Test
public void testFlush() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User user = (User) session.load(User.class, 16);
user.setAddress("杭州萧山5");
// session.flush();//强制将session管理的对象(持久态)同步到数据库
user.setAddress("杭州西湖12");
session.getTransaction().commit();// 如果对数据库做修改update delete save 都要打开事务
System.out.println(user.getId());// 提交事务
}
/**
* Clear方法:清除Session管理的对象(持久态对象以HashMap形式纳入Session管理)
*/
@Test
public void testClear() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User user = (User) session.load(User.class, 1);
user.setAddress("杭州萧山5");
session.clear();
user.setAddress("杭州西湖12");
session.save(user);
session.getTransaction().commit();// 如果对数据库做修改update delete save 都要打开事务
// 提交事务
}
@Test
public void testSelect() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//String hql = from User u where u.id > ? and u.id < ? 和下面语句等效
String hql = "from User u where u.id >:a and u.id<:b";
List<User> list = session.createQuery(hql).setParameter("a", 2).setParameter("b", 16).list();
for(User user : list){
System.out.println(user.getUsername());
}
session.getTransaction().commit();
}
@Test
public void testSelect2() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("from User");
query.setMaxResults(10);//每页10条
query.setFirstResult(5);//参数5:表示从第六条开始 取10条;
List<User> list = (List<User>)query.list();
for(User user:list){
System.out.println(user.getId());
}
session.getTransaction().commit();
}
@Test
public void testLoad(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User user = (User) session.get(User.class, 1);
session.getTransaction().commit();
}
@Test
public void testSelect3() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("select new com.aowin.vo.UserVO( u.username,u.address ) from User u ");
// List<Object[]> objectList = query.list();
List<UserVO> userVOList = query.list();
for(UserVO userVO : userVOList){
System.out.println(userVO.getAddress());
}
// UserVO userVO = null;
// for(Object[] object : objectList){
// userVO = new UserVO();
// userVO.setAddress(object[0]+"");
// userVO.setUsername(object[1]+"");
// userVOList.add(userVO);
// }
session.getTransaction().commit();
}
/**
* 传原生的SQL 不是HQL
* 用createSQLQuery创建query对象
* Hibernate推荐使用HQL,但是也提供了对SQL的支持
*/
@Test
public void testSelect4() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createSQLQuery(" select * from user ");
List<Object[]> objectList = query.list();
for(Object[] object : objectList){
System.out.println(object[0]);
}
session.getTransaction().commit();
}
@Test
public void testSelect5() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createSQLQuery(" select * from user ").addEntity(User.class);
List<User> objectList = query.list();
for(User user : objectList){
System.out.println(user.getUsername());
}
session.getTransaction().commit();
}
/**
* load:默认延迟加载(lazy="true")
*
*/
@Test
public void testSelect6(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User user = (User)session.load(User.class,1);
session.getTransaction().commit();
}
/**
* 大部分的情况下 让lazy保持默认的就可以了
*/
@Test
public void testSelect7(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User user = (User)session.load(User.class,1);
System.out.println(user.getAddress());
session.getTransaction().commit();
}
/**
*Iterate:发一条hql把所有id取出来
*用的时候再根据id取对象
*Iterate会利用缓存(查id的时候不会利用缓存)
*/
@Test
public void testSelect8(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Iterator<User> userIterate = (Iterator<User>)session.createQuery("from User u where u.id>12").iterate();//查询所有的id,不会利用写的缓存,但会利用读的缓存
while(userIterate.hasNext()){
User user = userIterate.next();//真正的取查询用户,利用读的缓存和写的缓存(session管理的 HashMap)
System.out.println(user.getAddress());
}
Iterator<User> userIterate2 = (Iterator<User>)session.createQuery("from User u where u.id>12").iterate();//只发查询id的sql
while(userIterate2.hasNext()){//利用读的缓存和写的缓存
User user = userIterate2.next();//缓存中存在不去数据库中查询
user.getAddress();
}
session.getTransaction().commit();
}
/**
* session级别的缓存
* list:发一条hql 所有的数据取出来
* list:不会利用缓存
* 区别:list一次性取出来 iterate分布取出来(对数据库压力小)
*/
@Test
public void testSelect9(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
List<User> userList = session.createQuery("from User where id > ? ").setParameter(0,12).list();
for(User user :userList){
System.out.println(user.getUsername());
}
List<User> userList2 = session.createQuery("from User where id > ? ").setParameter(0,12).list();
for(User user :userList2){
System.out.println(user.getUsername());
}
session.getTransaction().commit();
}
/**
* session级别的缓存
*/
@Test
public void testSelect10(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Iterator<User> userIterate = (Iterator<User>)session.createQuery("from User u where u.id>12").iterate();
while(userIterate.hasNext()){
User user = userIterate.next();
System.out.println(user.getAddress());
}
session.clear();//清空session级别的缓存
Iterator<User> userIterate2 = (Iterator<User>)session.createQuery("from User u where u.id>12").iterate();
while(userIterate2.hasNext()){
//具体使用User的时候先取看缓存中是否存在 如果存在则直接从缓存中拿(以HashMap的形式存在缓存中)
User user = userIterate2.next();
user.getAddress();
}
session.getTransaction().commit();
}
//查询掌握好HQL形式/get/load(区别)/lazy的设置/SQL
//Criteria(了解)
//一般情况下hibernate不支持*,count(*)除外.
@Test
public void testSelect11(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
String hql = "select * from User where id > ? ";
session.createQuery(hql).setParameter(0, 12).list();
session.getTransaction().commit();
}
/**
* 返回一条记录可以用uniqueResult
* count(*) 返回的是Long类型的
*/
@Test
public void testSelect12(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
String hql = "select count(*) from User ";
// Long l = (Long)session.createQuery(hql).setParameter(0, 12).uniqueResult();
Query q = session.createQuery(hql);
Long l =(Long) q.uniqueResult();
System.out.println(l);
session.getTransaction().commit();
}
}
分享到:
相关推荐
Hibernate应用实例开发 Hibernate功能介绍
Struts2、Spring和Hibernate是Java开发中三大主流框架,它们各自解决不同的问题,并且可以协同工作,构建出高效、可维护的企业级Web应用程序。在本实例中,我们将深入探讨这三个框架的核心概念、功能以及如何将它们...
hibernate3应用实例hibernate3应用实例hibernate3应用实例hibernate3应用实例
Struts2、Spring 和 Hibernate 应用实例 在本文中,我们将详细介绍 Struts2、Spring 和 Hibernate 三种流行框架的整合应用,并通过实例来展示如何使用这些框架来实现 CRUD 操作。 Struts2 概述 Struts2 是一个...
。。Struts211、Spring和Hibernate应用实例.docx
。。Struts211、Spring和Hibernate应用实例.pdf
标题中的"jsp+tomcat+Struts2+Spring+Hibernate应用实例"揭示了一个基于Java Web技术的项目构建,其中涉及到的主要技术栈包括JSP、Tomcat服务器、Struts2、Spring和Hibernate。这个实例可能是一个典型的MVC(Model-...
【Hibernate应用案例】深入解析 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本案例将详细讲解如何在实际项目中应用Hibernate框架,包括其核心概念、配置、对象持久...
现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过...
### Struts2、Spring与Hibernate整合应用实例解析 #### 一、引言 在现代软件开发领域,尤其在Java Web应用程序开发中,Struts2、Spring与Hibernate这三大框架的结合,构成了一个强大的开发组合,被称为SSH(Struts...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...