service接口:
public interface Service<T> {
public abstract void saveEntity(T t);
public abstract void saveOrUpdateEntity(T t);
public abstract void updateEntity(T t);
public abstract void deleteEntity(T t);
public abstract void batchEntityByHQL(String hql,Object...objects);
public abstract T loadEntity(Integer id);
public abstract T getEntity(Integer id);
public abstract List<T> findEntityByHQL(String hql,Object...objects);
}
service抽象:
public abstract class ServiceImpl<T> implements Service<T> {
private Dao<T> dao;
public Dao<T> getDao() {
return dao;
}
@Resource
public void setDao(Dao<T> dao) {
this.dao = dao;
}
@Override
public void saveEntity(T t) {
dao.saveEntity(t);
}
@Override
public void saveOrUpdateEntity(T t) {
dao.saveOrUpdateEntity(t);
}
@Override
public void updateEntity(T t) {
dao.updateEntity(t);
}
@Override
public void deleteEntity(T t) {
dao.deleteEntity(t);
}
@Override
public void batchEntityByHQL(String hql, Object... objects) {
dao.batchEntityByHQL(hql, objects);
}
@Override
public T loadEntity(Integer id) {
return dao.loadEntity(id);
}
@Override
public T getEntity(Integer id) {
return dao.getEntity(id);
}
@Override
public List<T> findEntityByHQL(String hql, Object... objects) {
return dao.findEntityByHQL(hql, objects);
}
}
Dao接口:
public interface Dao<T>{
public abstract void saveEntity(T t);
public abstract void saveOrUpdateEntity(T t);
public abstract void updateEntity(T t);
public abstract void deleteEntity(T t);
public abstract void batchEntityByHQL(String hql,Object...objects);
public abstract T loadEntity(Integer id);
public abstract T getEntity(Integer id);
public abstract List<T> findEntityByHQL(String hql,Object...objects);
}
Dao抽象:
public abstract class DaoImpl<T> implements Dao<T> {
private Class<T> clazz;
@Resource
private SessionFactory sessionFactory;
public DaoImpl() {
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[0];
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void saveEntity(T t) {
sessionFactory.openSession().save(t);
}
@Override
public void saveOrUpdateEntity(T t) {
sessionFactory.openSession().saveOrUpdate(t);
}
@Override
public void updateEntity(T t) {
sessionFactory.openSession().update(t);
}
@Override
public void deleteEntity(T t) {
sessionFactory.openSession().delete(t);
}
@Override
public void batchEntityByHQL(String hql, Object... objects) {
Query query = sessionFactory.openSession().createQuery(hql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(1, objects[i]);
}
query.executeUpdate();
}
@Override
public T loadEntity(Integer id) {
return (T) sessionFactory.openSession().load(clazz, id);
}
@Override
public T getEntity(Integer id) {
return (T) sessionFactory.openSession().get(clazz, id);
}
@Override
public List<T> findEntityByHQL(String hql, Object... objects) {
Query query = sessionFactory.openSession().createQuery(hql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(1, objects[i]);
}
return query.list();
}
}
package com.xmwl.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class MyAspect {
@Pointcut("execution(public void com.xmwl.dao.impl.UserDaoImpl.save(com.xmwl.model.User))")
public void demoAspect() {}
@Before("demoAspect()")
public void testAspect() {
System.out.println("记录");
}
@AfterReturning("execution(public void com.xmwl.dao.impl.UserDaoImpl.save(com.xmwl.model.User))")
public void test1Aspect() {
System.out.println("记录完毕");
}
@AfterThrowing("execution(public void com.xmwl.dao.impl.UserDaoImpl.save(com.xmwl.model.User))")
public void demo1Aspect() {
System.out.println("出异常了");
}
@Around("execution(public void com.xmwl.dao.impl.UserDaoImpl.save(com.xmwl.model.User))")
public void demo2Aspect(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("围绕上");
pjp.proceed();
System.out.println("围绕下");
}
}