现在业务需要 需要从查询出一个list 集合 然后放到另一个表中 
问下 sava 的方式 怎么才能保存 一个list集合呢

解决方案 »

  1.   

    package com.it.oa.dao.parent;import java.io.Serializable;
    import java.sql.SQLException;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;import org.hibernate.Criteria;
    import org.hibernate.HibernateException;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.springframework.orm.hibernate3.HibernateCallback;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.it.oa.dao.BaseSpringHibDao;public class BaseSpringHibDaoImpl extends HibernateDaoSupport implements BaseSpringHibDao { /**
     * 添加新的对象
     */
    public boolean add(Object obj) {
    try {

    super.getHibernateTemplate().save(obj);

    return true;

    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }

    } /**
     * 根据id和类删除对象
     */
    public boolean del(Class clz,Serializable id) {
    Object itme = null;

    try {
    //获取到对象的实体
    itme = this.get(clz, id);

    super.getHibernateTemplate().delete(itme);
    return true;

    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }

    }
    /**
     * 根据对象删除
     * @param obj
     * @return
     */
    public boolean del(Object obj){

    try {

    super.getHibernateTemplate().delete(obj);
    return true;

    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }

    }

    /**
     * 在spring中使用delete语句进行删除并返回它的影响行数
     * @param hql
     * @return
     */
    public int deleteByHql(final String hql){

    Object number =  super.getHibernateTemplate().execute(
    new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {

    Query query = session.createQuery(hql);

    int num = query.executeUpdate();

    return num;
    }

    }
    );

    return Integer.parseInt(number.toString());
    } /**
     * 根据ID查询具体的详细信息
     */
    public Object get(Class clz,Serializable id) {

    Object item = null;
    try {

    item = super.getHibernateTemplate().get(clz, id);

    } catch (Exception e) {
    e.printStackTrace();
    }
    return item;
    } /**
     * 修改对象信息
     */
    public boolean update(Object obj) {
    try {

    super.getHibernateTemplate().update(obj);

    return true;

    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }

    } /**
     * 查询所有用户详细信息
     * 根据类的对象进行查询
     * 分页查询
     */
    public List search(final Class clz,final int pageNo ,final int pageSize) {

    return super.getHibernateTemplate().executeFind(
    new HibernateCallback(){ public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    //查询该类的所有信息
    Criteria c = session.createCriteria(clz);

    c.setFirstResult((pageNo-1)*pageSize);

    c.setMaxResults(pageSize);

    return c.list();
    }
    }
    );

    }


    /**
     * 根据类查询其所有信息
     */
    public List search(final Class clz) {

    return super.getHibernateTemplate().executeFind(
    new HibernateCallback(){ public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    //查询该类的所有信息
    Criteria c = session.createCriteria(clz);


    return c.list();
    }
    }
    );
    }

    /**
     * 根据hql语句进行查询
     * @param hql
     * @return
     */
    public List search(final String hql){
    return super.getHibernateTemplate().executeFind(
    new HibernateCallback(){ public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    //查询该类的所有信息
    Query q = session.createQuery(hql);

    return q.list();
    }
    }
    );
    } /**
     * 根据传递的hql执行查询
     * 分页查询,
     */ public List search(final String hql,final  int pageNo ,final int pageSize) {
    return super.getHibernateTemplate().executeFind(
    new HibernateCallback(){ public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    //查询该类的所有信息
    Query q = session.createQuery(hql);

    q.setFirstResult((pageNo-1)*pageSize);
    q.setMaxResults(pageSize);

    return q.list();
    }
    }
    );

    }
    /**
     * 获得表的总数据
     * @param tableName
     * @return
     */
    public int getRowCounts(String tableName){

    final String hql = "select count(table) from "+tableName+" as table"; List list = super.getHibernateTemplate().find(hql);
    int rows = Integer.parseInt(list.get(0).toString());
    return rows;

    }

    /**
     * 获得总页数
     * @param tableName
     * @param pageSize
     * @return
     */
    public int getPageCounts(String tableName,int pageSize){
    int count = this.getRowCounts(tableName);
    int pageCount = 0;
    if(count%pageSize==0){
    pageCount = count/pageSize;
    }
    else{
    pageCount = count/pageSize +1; 
    }
    return pageCount;
    }

    /**
     * 获得模糊查询的总数据量
     * @param hql
     * @return
     */
    public int getRowCountsByLike(String hql,Map map){

    List list = this.search(map, hql);

    return Integer.parseInt(list.get(0).toString()); 
    }

    /**
     * 使用map集合和hql语句进行分页查询
     * @param mapValue  集合 保存了类的属性名和对应该属性的值 当中的key等于hql中的属性
     * @param hql   执行的hql语句
     * @param pageNo 当前页数
     * @param pageSize 每页显示条数
     * @return 返回list集合
     */
    public List search(final Map mapValue,final String hql,final int pageNo,final int pageSize){
    return super.getHibernateTemplate().executeFind(
    new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {

    Query query = session.createQuery(hql);
    //取出map中的key  key等于hql语句中的属性名
    Set setkey = mapValue.keySet();

    Iterator it = setkey.iterator();

    while(it.hasNext()){
    //从集合中取出值
    String key = it.next().toString();
    //取出对应属性的值
    String value = mapValue.get(key).toString();
    query.setString(key, value);

    }
    query.setFirstResult((pageNo-1)*pageSize);
    query.setMaxResults(pageSize);

    return query.list();
    }


    }
    );

    }

    /**
     * 使用map集合和hql语句进行查询
     * @param mapValue  集合 保存了类的属性名和对应该属性的值 当中的key等于hql中的属性
     * @param hql   执行的hql语句
     * @return 返回list集合
     */
    public List search(final Map mapValue,final String hql){
    return super.getHibernateTemplate().executeFind(
    new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {

    Query query = session.createQuery(hql);
    //取出map中的key  key等于hql语句中的属性名
    Set setkey = mapValue.keySet();

    Iterator it = setkey.iterator();

    while(it.hasNext()){
    //从集合中取出值 这个值要对应到类的属性
    String key = it.next().toString();
    //取出对应属性的值
    String value = mapValue.get(key).toString();
    query.setString(key, value);

    }

    return query.list();
    }


    }
    );

    }
    }
    就这了,其他你自己想,底层
      

  2.   

    用一个循环遍历集合for (int i = 0; i < list.size(); i++){
       this.getHibernateTemplate().save(list.get(i));
    }
      

  3.   


    public boolean save(ArrayList list) {
    Session session = HibernateSessionFactory.getSession();
            try {
                Transaction tx = session.beginTransaction();        
                for (int i = 0; i < list.size(); i++) {
                session.save(list.get(i));
                }
                tx.commit();
                return true;
            } catch (Exception e) {
                tx.rollback();
                // TODO: handle exception
                e.printStackTrace();
                return false;
            } finally {
                session.close();
            }
        }
      

  4.   

    public List getList(String hql, List list) { Session session = super.getSession();
    try {
    Query query = session.createQuery(hql);
    if (list != null || list.size() > 0) {
    for (int i = 0; i < list.size(); i++) {
    query.setParameter(i, list.get(i));
    }
    }
    return query.list();
    } catch (Exception ex) {
    ex.printStackTrace();
    return null;
    } finally { session.close(); }
    } /**
     * 根据hql查询 传入代替语句中?值的数组
     */
    public List getList(String hql, Object[] obj) {
    Session session = super.getSession();
    try {
    Query query = session.createQuery(hql);
    if (obj != null || obj.length > 0) {
    for (int i = 0; i < obj.length; i++) {
    query.setParameter(i, obj[i]);
    }
    }
    return query.list();
    } catch (Exception ex) {
    ex.printStackTrace();
    return null;
    } finally { session.close(); }
    }