Spring AOP动态代理例子
来源:互联网 发布:吾知的小说 编辑:程序博客网 时间:2024/06/06 13:00
对Oracle数据库的部门表进行增删改查:
话不多说;
1.实体类可以不写.hbm.xml文件直接写注解方式:
package com.jadeon.entity;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;@SuppressWarnings("serial")@Entity@Table(name = "dept")public class Dept implements Serializable {private Integer deptno;private String dname;private String loc;public Dept() {super();}public Dept(String dname, String loc) {super();this.dname = dname;this.loc = loc;}public Dept(Integer deptno,String dname, String loc) {super();this.deptno = deptno;this.dname = dname;this.loc = loc;}@Id@Column(name="deptno")@GenericGenerator(name="myGenerator",strategy="increment")@GeneratedValue(generator="myGenerator")public Integer getDeptno() {return deptno;}public void setDeptno(Integer deptno) {this.deptno = deptno;}@Column(name="dname")public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}@Column(name="loc")public String getLoc() {return loc;}public void setLoc(String loc) {this.loc = loc;}}
2.dao接口
package com.jadeon.dao;import java.util.List;public interface BasicDao<T> {public void saveBasic(T o);public void updateBasicById(T o);public void delBasicById(T o);public T selectBasicById(T o,String column,Object byId);public List<T> seletctAllBasic(T o);}
实现dao接口类
package com.jadeon.dao.impl;import java.util.List;import org.hibernate.criterion.Restrictions;import com.jadeon.dao.BasicDao;import com.jadeon.util.DBHelper;public class BasicDaoImpl<T> implements BasicDao<T> {@Overridepublic void saveBasic(T o) { DBHelper.openSession().save(o);}@Overridepublic void updateBasicById(T o) {DBHelper.openSession().merge(o);}@Overridepublic void delBasicById(T o) {DBHelper.openSession().delete(o);}@SuppressWarnings("unchecked")@Overridepublic T selectBasicById(T o, String column, Object byId) {return (T) DBHelper.openSession().createCriteria(o.getClass()).add(Restrictions.eq(column, byId)).uniqueResult();}@SuppressWarnings("unchecked")@Overridepublic List<T> seletctAllBasic(T o) {return DBHelper.openSession().createCriteria(o.getClass()).list();}}3.service接口类
package com.jadeon.service;import java.util.List;import com.jadeon.entity.Dept;public interface DeptService {public void saveDept(Dept info);public void updateDeptById(Dept info);public Dept selectDeptById(Integer byId);public List<Dept> seletctAllDept();public void delDeptById(Integer byId);}
实现service接口类
package com.jadeon.service.impl;import java.util.List;import com.jadeon.dao.BasicDao;import com.jadeon.dao.impl.BasicDaoImpl;import com.jadeon.entity.Dept;import com.jadeon.service.DeptService;public class DeptServiceImpl implements DeptService {private BasicDao<Dept> dao = new BasicDaoImpl<Dept>();@Overridepublic void saveDept(Dept info) {dao.saveBasic(info);}@Overridepublic void updateDeptById(Dept info) {dao.updateBasicById(info);}@Overridepublic void delDeptById(Integer byId) {Dept info = dao.selectBasicById(new Dept(), "deptno", byId);dao.delBasicById(info);}@Overridepublic Dept selectDeptById(Integer byId) {return dao.selectBasicById(new Dept(), "deptno", byId);}@Overridepublic List<Dept> seletctAllDept() {return dao.seletctAllBasic(new Dept());}}
4.帮助类(DBHelper):
package com.jadeon.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class DBHelper {private static SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();private static Session session;public static Session openSession(){ //判断session是否打开 if (session == null || !session.isOpen()) session = sessionFactory.openSession();return session;}}
5.strutsxml和Hibernate.cfg.xml、web.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="default" namespace="/" extends="struts-default"> <action name="dept_*" class="com.jadeon.action.DeptAction" method="{1}"> <result name="success">/allDept.jsp</result> <result name="update">/updateDept.jsp</result> </action> </package></struts>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" ><hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> <property name="hibernate.connection.url">jdbc:oracle:thin:localhost:1521:orcl</property> <property name="hibernate.connection.username">scott</property> <property name="hibernate.connection.password">tiger</property> <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> <property name="hibernate.show_sql">true</property> <!-- <mapping resource="com/jadeon/entity/Dept.hbm.xml"/> --><mapping class="com.jadeon.entity.Dept"/> </session-factory></hibernate-configuration>
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>spring_02_proxy</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list><filter><filter-name>struts</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
6.代理类:
package com.jadeon.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import org.hibernate.Session;public class TranscationDynamicProxy implements InvocationHandler{private Object obj;//需要代理的目标对象 private Session session;public TranscationDynamicProxy() {super();}public TranscationDynamicProxy(Object obj,Session session) {super();this.obj = obj;this.session = session;}/*** * 实例化代理对象 * * @param args * @return */public static Object newInstance(Object args,Session session){//将目标对象传入进行代理 // 1. 实例化对象// 2. 定义的接口,所需要完成事情// 3. 开始做事情return Proxy.newProxyInstance(args.getClass().getClassLoader(), args.getClass().getInterfaces(), new TranscationDynamicProxy(args,session));//返回代理对象 }// 开始做事情 什么时候触发呢?// 在实例化LogDynamicProxy对象时 会触发该方法@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = null;try {System.out.println("begin recording log...");session.beginTransaction().begin();result = method.invoke(obj, args);//调用invoke方法,result 存储该方法的返回值 session.beginTransaction().commit();System.out.println("end recording log...");} catch (Exception e) {e.printStackTrace();session.beginTransaction().rollback();} finally {//session.close();}return result;}}
7.action测试类:
package com.jadeon.action;import java.util.ArrayList;import java.util.List;import com.jadeon.entity.Dept;import com.jadeon.proxy.TranscationDynamicProxy;import com.jadeon.service.DeptService;import com.jadeon.service.impl.DeptServiceImpl;import com.jadeon.util.DBHelper;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class DeptAction extends ActionSupport {private List<Dept> infos = new ArrayList<Dept>();private Dept info = new Dept();DeptService service = (DeptService) TranscationDynamicProxy.newInstance(new DeptServiceImpl(), DBHelper.openSession());public String getAllDept() {infos = service.seletctAllDept();return "success";}public String savaDept() {service.saveDept(info);return getAllDept();}public String updateDeptById() {if (info.getDname() == null && info.getDeptno() > 0 && info.getLoc() == null) {info = service.selectDeptById(info.getDeptno());return "update";}else{service.updateDeptById(info);return getAllDept();}}public String delDeptById() {service.delDeptById(info.getDeptno());return getAllDept();}public List<Dept> getInfos() {return infos;}public void setInfos(List<Dept> infos) {this.infos = infos;}public Dept getInfo() {return info;}public void setInfo(Dept info) {this.info = info;}}
主页面:
<html><head><title>DEPT TABLE INFORMATION</title></head><body><center><a href="dept_getAllDept">SELECT ALL DEPT INFORMATION</a></center></body></html>
查询和删除部门.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DEPT TABLE INFORMATION</title></head><body><center><table><tr><th colspan="4"><h2>DEPT TABLE INFORMATION</h2></th></tr><tr><th>DEPTNO</th><th>DNAME</th><th>LOC</th><th colspan="2"> OPERATION</th></tr><c:forEach items="${infos}" var="dept"><tr><td>${dept.deptno}</td><td>${dept.dname}</td><td>${dept.loc}</td><td><a href="dept_delDeptById?info.deptno=${dept.deptno}">delete</a>|<a href="dept_updateDeptById?info.deptno=${dept.deptno}">update</a></td></tr></c:forEach></table><a href="addDept.jsp">add</a></center></body></html>
添加部门.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DEPT TABLE INFORMATION</title><link rel="stylesheet" type="text/css" href="CSS/style.css"></head><body><center><form action="dept_savaDept" method="post"><table><tr><th colspan="2"><h2>UPDATE TABLE INFORMATION</h2></th></tr><tr><th>DNAME</th><th>LOC</th></tr><tr><td><input type="text" name="info.dname" /></td><td><input type="text" name="info.loc" /></td></tr></table><input type="submit" value="YES"/></form></center></body></html>
修改部门.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DEPT TABLE INFORMATION</title><link rel="stylesheet" type="text/css" href="CSS/style.css"></head><body><center><form action="dept_updateDeptById" method="post"><input type="hidden" name="info.deptno" value="${info.deptno}"/><table><tr><th colspan="2"><h2>UPDATE TABLE INFORMATION</h2></th></tr><tr><th>DNAME</th><th>LOC</th></tr><tr><td><input type="text" name="info.dname" value="${info.dname}"/></td><td><input type="text" name="info.loc" value="${info.loc}"/></td></tr></table><input type="submit" value="YES"/></form></center></body></html>
阅读全文
0 0
- Spring AOP动态代理例子
- Spring Aop 动态代理
- Spring AOP动态代理
- Spring AOP 动态代理
- spring aop动态代理
- Spring(AOP动态代理)
- (spring AOP)VS(动态代理的例子)
- String Aop 动态代理例子
- Java 例子 反射实现 AOP 动态代理模式(Spring Aop实现原理)
- Spring AOP配置 动态代理
- Spring AOP JDK动态代理
- 动态代理与spring AOP
- Spring AOP与动态代理
- Spring AOP动态代理初学
- Spring AOP技术--动态代理
- 7.Spring AOP动态代理
- Java动态代理-->Spring AOP
- spring AOP(动态代理)解析
- Centos 添加静态路由及 SIOCADDRT错误处理
- Cobbler自动批量部署不同需求的系统
- 轻松掌握正则表达式(1)
- TCP/IP协议三次握手与四次握手流程解析
- CSDN如何转载别人的文章
- Spring AOP动态代理例子
- 股票量化分析(10)——第一个策略(rsi强度策略)
- 猜字游戏
- 内部类
- testng实现参数化与多线程(多种浏览器运行,相同浏览器运行等)
- TCP和UDP的区别
- python3中的基础类型
- Python 5) 基础 继承
- 在 ant build时“找不到符号”解决方法(待验证)