
package com.shuyinghengxie.doudou; import static org.junit.Assert.*; 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.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Map;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.shungying.hengxie.TUser;
import com.shungying.hengxie.USer; public class TEST01 { private SessionFactory sf = null ;
private Session se = null ;
private Transaction ts = null ;
//在测试用例方法被执行之前自动执行的方法
//一般用来初始化对象
@Before
public void init ()
{
//1获取配置文件
Configuration cfg = new Configuration().configure() ; //2注册配置
ServiceRegistry sr = new StandardServiceRegistryBuilder().
applySettings(cfg.getProperties()).build(); //3获取SessionFactory
sf = cfg.buildSessionFactory(sr) ; //System.out.println(sf); //4产生Session
se =sf.openSession() ; //5启动事务
ts = se.beginTransaction() ;
} //后置对象
//用来释放资源
@After
public void destroy()
{
//7提交数据
ts.commit(); //8释放资源
se.close();
sf.close(); //关闭,释放资源
} //测试 Hibernate连接
@Test
public void test()
{ //6操作数据库
//添加数据
USer u1 = new USer() ; u1.setBrithday(new Date());
u1.setMoney(2000);
u1.setName("tom");
u1.setPassword("123123"); //通过save方法将对象从临时状态转变成持久化状态
se.save(u1) ; //保存数据,并未存进数据库,只是获取自增序列的id赋值
System.out.println(u1); } //查询数据
@Test
public void test01()
{
try{
//提供两个参数
//1需要返回哪一个持久化类的实例
//2实例的标识(数据主键值)
USer us = (USer)se.get(USer.class, 4) ;//返回Object类型 //修改姓名
us.setName("前面有个大傻逼"); System.out.println(us);
}catch(Exception e)
{
System.out.println("id不存在"); e.getMessage() ;
}
//删除
//se.delete(us);
} @Test
public void test02()
{
USer us = (USer)se.get(USer.class, 15) ; System.out.println(us);
} /*
* get 立即加载数据
* 查询数据不存在返回null ,不报异常
* load 延时加载数据,使用时在加载
* 查询数据不存在会报异常
*/
@Test
public void test03()
{
USer us = (USer)se.load(USer.class, 6) ; System.out.println(us);
} //测试游离状态
@Test
public void test04()
{
//得到持久化状态的对象
USer us = (USer)se.get(USer.class, 5) ; System.out.println(us); se.close() ;//关闭Session us.setName("前面两个好大好大的傻逼"); //重新创建Session
se = sf.openSession() ; //重新开启事务
ts = se.beginTransaction() ; se.saveOrUpdate(us); System.out.println(us);
} //测试HQL
@Test
public void test05()
{
//使用HQL //1检测创建Query 对象
Query qu = se.createQuery("from USer u where user_id < ? ") ; //设置占位符
qu.setInteger(0, 10) ; //得到结果集
List<USer> list = qu.list() ; //遍历结果集
for(USer us : list )
{
System.out.println(us);//打印结果集
} /*第二种占位符,从0开始*/
Query qu1 = se.createQuery("from USer u where name = :uname ") ; qu1.setString("uname", "tom") ; //方法链调用
List<USer> list1 = null ;
list1 = se.createQuery("from USer u where user_id < ? ").setInteger(0, 10).list() ; //遍历结果集
for(USer us : list1 )
{
System.out.println(us);//打印结果集
}
} //测试分页
@Test
public void test06()
{
//设置开始行号 页码=2
//(页码 - 1 ) * 每页行数 List<USer> list = se.createQuery("from USer order by user_id ") //HQL语句
.setMaxResults(2) //设置每页显示行数
.setFirstResult(2) //设置第二页开始行号
.list() ; //遍历结果集
for(USer us : list )
{
System.out.println(us);//打印结果集
} } //测试分页
@Test
public void test07()
{
List<Object[ ]> list = se.createQuery("select name from USer group by name")
.list() ;
System.out.println(list.size());
for(Object obj : list)
{
System.out.println(obj);
}
} //测试投影查询
@Test
public void test08()
{
List<Object[ ]> list = se.createQuery("select name, money from USer")
.list(); for(Object[ ] obj : list)
{
System.out.println(obj[0] + " " + obj[1]);
} List<USer> list1 = se.createQuery("select new USer(name, money) from USer")
.list() ; for(USer us : list1 )
{
System.out.println("姓名="+us.getName()+"金额="+us.getMoney());
} } //清空表
@Test
public void test09()
{
String hql = "DELETE FROM USer " ; Query query = se.createQuery(hql); int result = query.executeUpdate(); System.out.println("Rows affected: " + result); } //清空表
@Test
public void test10()
{
TUser tu = (TUser)se.get(TUser.class, 1l) ; System.out.println(tu);
} }