Spring之AOP

AOP-面向切面,我们在开启一个事务的时候,每次都需要关闭,例如我们通过JDBC连接一个数据库的时候,我们必须每一次使用完连接之后都必须使用close()关闭连接。这样很容易出现忘记关闭连接造成了资源的浪费,而AOP就可以实现自动的关闭连接,不用我们每次编写程序的时候自己编写代码关闭。
本文以数据库操作事务为例来讲述AOP,实验代码如下:

package org.liky.ssh.dao.impl;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.liky.ssh.dao.INewsDAO;
import org.liky.ssh.pojo.News;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class NewsDAOImpl extends HibernateDaoSupport implements INewsDAO {

    public void doCreate(News vo) throws Exception {
        super.getHibernateTemplate().save(vo);
    }

    public void doRemove(Integer id) throws Exception {
        super.getHibernateTemplate().delete(findById(id));
    }

    public void doUpdate(News vo) throws Exception {
        super.getHibernateTemplate().update(vo);
    }

    public List<News> findAll() throws Exception {
        return getHibernateTemplate().loadAll(News.class);
    }

    public List<News> findAll(final int pageNo, final int pageSize,
            final String keyword, final String column) throws Exception {
        // Spring没有提供针对HQL方式的分页查询方法
        // 1、使用Criteria来完成分页查询
        DetachedCriteria c = DetachedCriteria.forClass(News.class);
        // 加入条件
        c.add(Restrictions.like(column, "%" + keyword + "%"));

        List all = super.getHibernateTemplate().findByCriteria(c,
                (pageNo - 1) * pageSize, pageSize);

        // 2、自行扩展Spring功能,添加分页查询方法,使用的方式为匿名内部类
        // List all = super.getHibernateTemplate().executeFind(
        // new HibernateCallback() {
        // public Object doInHibernate(Session session)
        // throws HibernateException, SQLException {
        // String hql = "FROM News AS n WHERE n." + column
        // + " LIKE ?";
        // Query query = session.createQuery(hql);
        // query.setString(0, "%" + keyword + "%");
        // query.setFirstResult((pageNo - 1) * pageSize);
        // query.setMaxResults(pageSize);
        //
        // return query.list();
        // }
        // });

        return all;
    }

    public News findById(Integer id) throws Exception {
        return super.getHibernateTemplate().get(News.class, id);
    }

    public int getAllCount(String keyword, String column) throws Exception {
        String hql = "SELECT COUNT(n) FROM News AS n WHERE n." + column
                + " LIKE ?";
        List all = super.getHibernateTemplate().find(hql, "%" + keyword + "%");
        return ((Long) all.get(0)).intValue();
    }

}

通过以上代码可以看出我们可以通过extends HibernateDaoSupport来调用super.getHibernateTemplate().save(vo)对数据库进行操作,而且不用关闭连接。

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页