Spring之AOP

来源:互联网 发布:如何修改淘宝发货地址 编辑:程序博客网 时间:2024/06/06 16:32

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)对数据库进行操作,而且不用关闭连接。

0 0
原创粉丝点击