??xml version="1.0" encoding="utf-8" standalone="yes"?>成人中文视频,欧美国产日韩一区,久久久久久久久久久久久久久久久久av http://www.aygfsteel.com/dnalncjm/zh-cn Thu, 19 Jun 2025 20:22:58 GMT Thu, 19 Jun 2025 20:22:58 GMT 60 hibernate实体对象数据库生成(接) http://www.aygfsteel.com/dnalncjm/archive/2007/04/22/112536.html易天 易天 Sat, 21 Apr 2007 18:32:00 GMT http://www.aygfsteel.com/dnalncjm/archive/2007/04/22/112536.html http://www.aygfsteel.com/dnalncjm/comments/112536.html http://www.aygfsteel.com/dnalncjm/archive/2007/04/22/112536.html#Feedback 0 http://www.aygfsteel.com/dnalncjm/comments/commentRss/112536.html http://www.aygfsteel.com/dnalncjm/services/trackbacks/112536.html 3 ?span lang="EN-US">Hibernate ?span lang="EN-US">DAO实现
DAO 对象是模块化的数据库讉KlgQ?span lang="EN-US">DAO 对象通常包括Q对持久化类的基?span lang="EN-US">CRUD操作Q插入、查询、更新、删除)操作?span lang="EN-US">Spring?span lang="EN-US">Hibernate?span lang="EN-US">DAO实现提供了良好的支持。主要有如下两种方式?span lang="EN-US">DAO实现Q?span lang="EN-US">
l承HibernateDaoSupport 的实?span lang="EN-US">DAO
ZHibernate3.0 实现DAO
不管采用哪一U实玎ͼq种DAO 对象都极好地融合?span lang="EN-US">Spring ?span lang="EN-US">ApplicationContext中,遵@依赖注入模式Q提高解耦?span lang="EN-US">
l承HibernateDaoSupport 实现DAO
Spring ?span lang="EN-US">Hibernate ?span lang="EN-US">DAO提供工具c:HibernateDaoSupport 。该cM要提供如下两个方法,方便DAO 的实玎ͼ
public final HibernateTemplate getHibernateTemplate()
public final void setSessionFactory(SessionFactory sessionFactory)
其中Q?span lang="EN-US">setSessionFactory Ҏ用来接收Spring ?span lang="EN-US">ApplicationContext的依赖注入,可接攉|在Spring ?span lang="EN-US">SessionFactory实例Q?span lang="EN-US">getHibernateTemplateҎ则用来根据刚才的SessionFactory 产生Session Q最后生?span lang="EN-US">HibernateTemplate来完成数据库讉K?span lang="EN-US">
HibernateTemplate 的常规用?/span>
HibernateTemplate 提供非常多的常用Ҏ来完成基本的操作Q比如通常的增加、删除、修攏V查询等操作Q?span lang="EN-US">Spring 2.0 更增加对命名SQL 查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate 的常规用法,可完成大多?span lang="EN-US">DAO对象?span lang="EN-US">CRUD操作。下面是HibernateTemplate 的常用方法简介:
void delete(Object entity) Q删除指定持久化实例
deleteAll(Collection entities) Q删除集合内全部持久化类实例
find(String queryString) Q根?span lang="EN-US">HQL 查询字符串来q回实例集合
findByNamedQuery(String queryName) Q根据命名查询返回实例集?span lang="EN-US">
get(Class entityClass, Serializable id) Q根据主键加载特定持久化cȝ实例
save(Object entity) Q保存新的实?span lang="EN-US">
saveOrUpdate(Object entity) Q根据实例状态,选择保存或者更?span lang="EN-US">
update(Object entity) Q更新实例的状态,要求entity 是持久状?span lang="EN-US">
setMaxResults(int maxResults) Q设|分늚大小
Hibernate 的复杂用?/span> HibernateCallback
HibernateTemplate q提供一U更加灵zȝ方式来操作数据库Q通过q种方式可以完全使用Hibernate 的操作方式?span lang="EN-US">HibernateTemplate 的灵z访问方式是通过如下两个Ҏ完成Q?span lang="EN-US">
Object execute(HibernateCallback action)
List execute(HibernateCallback action)
q两个方法都需要一?span lang="EN-US">HibernateCallback 的实例,HibernateCallback 实例可在M有效?span lang="EN-US">Hibernate数据讉K中用。程序开发者通过HibernateCallback Q可以完全?span lang="EN-US">Hibernate灉|的方式来讉K数据库,解决Spring 装Hibernate 后灵zL不的~陷?span lang="EN-US">HibernateCallback是一个接口,该接口只有一个方?span lang="EN-US">doInHibernate(org.hibernate.Session session)Q该Ҏ只有一个参?span lang="EN-US">Session?span lang="EN-US">
通常Q程序中采用实现HibernateCallback 的匿名内部类来获?span lang="EN-US">HibernateCallback 的实例,ҎdoInHibernate 的方法体是Spring 执行的持久化操作
注意Q方?span lang="EN-US">doInHibernate Ҏ内可以访?span lang="EN-US">SessionQ该Session 对象是绑定到该线E的Session 实例。该Ҏ内的持久层操作,与不使用Spring 时的持久层操作完全相同。这保证对于复杂的持久层讉KQ依然可以?span lang="EN-US">Hibernate的访问方式?/span>
下面Q让我们看一下接 CRUD的一些方法的实现吧:
import java.io.Serializable; import java.sql.SQLException; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.orm.ObjectRetrievalFailureException; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import test.dao.Dao; public class DaoImpl extends HibernateDaoSupport implements Dao{ public List findAllBy( final Class clazz, final String name, final Object value) { // 实现Ҏ属性名和属性值查询对象,q回唯一对象 return getHibernateTemplate().executeFind( new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException,SQLException{ Criteria criteria = session.createCriteria(clazz); criteria.add(Restrictions.eq(name, value)); criteria.setCacheable( true ); return criteria.list(); } }); } public List findAllBy( final Class clazz, final Map filter, final Map sorMap, final int pageNo, final int pageSize) { // 实现q回 ҎMap中过滤条件和分页参数查询 return getHibernateTemplate().executeFind( new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException,SQLException{ Criteria criteria = session.createCriteria(clazz); filterCriteria(criteria, filter); sortCriteria(criteria,sorMap); if (pageNo != - 1 ) { criteria.setFirstResult(pageNo > 1 ? (pageNo - 1 ) * pageSize : 0 ); criteria.setMaxResults(pageSize); } criteria.setCacheable( true ); return criteria.list(); } }); } /** * 构造criteria的过滤条件的回调函数 */ protected void filterCriteria(Criteria criteria, Map filter) { if (MapUtils.isNotEmpty(filter)) { for (Iterator iterator = filter.keySet().iterator(); iterator.hasNext();) { String fieldName = (String) iterator.next(); criteria.add(Restrictions.eq(fieldName, filter.get(fieldName))); } } } /** * 构造Criteria的排序条? * * @param sortMap 排序条g. * @param criteria Criteria实例. */ protected void sortCriteria(Criteria criteria, Map sortMap) { if (MapUtils.isNotEmpty(sortMap)) { for (Iterator iterator = sortMap.keySet().iterator(); iterator.hasNext();) { String fieldName = (String) iterator.next(); String orderType = (String) sortMap.get(fieldName); criteria.addOrder(StringUtils.equalsIgnoreCase( " asc " , orderType) ? Order.asc(fieldName) : Order.desc(fieldName)); } } } public Object findBy( final Class clazz, final String name, final Object value) { // 实现Ҏ对象属性名和属性|q回唯一对象 return getHibernateTemplate().execute( new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { // TODO Auto-generated method stub Criteria criteria = session.createCriteria(clazz); criteria.add(Restrictions.eq(name,value)); List list = criteria.list(); return list == null || list.isEmpty() ? null :list.iterator().next(); } }); } public Object getObject(Class clazz, Serializable id) { // 实现q回与此cd应主键ؓid的所有?/span> Object o = getHibernateTemplate().get(clazz, id); if (o == null ){ throw new ObjectRetrievalFailureException(clazz,id); } return o; } public List getObjects(Class clazz) { // 实现q回entitycd?/span> return getHibernateTemplate().loadAll(clazz); } public void removeObject(Class clazz, Serializable id) { // 实现Ҏ数据库中与此cd应表的主键(idQ删除此对象 getHibernateTemplate().delete(getObject(clazz,id)); } public void removeObject(Object o) { // 实现删除对象 getHibernateTemplate().delete(o); } public void removeObjects(Collection objects) { // TODO Auto-generated method stub getHibernateTemplate().deleteAll(objects); } public Serializable saveObject(Object o) { // 实现序列化保存对?/span> return getHibernateTemplate().save(o); } public int total(Class clazz, Map filter) { return 0 ; // TODO Auto-generated method stub } public void updateObject(Object o) { // 实现更新对象 getHibernateTemplate().update(o); } }
然后Q我们要配置.xml
<? xml version = " 1.0 " encoding = " UTF-8 " ?> <! DOCTYPE beans PUBLIC " -//SPRING//DTD BEAN 2.0//EN " " http://www.springframework.org/dtd/spring-beans-2.0.dtd " > < beans > < bean id = " Dao " class = " test.dao.hibernate.DaoImpl " > < property name = " sessionFactory " ref= " sessionFactory " /> </ bean > </ beans >
]]>hibernate实体对象数据库生?/title> http://www.aygfsteel.com/dnalncjm/archive/2007/04/22/112535.html易天 易天 Sat, 21 Apr 2007 18:27:00 GMT http://www.aygfsteel.com/dnalncjm/archive/2007/04/22/112535.html http://www.aygfsteel.com/dnalncjm/comments/112535.html http://www.aygfsteel.com/dnalncjm/archive/2007/04/22/112535.html#Feedback 0 http://www.aygfsteel.com/dnalncjm/comments/commentRss/112535.html http://www.aygfsteel.com/dnalncjm/services/trackbacks/112535.html 首先Q我们先要理解一?/span>相关知识点:
1 、对象的序列化:Serializable
对象序列化是对象怹化的一U机Ӟ可以把序列化当成一U深度克隆的ҎQ确切的说应该是对象的序列化Q一般程序在q行Ӟ产生对象Q这些对象随着E序的停止运行而消失,但如果我们想把某些对象(因ؓ是对象,所以有各自不同的特性)保存下来Q在E序l止q行后,q些对象仍然存在Q可以在E序再次q行时读取这些对象的|或者在其他E序中利用这些保存下来的对象。这U情况下p用到对象的序列化。一般对象序列化后会保存在存储设备(盘Q上Q以文g的Ş式出现?/span>
2 ?span lang="EN-US">CRUD
CRUD是增加、读取、更新和删除几个单词的首字母?/span> ?/span>Create,Read,Update,Delete 四个单词的羃写,主要被用在描qY件系l中数据库或者持久层的基本操作功能?/span>(In computing, CRUD is an acronym for
create, retrieve, update, and delete. It is used to refer to the basic
functions of a database or persistence layer in a software system.)
在进?/span>Hibernate 开发过E中Q我们通常会?/span>DAO 模式Q有一些通用的数据操作方法,?/span>CRUD Q我们通常会将q些Ҏ集中在一?/span>DAO Q这样会便很多。DAO数据讉K接口如下Q?/span>
import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; public interface Dao { List getObjects(Class clazz); // q回数据库中与此cd应的表的所有|即entitycd中的所有信?/span> Object getObject(Class clazz, Serializable id);// q回与此cd应的表主键ؓid的所有?/span> Serializable saveObject(Object o);// 序列化保存对象?/span> void updateObject(Object o); // 更新此对?/span> void removeObject(Class clazz, Serializable id); // Ҏ数据库中与此cd应表的主键(idQ删除此对象 void removeObject(Object o); // 删除此对?/span> void removeObjects(Collection objects); /* * Ҏ属性名和属性值查询对象,q回唯一对象 */ Object findBy(Class clazz, String name, Object value); /* * Ҏ属性名和属性值查询对象,q回所以符合条件的对象 */ List findAllBy(Class clazz, String name, Object value); /** * ҎMap中过滤条件和分页参数查询. * * @param filter qo条g. * @param sortMap 排序条g. * @param pageNo 当前늠 * @param pageSize 每页昄记录? */ List findAllBy(Class clazz, Map filter, Map sorMap, int pageNo, int pageSize); /** * W合filterqo条g的记录L * @param clazz * @param filter * @return */ int total(Class clazz, Map filter); }
]]>
վ֩ģ壺
|
|
|
|
ľ |
|
|
ϰˮ |
ɽ |
ͨμ |
|
֦ |
|
|
Ϻ |
ݳ |
|
˷ |
ɽ |
ʩ |
¡ |
|
|
Ϫ |
γ |
|
Զ |
|
麣 |
|
» |
ʡ |
|
|
|
ʤ |
|
|
|
|
״ |