Hibernate:首先,在配置文件hibernate.cfg.xml中配置数据源其次,在HibernateSessionFactory中加载配置文件(数据源)初始化并创建session用持久化对象hibernate时从创建Sessionsession开始:Sessionsession=sessionfactory.openSession();有session后可创建Criteria、Query、SQLQuery对象操作数据库Spring:首先,在spring.xml中配置sessionFactory数据源以及mapping等资源其次,在dao类的配置中需要注入sessionFactory,继承HibernateDaoSupport类然后,利用HibernateTemplate模板类进行操作数据库如果用到分页查询,需要创建获得session对象return(List)getHibernateTemplate().execute(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException{Queryquery=session.createQuery(queryString);query.setProperties(args);returnquery.list();}});如果用纯SQL,可用sping的JdbcTemplate的模板方法进行操作数据库,需要在dao类中注入dataSource,并继承JdbcTemplate如下:privateJdbcTemplatejdbcTemplate;privateDataSourcedataSource;publicJdbcTemplategetJdbcTemplate(){if(jdbcTemplate==null){jdbcTemplate=newJdbcTemplate(dataSource);}returnjdbcTemplate;}publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}1.创建一个条件面向对象的查询对象CriteriaCriteria:代表一次查询Criterion:代表一个查询条件Restrictions:代表查询条件的工具类。步骤:1获取Hibernate的Session对象2.已Session对象创建Criteria对象3.使用Restrictions的静态方法创建Criterion4.向Criteria查询中添加查询条件5.执行Criteria的List方法返回查询结果Criteriacriteria=session.createCriteria(ClasspersistentClass)criteria.add(Expression.eq(name,zgl));备注:条件表达式:Expression和Restrictions关系–继承java.lang.Objectorg.hibernate.criterion.Restrictionsorg.hibernate.criterion.Expression对象:DetachedCriteria为了查询条件和Session分离而重复使用查询条件,使用DetachedCriteria对象DetachedCriteriadetachedCriteria=DetachedCriteria.forClass(MyTest.class);detachedCriteria.add(Expression.eq(name,zgl));detachedCriteria.addOrder(Order.asc(age));当查询时再和session绑定:Criteriac=detachedCriteria.getExecutableCriteria(session);Iteratorit=c.list().iterator();类Projections:分组、统计2.创建HQL语句查询对象QuerypublicQuerycreateQuery(StringqueryString)throwsHibernateExceptionStringhql=fromcom.Ts_User;Queryquery=session.createQuery(hql);Listquerylist=query.list();【提示】HQL语句中对象路径写全路径类名,并区分大小写A属性查询:查询结果只需要对象的某个属性如:只需name和age两个属性,则用查询结果为Object[]数组StringHQL=“selectname,agefromTs_User”;B:提供更新语句StringHQL=“updateTs_Usersetage=18”;Queryquery=session.createQuery(hql);Intret=query.executeUpdate();C:删除一样StringHQL=”deleteTs_Userwhereage=18”D:参数查询用到参数尽量用?占位符表示,并query.setProperties(Objectbena)ListObjectargs=newArrayListObject();args.add(propName);args.add(distCode);ListPropertiesConfiglist=find(fromcom.sf.module.sysmgr.domain.PropertiesConfigwherepropName=?anddistCode=?,args);联合查询:1.innerjoin2.leftouterjoin3.rightouterjoin4.fulljoin如:StringHQL=“fromts_useruserinnerjoinfetchuser.address”其中fethc必不好少,否则返回为包括user和address对象全部属性3.创建SQL语句查询对象QuerypublicSQLQuerycreateSQLQuery(StringqueryString)throwsHibernateException原SQL查询:1.获取HibernateSession对象2.编写SQL语句3.以SQL语句作为参数,调用Session的createSQLQuery方法创建查询对象。4.调用SQLQuery对象的addScalar()或者addEntity()方法将选出来的结果与标量值或实体进行关联。5.如果SQL语句保护参数,则调用Query的setXx方法赋值。6.调用Query的list方法返回查询结果集。原生SQL语句1.标量查询(object对象)【说明】:SQLQuery是Query的子接口publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{SQLQuerysqlQuery=session.createSQLQuery(select*fromts_moduleconnectbyparent_id=priormodule_idstartwithmodule_code=?);sqlQuery.setString(0,code);sqlQuery.addScalar(“name”,Hibernate.INTEGER);returnsqlQuery.list();}});}实体查询:(实体对象)在分页查询时,会用到1.setMaxResults–每次查询的最大行数2.setFirstResult从多少行开始返回结果publicListModulegetModulesByCode(finalStringcode){return(List)getHibernateTemplate().execute(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{SQLQuerysqlQuery=session.createSQLQuery(select*fromts_moduleconnectbyparent_id=priormodule_idstartwithmodule_code=?);sqlQuery.setString(0,code);sqlQuery.addEntity(Module.class);returnsqlQuery.list();}});}JDBC查询:在用JDBC查询之前需要连接数据源语句:JdbcTemplate中的封装了很多实用的方法。privateJdbcTemplatejdbcTemplate;privateDataSourcedataSource;publicJdbcTemplategetJdbcTemplate(){if(jdbcTemplate==null){jdbcTemplate=newJdbcTemplate(dataSource);}returnjdbcTemplate;}首先来介绍一下用JdbcTemplate来查询数据的方法。1.返回指定对象类型的List(query方法)publicListgetProductModle(Stringvalue)throwsDataAccessException{ListresultList=newArrayList();Listargs=newArrayList();Stringsql=selectF_CPUT_MOD_IDasid,F_CPUT_MOD_NAMEasnamefromCPUT_MOD_TWHEREF_MARKET_LOCA_ID=?orderbyF_CPUT_MOD_ID;if(StringUtils.isNotEmpty(value)){args.add(value);}resultList=this.getJdbcTemplate().query(sql,args.toArray(),newProductModleRowMapper());returnresultList;}//封装产品型号结果集privateclassProductModleRowMapperimplementsRowMapper{publicObjectmapRow(finalResultSetrs,finalintrowNum)throwsSQLException{ProductModleVOvo=newProductModleVO();vo.setProModleId((String)rs.getString(id));vo.setProModleName((String)rs.getString(name));returnvo;}}}2.返回指定类型的结果(queryForObject方法)publicStringgetCurrentPhase(Stringarg)throwsDataAccessException{StringcurrentPhase=;Stringsql=selectF_CURR_YEARfromCOMPETITION_BASE_TwhereF_COMPETITION_ID=?;Object[]o={arg};try{currentPhase=(String)this.getJdbcTemplat().queryForObject(sql,o,String.class);}catch(Exceptione){currentPhase=;e.printStackTrace();}returncurrentPhase;}3.查询结果返回Int类型(queryForInt方法)publicintcoun