- 浏览: 107308 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jianghe_03:
dianziermu 写道楼主,你的<prope ...
hibernate数据库连接 -
dianziermu:
楼主,你的<property name="my ...
hibernate数据库连接 -
aries:
Java开发者需坚守的十大基本准则(zhuan) -
jzp2004:
写的不错!受教了
谢谢!
Java开发者需坚守的十大基本准则(zhuan) -
lishali12345:
资料整理得真好!好东西值得收藏!
关于java日期的小结
Hibernate+Struts分页代码
关于分页显示方面的文章,网上搜索会有好几大箩,当然每个人都有自己的思路和出发点。我的基本思路也很简单,就是将搜索过程分为两个部分:“预搜索”和“分页显示”。预搜索负责查询记录主键ID集,并且在整个查询分页过程中只执行一次;分页显示负责从预搜索的主键ID集中找出当前要显示的记录,每进行一次翻页操作便执行一次,从而实现分页显示功能。由于查询的Where条件为主键ID,并且每次只查询当页显示的记录数(比如:20条),所以在重量级查询中有着一定的性能优势。
本文主要从以下三个方面(三篇文章)来进行讲解:
1. 构建生成分页变量实体、存储查询结果实体
2. 预搜索类、分页搜索类、HibernateUtil工具类部分关联代码
3. 实现预搜索、分页搜索的两个类及用Struts的Action调用分页实例
注:View视图层的JSP代码未贴出来,相信大家在得到Result后都知道如何用Struts标签显示
首先我们为查询分页构建三个基础类:Page(保存分页的当前状态值)、PageUtil(生成Page)、Result(保存查询结果),代码都有详细的文档解释,就不再另作说明了,这三个类的代码分别如下:
/**********************************Page类*********************************************/
package com.nyhr.struts.page;
/**
* 分页实体类,保存当前分页状态变量
* @author Yeno.hhr
*/
public class Page {
/** imply if the page has previous page */
private boolean hasPrePage;
/** imply if the page has next page */
private boolean hasNextPage;
/** the number of every page */
private int everyPage;
/** the total page number */
private int totalPage;
/** the total record number */
private int totalRecords;
/** the number of current page */
private int currentPage;
/** the begin index of the records by the current query */
private int beginIndex;
/** The default constructor */
public Page(){
}
/** construct the page by everyPage
* @param everyPage
* */
public Page(int everyPage){
this.everyPage = everyPage;
}
/** The whole constructor */
public Page(boolean hasPrePage, boolean hasNextPage,
int everyPage, int totalPage, int totalRecords,
int currentPage, int beginIndex) {
this.hasPrePage = hasPrePage;
this.hasNextPage = hasNextPage;
this.everyPage = everyPage;
this.totalPage = totalPage;
this.totalRecords = totalRecords;
this.currentPage = currentPage;
this.beginIndex = beginIndex;
}
/**
* @return
* Returns the beginIndex.
*/
public int getBeginIndex() {
return beginIndex;
}
/**
* @param beginIndex
* The beginIndex to set.
*/
public void setBeginIndex(int beginIndex) {
this.beginIndex = beginIndex;
}
/**
* @return
* Returns the currentPage.
*/
public int getCurrentPage() {
return currentPage;
}
/**
* @param currentPage
* The currentPage to set.
*/
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
/**
* @return
* Returns the everyPage.
*/
public int getEveryPage() {
return everyPage;
}
/**
* @param everyPage
* The everyPage to set.
*/
public void setEveryPage(int everyPage) {
this.everyPage = everyPage;
}
/**
* @return
* Returns the hasNextPage.
*/
public boolean getHasNextPage() {
return hasNextPage;
}
/**
* @param hasNextPage
* The hasNextPage to set.
*/
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
/**
* @return
* Returns the hasPrePage.
*/
public boolean getHasPrePage() {
return hasPrePage;
}
/**
* @param hasPrePage
* The hasPrePage to set.
*/
public void setHasPrePage(boolean hasPrePage) {
this.hasPrePage = hasPrePage;
}
/**
* @return Returns the totalPage.
*
*/
public int getTotalPage() {
return totalPage;
}
/**
* @param totalPage
* The totalPage to set.
*/
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
/**
* @param totalRecords
* The totalRecords to set.
*/
public void settotalRecords(int totalRecords)
{
this.totalRecords = totalRecords;
}
/**
* @return Returns the totalRecords.
*
*/
public int getTotalRecords()
{
return this.totalRecords;
}
}
/**********************************PageUtil类*********************************************/
package com.nyhr.struts.page;
/**
* 分页工具类,初始化Page对象
* @author Yeno.hhr
*/
public class PageUtil {
/**
* Use the origin page to create a new page
* @param page
* @param totalRecords
* @return
*/
public static Page createPage(Page page, int totalRecords){
return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
}
/**
* the basic page utils not including exception handler
* @param everyPage
* @param currentPage
* @param totalRecords
* @return page
*/
public static Page createPage(int everyPage, int currentPage, int totalRecords){
everyPage = getEveryPage(everyPage);
currentPage = getCurrentPage(currentPage);
int beginIndex = getBeginIndex(everyPage, currentPage);
int totalPage = getTotalPage(everyPage, totalRecords);
boolean hasNextPage = hasNextPage(currentPage, totalPage);
boolean hasPrePage = hasPrePage(currentPage);
return new Page(hasPrePage, hasNextPage,
everyPage, totalPage, totalRecords,
currentPage, beginIndex);
}
private static int getEveryPage(int everyPage){
return everyPage == 0 ? 10 : everyPage;
}
private static int getCurrentPage(int currentPage){
return currentPage == 0 ? 1 : currentPage;
}
private static int getBeginIndex(int everyPage, int currentPage){
return (currentPage - 1) * everyPage;
}
private static int getTotalPage(int everyPage, int totalRecords){
int totalPage = 0;
if(totalRecords % everyPage == 0)
totalPage = totalRecords / everyPage;
else
totalPage = totalRecords / everyPage + 1 ;
return totalPage;
}
private static boolean hasPrePage(int currentPage){
return currentPage == 1 ? false : true;
}
private static boolean hasNextPage(int currentPage, int totalPage){
return currentPage == totalPage || totalPage == 0 ? false : true;
}
}
/**********************************Result类*********************************************/
package com.nyhr.struts.page;
import java.util.List;
/**
* <p>Title: 检索结果集实体类</p>
* <p>Description: 保存分页参数及数据库查询的结果,用于页面显示</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
public class Result {
/**分页状态变量实体*/
private Page page;
/**数据库检索到的当前页结果集*/
private List content;
/**
* The default constructor
*/
public Result() {
super();
}
/**
* The constructor using fields
*
* @param page
* @param content
*/
public Result(Page page, List content) {
this.page = page;
this.content = content;
}
/**
* @return Returns the content.
*/
public List getContent() {
return content;
}
/**
* @return Returns the page.
*/
public Page getPage() {
return page;
}
/**
* The content to set.
* @param content
*/
public void setContent(List content) {
this.content = content;
}
/**
* The page to set.
* @param page
*/
public void setPage(Page page) {
this.page = page;
}
}
现在展示在大家面前的是查询分页两个核心类 :AbstractSearch(预查询初始化程序)、AbstractList(分页及初始化分页程序),代码如下:
/********************************AbstractSearch类************************************/
package com.nyhr.struts.frame;
import java.util.List;
import com.nyhr.struts.beans.HibernateUtil;
/**
* <p>Title: 预查询初始化程序</p>
* <p>Description: 所有的初始化查询必须继承此类,本类只负责预查询ID集和Page对象的初始化,不实现显示逻辑</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
public abstract class AbstractSearch {
public AbstractSearch()
{
super();
}
/**
* 根据HQL查询出记录的主键ID(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 不带查询的查询语句
* @return idArray 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql)
{
List list = HibernateUtil.query(hql);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**
* 根据HQL查询出记录的主键ID(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 带参数的查询语句
* @param bean 参数设置实体类
* @return Object[] 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql, Object bean)
{
List list = HibernateUtil.query(hql,bean);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**子类方法:根据子类的需要选择调用AbstractSearch的“带参”和“不带参”两种查询中的一种返回主键ID的数组集*/
abstract public Object[] getList();
/**子类方法:设定查询条件*/
abstract protected void condition();
}
/********************************AbstractList类************************************/
package com.nyhr.struts.frame;
import com.nyhr.struts.page.*;
import com.nyhr.struts.constant.SysConstant;
import com.nyhr.struts.hibernate.HibernateSessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import java.util.List;
import java.util.ArrayList;
/**
* <p>Title: 分页及初始化分页程序</p>
* <p>Description: 所有的初始化分页必须继承此类,如果是预查询调用,同时会初始化Page实体,否则Page实体会由FormBean提交生成</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
abstract public class AbstractList {
private Page page;
/**查询结果的主键ID集*/
private Object[] idList;
public AbstractList(){}
/**
* 预查询初始化分页构造(初次查询)
* @param hql 查询语句
* @param search 预查询类
*/
public AbstractList(AbstractSearch search){
this.idList=search.getList();
}
/**
* 查询分页构造(分页查询)
* @param page 分页状态实体
* @param idList
*/
public AbstractList(Page page, Object[] idList){
this.idList=idList;
this.page=page;
}
/**子类方法:设置分页查询的查询语句*/
abstract protected String getHql();
/**
* 返回查询结果
* @return Result
*/
public Result getResult(){
if(page==null){
if(idList==null)
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,0);
else
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,idList.length);
}
return new Result(page, getListByPage());
}
/**
* 分页查询,返回当前页的查询结果集
* @param hql
* @return list 结果集
*/
public List getListByPage(){
List list = null;
if (page.getTotalPage() < 1)
return list;
try{
String hql=getHql();
if(hql==null || hql.equals(""))
return list;
Object[] bean=getCurrentIds();
if(bean!=null)
list=HibernateUtil.query(hql,bean);
else
list=HibernateUtil.query(hql);
}catch(Exception e){
System.out.println(e.getMessage());
throw new RuntimeException(e);
}
return list;
}
/**
* 从查询结果的ID集中找出当前页的ID集
* @param arr 所有查询结果的主键ID集
* @return Object[]
*/
private Object[] getCurrentIds(){
if(idList==null) return null;
ArrayList<Object> list = new ArrayList<Object>();
int begin = page.getBeginIndex();
int ends = page.getTotalRecords();
int end = begin+page.getEveryPage();
if (end >= ends)
end = ends;
for (int l=begin;l<end;l++){
list.add(idList[l]);
}
return list.toArray();
}
/**
* 返回查询结果主键ID集的字符串组合形式
* @return String
*/
public String getIdList(){
String ids="";
if(idList == null)
return ids;
for(int x=0; x<idList.length; x++){
ids+=idList[x].toString();
if(x<idList.length-1)
ids+=",";
}
return ids;
}
}
/********************************HibernateUtil类************************************/
public class HibernateUtil {
private HibernateUtil(){}
/**
* 执行数据库查询,返回结果集List
* @param hsql HSQL查询语句
* @return list 结果集
*/
public static List query(String hql) {
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try{
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
}finally {
HibernateSessionFactory.closeSession();
}
return list;
}
public static List query(String hql, Object bean){
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try {
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
query.setProperties(bean);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
} finally {
HibernateSessionFactory.closeSession();
}
return list;
}
}
关于分页显示方面的文章,网上搜索会有好几大箩,当然每个人都有自己的思路和出发点。我的基本思路也很简单,就是将搜索过程分为两个部分:“预搜索”和“分页显示”。预搜索负责查询记录主键ID集,并且在整个查询分页过程中只执行一次;分页显示负责从预搜索的主键ID集中找出当前要显示的记录,每进行一次翻页操作便执行一次,从而实现分页显示功能。由于查询的Where条件为主键ID,并且每次只查询当页显示的记录数(比如:20条),所以在重量级查询中有着一定的性能优势。
本文主要从以下三个方面(三篇文章)来进行讲解:
1. 构建生成分页变量实体、存储查询结果实体
2. 预搜索类、分页搜索类、HibernateUtil工具类部分关联代码
3. 实现预搜索、分页搜索的两个类及用Struts的Action调用分页实例
注:View视图层的JSP代码未贴出来,相信大家在得到Result后都知道如何用Struts标签显示
首先我们为查询分页构建三个基础类:Page(保存分页的当前状态值)、PageUtil(生成Page)、Result(保存查询结果),代码都有详细的文档解释,就不再另作说明了,这三个类的代码分别如下:
/**********************************Page类*********************************************/
package com.nyhr.struts.page;
/**
* 分页实体类,保存当前分页状态变量
* @author Yeno.hhr
*/
public class Page {
/** imply if the page has previous page */
private boolean hasPrePage;
/** imply if the page has next page */
private boolean hasNextPage;
/** the number of every page */
private int everyPage;
/** the total page number */
private int totalPage;
/** the total record number */
private int totalRecords;
/** the number of current page */
private int currentPage;
/** the begin index of the records by the current query */
private int beginIndex;
/** The default constructor */
public Page(){
}
/** construct the page by everyPage
* @param everyPage
* */
public Page(int everyPage){
this.everyPage = everyPage;
}
/** The whole constructor */
public Page(boolean hasPrePage, boolean hasNextPage,
int everyPage, int totalPage, int totalRecords,
int currentPage, int beginIndex) {
this.hasPrePage = hasPrePage;
this.hasNextPage = hasNextPage;
this.everyPage = everyPage;
this.totalPage = totalPage;
this.totalRecords = totalRecords;
this.currentPage = currentPage;
this.beginIndex = beginIndex;
}
/**
* @return
* Returns the beginIndex.
*/
public int getBeginIndex() {
return beginIndex;
}
/**
* @param beginIndex
* The beginIndex to set.
*/
public void setBeginIndex(int beginIndex) {
this.beginIndex = beginIndex;
}
/**
* @return
* Returns the currentPage.
*/
public int getCurrentPage() {
return currentPage;
}
/**
* @param currentPage
* The currentPage to set.
*/
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
/**
* @return
* Returns the everyPage.
*/
public int getEveryPage() {
return everyPage;
}
/**
* @param everyPage
* The everyPage to set.
*/
public void setEveryPage(int everyPage) {
this.everyPage = everyPage;
}
/**
* @return
* Returns the hasNextPage.
*/
public boolean getHasNextPage() {
return hasNextPage;
}
/**
* @param hasNextPage
* The hasNextPage to set.
*/
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
/**
* @return
* Returns the hasPrePage.
*/
public boolean getHasPrePage() {
return hasPrePage;
}
/**
* @param hasPrePage
* The hasPrePage to set.
*/
public void setHasPrePage(boolean hasPrePage) {
this.hasPrePage = hasPrePage;
}
/**
* @return Returns the totalPage.
*
*/
public int getTotalPage() {
return totalPage;
}
/**
* @param totalPage
* The totalPage to set.
*/
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
/**
* @param totalRecords
* The totalRecords to set.
*/
public void settotalRecords(int totalRecords)
{
this.totalRecords = totalRecords;
}
/**
* @return Returns the totalRecords.
*
*/
public int getTotalRecords()
{
return this.totalRecords;
}
}
/**********************************PageUtil类*********************************************/
package com.nyhr.struts.page;
/**
* 分页工具类,初始化Page对象
* @author Yeno.hhr
*/
public class PageUtil {
/**
* Use the origin page to create a new page
* @param page
* @param totalRecords
* @return
*/
public static Page createPage(Page page, int totalRecords){
return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
}
/**
* the basic page utils not including exception handler
* @param everyPage
* @param currentPage
* @param totalRecords
* @return page
*/
public static Page createPage(int everyPage, int currentPage, int totalRecords){
everyPage = getEveryPage(everyPage);
currentPage = getCurrentPage(currentPage);
int beginIndex = getBeginIndex(everyPage, currentPage);
int totalPage = getTotalPage(everyPage, totalRecords);
boolean hasNextPage = hasNextPage(currentPage, totalPage);
boolean hasPrePage = hasPrePage(currentPage);
return new Page(hasPrePage, hasNextPage,
everyPage, totalPage, totalRecords,
currentPage, beginIndex);
}
private static int getEveryPage(int everyPage){
return everyPage == 0 ? 10 : everyPage;
}
private static int getCurrentPage(int currentPage){
return currentPage == 0 ? 1 : currentPage;
}
private static int getBeginIndex(int everyPage, int currentPage){
return (currentPage - 1) * everyPage;
}
private static int getTotalPage(int everyPage, int totalRecords){
int totalPage = 0;
if(totalRecords % everyPage == 0)
totalPage = totalRecords / everyPage;
else
totalPage = totalRecords / everyPage + 1 ;
return totalPage;
}
private static boolean hasPrePage(int currentPage){
return currentPage == 1 ? false : true;
}
private static boolean hasNextPage(int currentPage, int totalPage){
return currentPage == totalPage || totalPage == 0 ? false : true;
}
}
/**********************************Result类*********************************************/
package com.nyhr.struts.page;
import java.util.List;
/**
* <p>Title: 检索结果集实体类</p>
* <p>Description: 保存分页参数及数据库查询的结果,用于页面显示</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
public class Result {
/**分页状态变量实体*/
private Page page;
/**数据库检索到的当前页结果集*/
private List content;
/**
* The default constructor
*/
public Result() {
super();
}
/**
* The constructor using fields
*
* @param page
* @param content
*/
public Result(Page page, List content) {
this.page = page;
this.content = content;
}
/**
* @return Returns the content.
*/
public List getContent() {
return content;
}
/**
* @return Returns the page.
*/
public Page getPage() {
return page;
}
/**
* The content to set.
* @param content
*/
public void setContent(List content) {
this.content = content;
}
/**
* The page to set.
* @param page
*/
public void setPage(Page page) {
this.page = page;
}
}
现在展示在大家面前的是查询分页两个核心类 :AbstractSearch(预查询初始化程序)、AbstractList(分页及初始化分页程序),代码如下:
/********************************AbstractSearch类************************************/
package com.nyhr.struts.frame;
import java.util.List;
import com.nyhr.struts.beans.HibernateUtil;
/**
* <p>Title: 预查询初始化程序</p>
* <p>Description: 所有的初始化查询必须继承此类,本类只负责预查询ID集和Page对象的初始化,不实现显示逻辑</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
public abstract class AbstractSearch {
public AbstractSearch()
{
super();
}
/**
* 根据HQL查询出记录的主键ID(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 不带查询的查询语句
* @return idArray 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql)
{
List list = HibernateUtil.query(hql);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**
* 根据HQL查询出记录的主键ID(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 带参数的查询语句
* @param bean 参数设置实体类
* @return Object[] 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql, Object bean)
{
List list = HibernateUtil.query(hql,bean);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**子类方法:根据子类的需要选择调用AbstractSearch的“带参”和“不带参”两种查询中的一种返回主键ID的数组集*/
abstract public Object[] getList();
/**子类方法:设定查询条件*/
abstract protected void condition();
}
/********************************AbstractList类************************************/
package com.nyhr.struts.frame;
import com.nyhr.struts.page.*;
import com.nyhr.struts.constant.SysConstant;
import com.nyhr.struts.hibernate.HibernateSessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import java.util.List;
import java.util.ArrayList;
/**
* <p>Title: 分页及初始化分页程序</p>
* <p>Description: 所有的初始化分页必须继承此类,如果是预查询调用,同时会初始化Page实体,否则Page实体会由FormBean提交生成</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
abstract public class AbstractList {
private Page page;
/**查询结果的主键ID集*/
private Object[] idList;
public AbstractList(){}
/**
* 预查询初始化分页构造(初次查询)
* @param hql 查询语句
* @param search 预查询类
*/
public AbstractList(AbstractSearch search){
this.idList=search.getList();
}
/**
* 查询分页构造(分页查询)
* @param page 分页状态实体
* @param idList
*/
public AbstractList(Page page, Object[] idList){
this.idList=idList;
this.page=page;
}
/**子类方法:设置分页查询的查询语句*/
abstract protected String getHql();
/**
* 返回查询结果
* @return Result
*/
public Result getResult(){
if(page==null){
if(idList==null)
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,0);
else
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,idList.length);
}
return new Result(page, getListByPage());
}
/**
* 分页查询,返回当前页的查询结果集
* @param hql
* @return list 结果集
*/
public List getListByPage(){
List list = null;
if (page.getTotalPage() < 1)
return list;
try{
String hql=getHql();
if(hql==null || hql.equals(""))
return list;
Object[] bean=getCurrentIds();
if(bean!=null)
list=HibernateUtil.query(hql,bean);
else
list=HibernateUtil.query(hql);
}catch(Exception e){
System.out.println(e.getMessage());
throw new RuntimeException(e);
}
return list;
}
/**
* 从查询结果的ID集中找出当前页的ID集
* @param arr 所有查询结果的主键ID集
* @return Object[]
*/
private Object[] getCurrentIds(){
if(idList==null) return null;
ArrayList<Object> list = new ArrayList<Object>();
int begin = page.getBeginIndex();
int ends = page.getTotalRecords();
int end = begin+page.getEveryPage();
if (end >= ends)
end = ends;
for (int l=begin;l<end;l++){
list.add(idList[l]);
}
return list.toArray();
}
/**
* 返回查询结果主键ID集的字符串组合形式
* @return String
*/
public String getIdList(){
String ids="";
if(idList == null)
return ids;
for(int x=0; x<idList.length; x++){
ids+=idList[x].toString();
if(x<idList.length-1)
ids+=",";
}
return ids;
}
}
/********************************HibernateUtil类************************************/
public class HibernateUtil {
private HibernateUtil(){}
/**
* 执行数据库查询,返回结果集List
* @param hsql HSQL查询语句
* @return list 结果集
*/
public static List query(String hql) {
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try{
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
}finally {
HibernateSessionFactory.closeSession();
}
return list;
}
public static List query(String hql, Object bean){
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try {
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
query.setProperties(bean);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
} finally {
HibernateSessionFactory.closeSession();
}
return list;
}
}
发表评论
文章已被作者锁定,不允许评论。
相关推荐
重构是迅速发现并修复有问题的代码的一种高效的方式。在《代码重构(c # & asp.net版)》中首次提供了在c#和asp.net中进行重构的专业方法,您将学习如何运用重构技术管理和修改代码
《蚂蚁集团开源的Java研发框架——gssdgv-zhuan-ke-master_java_详解》 在现代软件开发中,高效、稳定且易维护的框架是项目成功的关键因素之一。蚂蚁集团作为全球知名的金融科技公司,其开源的Java研发框架——...
在这个名为"zhuan 2.zip"的压缩包中,包含了一个支持移动端的转盘抽奖程序。这个程序的核心是通过JavaScript实现,使得用户可以通过点击来触发抽奖过程,从而增加用户体验的趣味性和参与度。 首先,我们来看“转盘...
4. **兼容性问题**:不同的项目可能依赖于特定的编程语言,代码转换工具可以帮助解决由于语言不兼容而产生的问题,确保代码能够在目标环境中正常运行。 例如,"html代码转换.exe"这样的程序可能是用来将HTML代码...
"da zhuan kuan.zip"这个压缩包文件很可能包含了实现上述VB打砖块游戏的所有源代码、资源文件和可能的说明文档。解压后,可以研究代码结构,理解每个部分如何协同工作,以此作为学习和进一步改进的起点。文件列表中...
标题中的"z zhuan sec_EH4_EH4Z文件转SEC文件_"表明我们正在处理一个涉及到将EH4或EH4Z格式的文件转换为SEC格式的议题。这个过程可能涉及到特定的工具、编程语言或者协议,尤其是在嵌入式系统中,这些文件格式通常与...
"Map o_mapgis_mapgis noteo_mapgis zhuan jpg_out"这部分可能是描述了这个压缩包的主要功能或者过程,即MapGIS的二次开发功能,用于将MapGIS的地图数据转换成JPG格式的光栅图像。"o_mapgis_mapgis noteo_mapgis...
自媒体新媒体软件工具自媒体zhuan钱秘诀资料
标题 "zhuan_java_untilgw8_android_" 暗示了这是一个关于使用Java语言在UntilGW8平台上开发Android游戏的项目,特别是一款简单的打砖块游戏。在这个项目中,我们可以深入学习到Java编程语言、Android应用开发的基础...
bai_zhuan=(int)zhuan/100; shi_zhuan=(int)zhuan0/10; ge_zhuan=(int)zhuan; write_data(table[bai_fen]); write_data(table[shi_fen]); write_data(table[ge_fen]); write_data(table[12]); write...
"XUAN-ZHUAN-led.zip_旋转LED_旋转LED 自适应_自适应旋转LED"这个压缩包文件内容是关于实现旋转LED自适应转速的程序,其核心目标是让LED屏幕上的字幕能够流畅地滚动,并根据设备的转速自动调整滚动速度,以保持最佳...
在给定的“ban-zhuan.zip_JAVA穷举法搬砖”主题中,我们面对的是一个数学问题,该问题与实际的砖块分配有关。36块砖需要36个人来搬运,其中包括男性、女性和小孩,他们各自有不同的搬运能力。男性每次能搬4块砖,...
2009-09-23 21:37 <DIR> bmp zhuan jpg 2009-09-23 21:49 <DIR> cad设计 2009-09-23 22:42 <DIR> gsp卫星定位 2009-09-30 19:46 <DIR> mp3播放器 2009-09-19 23:31 <DIR> Ok Clock 2009-09-19 17:23 <DIR> Ok ...
5、改善“汇编类->置入汇编代码”增添一个参数是否保留以前代码。感谢易友【@无名侠】反馈。 6、修正“文本_加密”返回文本传递给“文本_解密”后长度不正确BUG,改为返回字节集。 7、改善“外部编辑框_取密码框文本...
在给定的“zhuan-su-eliang.rar”压缩包中,包含了一个名为“zhuan su eliang.vi”的虚拟仪器(VI),这显然是一款用于转速测量的应用程序。 转速测量是机械工程、汽车工业、电力系统等领域中常见的技术需求。...
标题“zhuan-kai-fa”...“zhuan-kai-fa-master”这个压缩包文件名可能是某个项目的主分支或源码仓库,具体内容未知,但可能包含了上述知识点的实践代码和文档。若能提供更多信息,我们可以更深入地探讨相关技术细节。
本人转的别人写的人工神经网络的学习体会与感受,真是受益匪浅啊!
文档标题和描述中提到的是关于个人通过SOHO(Small Office Home Office)网络工作赚钱的体验,标签为“技术”,这表明讨论的核心是如何利用网络技术和自我经营来赚取收入。部分内容中,作者分享了自己从怀疑到加入...
公历(阳历)和农历(阴历)相互转换,公历转农历代码是从网上当的,我做了农历转公历的代码并写了示例程序。其实网上也有很多有关公历转农历的控件,但作为一个程序员就是不太习惯于使用别人的控件,因为那样将不便...
### 2.6.14 内核移植与YAFFS文件系统支持详解 #### 一、2.6.14 内核移植步骤 **1.... - **背景**: 如果您使用的是其他人移植好的内核版本,则在开始编译之前应该清除中间文件。这是为了避免因使用的交叉编译工具不同...