Hibernate经典总结(二)
st.setCreateTime(new Date(System.currentTimeMillis()));
cost.setStatus("0");
Session session = HibernateUtil.getSession();
// 开启事务
Transaction tx = session.beginTransaction();
session.save(cost);// 保存
tx.commit();// 提交事务
session.close();// 是否session
}
Hibernate经典总结
/**
* 测试更新操作
*/
public static void testUpdate() {
// 开启资费处理,更新status=1,startTime时间
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
// 按ID=189主键做条件查询
Cost cost = (Cost) session.load(Cost.class, 189);
cost.setStatus("1");// 设置为暂停状态
cost.setStartTime(new Date(System.currentTimeMillis()));// 设置为开
启时间
session.update(cost);
tx.commit();
session.close();
}
/**
* 测试删除操作
*/
public static void testDelete() {
Cost cost = new Cost();
cost.setId(189);
// Cost cost = (Cost)session.get(Cost.class, 189);
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.delete(cost);// 执行一个delete语句,按ID做条件删除
tx.commit();
session.close();
}
/**
* 测试查询操作
*/
public static void testFindAll() {
Session session = HibernateUtil.getSession();
// 利用Query执行一个HQL查询语句
Query query = session.createQuery("from Cost");
List list = query.list();
for (Cost c : list) {
System.out.println(c.getId() + " " + c.getName() + " " +
c.getBaseDuration());
}
session.close();
}
7、Hibernate封装JDBC+SQL语句过程:
Java对象—>Cost—>SQL+JDBC—>DB
insert into cost (NAME, BASE_DURATION, BASE_COST, UNIT_COST, STATUS.) values( , , , , , , , , , )
//java反射技术
Class costClass = Cost.class;
控制台输出的SQL语句:
Hibernate:
select cost_seq.nextval from dual
Hibernate:
insert into Cost
(NAME, BASE_DURATION, BASE_COST, UNIT_COST, STATUS........)
values
( , , , , , , , , , )
8、注意:
(1).Hibernate在底层对JDBC语句进行了封装,用rs.getObject(“some”)方式
获取数据。
eg:"BASE_DURATION"为数据库中表的字段名,类型为Number(5)。如果在表中该字段有null值,那么对于如下两种获取方式将出现不同的结果:
对于rs.getObject("BASE_DURATION")方式,得到的值为null
对于rs.getInt("BASE_DURATION")方式,得到的值为0
所以在Hibernate中,根据数据表创建的实体类中不能有基本数据类型,如果为基本类型,rs.getObject(“some”)得到的null值赋给基本类型会发生异常,所以要定义成相应的包装类。
(2).创建Session对象耗费时间比较多,session对象里面绑定了大量的预编译
的SQL语句。所以不能每次使用都新建一个对象。
9、Hibernate数据映射类型:
在hbm.xml中,描述属性和字段之间映射的时候,可以使用type属性指定数据
映射类型。
type属性可以指定Java类型和Hibernate类型。主要作用是指定属性值和字段
值之间转换时(即在底层执行rs.getXXX(),stmt.setXXX()时XXX的类型),采用的
转换类型。(建议采用Hibernate映射类型)
Hibernate数据映射类型主要有以下几种:
a.整数类型
byte,short,integer,long
b.浮点数类型
float,double
c.字符串类型
string
d.日期时间类型
date,time,timestamp
其中:
date只取年月日,
time只取小时分钟秒,
timestamp取完整的时间年月日小时分钟秒
e.boolean类型
该类型可以实现boo