zoukankan      html  css  js  c++  java
  • 使用AOP思想封装JDBC

    看代码

    package learning.aop2;
    
    import org.springframework.stereotype.Component;
    
    import java.sql.SQLException;
    @Component
    public class UserDAO {
    
        public void getAddUser(String name) throws SQLException {
            ConnMariaDB.getConn().createStatement().
                    execute("insert into user(name) VALUE ('" + name + "')");
        }
    
    }

    得到连接

    package learning.aop2;
    
    import java.sql.Connection;
    
    public class ConnMariaDB {
        public static ThreadLocal<Connection> threadLocal = null;
    
        public static Connection getConn() {
            return threadLocal.get();
        }
    }

    调用方法前往当前线程注入一个连接再调用

    package learning.aop2;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    @Component
    @Aspect
    public class JDBCAdvice {
    
        @Around("execution(* learning.aop2.UserDAO.*(..))")
        public Object wrapDAO(ProceedingJoinPoint joinPoint) throws Throwable {
            Connection conn = null;
            try {
                Class.forName("org.mariadb.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mariadb://localhost:3306/user", "root", "dz520123");
                conn.setAutoCommit(false);
    
                ConnMariaDB.threadLocal = new ThreadLocal<Connection>();
                ConnMariaDB.threadLocal.set(conn);
    
                Object proceed = joinPoint.proceed();
    
                conn.commit();
    
                return proceed;
            } catch (Throwable throwable) {
                if (conn != null) {
                    try {
                        conn.rollback();
                    } catch (SQLException e) {
                    }
                }
                throwable.printStackTrace();
                throw throwable;
            } finally {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                    }
                }
            }
        }
    }

    扫描包

    package learning.aop2;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    
    @Configuration
    @ComponentScan(basePackages = "learning.aop2")
    @EnableAspectJAutoProxy
    public class SpringConfig {
    }

    测试.java

    package learning.aop2;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import java.sql.SQLException;
    
    public class Main {
        public static void main(String[] args) throws SQLException {
            AnnotationConfigApplicationContext applicationContext =
                    new AnnotationConfigApplicationContext(SpringConfig.class);
            UserDAO bean = applicationContext.getBean(UserDAO.class);
            bean.getAddUser("nihao");
        }
    }
  • 相关阅读:
    点击按钮icon input同步获取焦点
    修改vue项目中 elementUI input样式
    vue $route 和$router的区别
    vue 路由 vue-router 模式 hash history
    vue 路由跳转
    git 合并某个提交 git cherry-pick
    请求传参 有特殊符号
    前端 组件库 ,js等
    ajax请求成功,返回了数据,但是跳到了error情况
    微信-公众号-网页授权开发
  • 原文地址:https://www.cnblogs.com/dzcici/p/10142989.html
Copyright © 2011-2022 走看看