session会话,增删改查操作数据库

import java.util.Arrays;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import com.itheima.a_hello.User;
//详解Session对象
public class SessionTest {
	@Test
	//Session对象 用于操作数据库
	//增
	public void fun1(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		
		User u = new User();
		u.setName("jerry");
		u.setPassword("1234");
		
		//调用Session的save方法保存对象到数据库中
		session.save(u);
		
		//关闭资源
		session.close();
		sf.close();
		
	}
	
	@Test
	//Session对象 用于操作数据库
	//改
	public void fun2(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//先查询出你要修改的对象
		User user = (User) session.get(User.class, 1);
		
		//在查询结果上,进行修改
		user.setName("汤姆");

		session.update(user);
		
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
		
	}
	@Test
	//Session对象 用于操作数据库
	//删
	public void fun3(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//--------------------------------------------------------
		//先查询出你要修改的对象
				User user = (User) session.get(User.class,1);
				/*User user = new User();
				user.setId(1);*/
		//根据ID删除
		session.delete(user);
		
		//---------------------------------------------------------
		
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
		
	}
	@Test
	//Session对象 用于操作数据库
	//查询get
	public void fun4(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//--------------------------------------------------------
		//先查询出你要修改的对象
				User user = (User) session.get(User.class,3);
				
		//---------------------------------------------------------
		
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
		
		System.out.println(user);
	}
	@Test
	//Session对象 用于操作数据库
	//查询 load
	public void fun5(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//--------------------------------------------------------
		//先查询出你要修改的对象
				User user = (User) session.load(User.class,3);
				
		//---------------------------------------------------------
		
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
		
		System.out.println(user);//报错,没有session
	}
	//get: get方法被调用时立刻  发送sql语句查询
	//load : 调用时并没有查询数据库,当我们需要使用该对象的时候,才查询数据
	//------------------------------------------------------------------------------------------------------------
	@Test
	//Session对象 用于操作数据库
	//查询所有User
	public void fun6(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//--------------------------------------------------------
		
		//HQL语言 => Hibernate Query Language
		//createQuery 传入hql语句查询
		//select * from t_user;
		Query query = session.createQuery("from com.itheima.a_hello.User");
		//list 将语句执行,并返回结果
		List list =  query.list();
		
		System.out.println(list);
		//---------------------------------------------------------
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
	}
	@Test
	//Session对象 用于操作数据库
	//查询所有User
	public void fun7(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//--------------------------------------------------------
		//Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
		Criteria criteria = session.createCriteria(User.class);
		
		//select * from t_user;
		List list =	criteria.list();
		
		System.out.println(list);
		//---------------------------------------------------------
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
	}
	
	@Test
	//Session对象 用于操作数据库
	//查询所有User
	public void fun8(){
		//1加载配置
		Configuration  conf = new Configuration().configure();
		//2 根据Configuration 配置信息创建 SessionFactory
		SessionFactory sf = conf.buildSessionFactory();
		//3 获得session
		Session session = sf.openSession();
		//打开事务
		Transaction ts = session.beginTransaction();
		
		//--------------------------------------------------------
			//原生的Sql查询
		SQLQuery query = session.createSQLQuery("select * from t_user");
		// addEntity 将查询结果封装到指定对象中
		query.addEntity(User.class);
		
		List list =	query.list();
		
		System.out.println(list);
		
		/*List list = query.list();
		
		for(Object[] objs : list){
			System.out.println(Arrays.toString(objs));
		}*/
		
		//---------------------------------------------------------
		//提交事务
		ts.commit();
		
		//关闭资源
		session.close();
		sf.close();
	}
//---------------------------------------------------------------------------
	/*
	 * session.save();
	 * session.update();
	 * session.delete();
	 * session.get();
	 * session.load(); 对比get
	 * session.createQuery()
	 * session.createCritieria();
	 * session.createSqlQuery();
	 * 
	 */
//-------------------------------------------------------------------
	//1 load方法.返回一个代理对象,获得其内容时,会查询数据库,是每次访问属性都会查询数据库吗?
	//答:不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过.
	//2 代理都是要基于接口的,用load方法返回的代理,就没有实现任何接口?
	//答: java中的动态代理是基于接口.  而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的.
		// 该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口.
}



报错:

org.hibernate.TypeMismatchException: Provided id of the wrong type for class com.itheima.a_hello.User. Expected: class java.lang.String, got class java.lang.Integer

修改:保持数据库的id类型和实体类中的id类型一致。

 

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

get 通过id查询,如果没有 null

load 通过id查询,如果没有抛异常


你可能感兴趣的:(Hibernate,hibernate3小白入门)