hibernate 学习知识总结
时间:2014-05-05 23:52:08
收藏:0
阅读:563
1.最近用hibernate 学会很多知识,总结如下:
(1)数据库表格已经设置默认值,在进行数据插入的时候,bean里面不赋值的话,插入之后该字段依旧是null
是因为hibernate默认插入和更新所有字段,如果某些字段不需要操作,需要配置下
(i)xml文件配置方式:
<property name="account" type="java.lang.String" insert="false"> <column name="account" length="100" /> </property>
加入insert="false" 就可以使它插入时不再对该字段进行操作,此值默认为true。同理update
(ii)注释方式:
@Column(insertable=false) public Integer getOrderNo() { return orderNo; } public void setOrderNo(Integer orderNo) { this.orderNo = orderNo; }
以下是他人总结内容(原帖地址:http://blog.csdn.net/xzknet/article/details/3905741)
1)<property>元素
insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true
2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true
3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true
4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false
5)<property>元素 dynamic-update属性,设置为true,表示更新一个对象时,会生成动态SQL,当属性值发生变化时,才会包含到UPDATE语句中。 默认false
2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true
3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true
4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false
5)<property>元素 dynamic-update属性,设置为true,表示更新一个对象时,会生成动态SQL,当属性值发生变化时,才会包含到UPDATE语句中。 默认false
<class name="com.teccore.wjk.entity.Account"
table="account" dynamic-insert="true" dynamic-update="true">
6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false
7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false
6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false
7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false
Criterion是Criteria的查询条件.Criteria提供了add(Criterion
criterion)方法来添加查询条件
Criterion接口的主要实现包括:Example、Junction和SimpleExpression.
(i)Junction的实际使用是它的两个子类conjunction和disjunction,分别是使用AND和OR操作符来联结查询条件集合.
Disjunction和Conjunction是逻辑或和逻辑与,可以用这个来构造复杂的SQL查询条件,例子如下(来源:http://blog.csdn.net/whqcfp/article/details/6029061):
Disjunction disjunction = Restrictions.disjunction(); Criterion cirterion = Restrictions.sqlRestriction("SIMULPORTCAPACITY<SIMULPORTCAPACITYOCUPIED".toLowerCase()); disjunction.add(cirterion); cirterion = Restrictions.sqlRestriction("ADSLPORTCAPACITY<ADSLPORTCAPACITYOCCUPIED".toLowerCase()); disjunction.add(cirterion); cirterion = Restrictions.sqlRestriction("LANPORTCAPACITY<LANPORTCAPACITYOCCUPIED".toLowerCase()); disjunction.add(cirterion); // ONU端口,至少要录入一种端口 Conjunction conjunction = Restrictions.conjunction(); cirterion = Restrictions.eq("lanportcapacity", 0); conjunction.add(cirterion); cirterion = Restrictions.eq("simulportcapacity", 0); conjunction.add(cirterion); cirterion = Restrictions.eq("adslportcapacity", 0); conjunction.add(cirterion); disjunction.add(conjunction); queryCriteria.add(disjunction); }
构造出的sql语句如下:
select * from aaaa this_ where (simulportcapacity < simulportcapacityocupied or adslportcapacity < adslportcapacityoccupied or lanportcapacity < lanportcapacityoccupied or (this_.LANPORTCAPACITY = ? and this_.SIMULPORTCAPACITY = ? and this_.ADSLPORTCAPACITY = ?))
(ii)SimpleExpression可以通过Restrictions工具类来创建,Restrictions提供了大量的静态方法;如:eq(等于)、ge(大于等于)、between等来方法的创建Criterion查询条件,使用Criteria进行查询,主要要清晰的是Hibernate提供了那些类和方法来满足开发中查询条件的创建和组装。
List cats = sess.createCriteria(Cat.class) .add(Restrictions.like("name","Fritz%")) .add(Restrictions.between("weight",minWeight,maxWeight)) .list();
可以使用org.hibernate.criterion.Order来为查询结果排序.
List cats = sess.createCriteria(Cat.class) .add(Restrictions.like("name","F%") .addOrder(Order.asc("name")) .addOrder(Order.desc("age")) .setMaxResults(50) .list();
(未完)
评论(0)