美文网首页
spring--基于aspectj的注解aop操作、事务

spring--基于aspectj的注解aop操作、事务

作者: 全满 | 来源:发表于2018-07-30 17:10 被阅读0次

    基于aspectj的注解aop操作

    • 第一步创建对象

    • 第二步在spring核心配置文件中开启aop操作


      image.png
    • 第三步在增强类上使用注解完成aop操作


      image.png
      image.png
      image.png
      image.png

    spring的jdbcTemplate操作(jdbc模板)

    1.spring框架一站式框架
    1.针对javaee三层,每一层都有解决技术
    2.在dao层,使用jdbcTemplate

    2.spring对不同的持久化层技术都进行了封装


    image.png
    • jdbcTemplate对jdbc进行封装

    3.jdbc模板的使用
    与dbutils使用很相似,都是对数据库进行crud的操作

    • 增加

    导入jar包
    创建对象,设置数据库信息
    创建jdbcTemplate对象,设置数据源
    调用jdbcTemplate对象里面的方法实现操作

            //创建对象
            DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
            driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
            driverManagerDataSource.setUrl("jdbc:mysql:///spring");
            driverManagerDataSource.setUsername("root");
            driverManagerDataSource.setPassword("root");
            //创建jdbcTemplate对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate();
            //调用jdbcTemplate对象里面的方法实现操作
              //创建sql语句
            String sql = "insert into user values(?,?)";
            int rows = jdbcTemplate.update(sql, "admin", "admin");
            System.out.println(rows);
    
    • 修改

    同上(改变sql而已)

    • 删除

    同上(改变sql而已)

    • 查询

    使用jdbc模板也可以实现查询操作


    image.png
    • 查询返回某一个值
    image.png

    第一个参数是sql
    第二个参数是 返回类型的class

            //创建对象
            DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
            driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
            driverManagerDataSource.setUrl("jdbc:mysql:///spring");
            driverManagerDataSource.setUsername("root");
            driverManagerDataSource.setPassword("root");
            //创建jdbcTemplate对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate();
            //调用jdbcTemplate对象里面的方法实现操作
                //sql语句
            String sql = "select count(*) from user";
            //调用jdbcTemplate的方法
            int count = jdbcTemplate.queryForObject(sql, Integer.class);
            System.out.println(count);
    
    • 查询返回对象


      image.png
      image.png
           //创建对象
            DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
            driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
            driverManagerDataSource.setUrl("jdbc:mysql:///spring");
            driverManagerDataSource.setUsername("root");
            driverManagerDataSource.setPassword("root");
            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate();
            //写sql语句
            String sql = "selcect * from user";
            //调用jdbcTemplate的方法
            User user = (User) jdbcTemplate.queryForObject(sql, new MyRoWMapper(), "admin");
            System.out.println(user);
    
    class MyRoWMapper implements RowMapper<User> {
    
        @Override
        public User mapRow(ResultSet rs, int i) throws SQLException {
            //获取数据
            String username = rs.getString("username");
            String password = rs.getString("password");
            //将数据分装到对象中
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            return user;
        }
    }
    
    • 查询返回list集合


      image.png
      image.png
     //创建对象
            DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
            driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
            driverManagerDataSource.setUrl("jdbc:mysql:///spring");
            driverManagerDataSource.setUsername("root");
            driverManagerDataSource.setPassword("root");
            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate();
            //写sql语句
            String sql = "selcect * from user";
            //调用jdbcTemplate的方法
            List<User> list = jdbcTemplate.query(sql, new MyRoWMapper());
            System.out.println(list);
    
    class MyRoWMapper implements RowMapper<User> {
    
        @Override
        public User mapRow(ResultSet rs, int i) throws SQLException {
            //获取数据
            String username = rs.getString("username");
            String password = rs.getString("password");
            //将数据分装到对象中
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            return user;
        }
    }
    

    spring配置连接池

    • 配置c3p0连接池

    1.导入jar包
    2.创建spring配置文件,配置连接池


    image.png
    • service和dao注入操作

    配置文件的书写方式

        <bean id="userService" class="cn.persist.service.UserService">
            <!-- 注入userDao对象 -->
            <property name="userDao" ref="userDao">
    
            </property>
        </bean>
        <bean id="userDao" class="cn.persist.dao.UserDao">
            <!-- 注入jdbcTemplate对象-->
            <property name="jdbcTemplate" ref="jdbcTemplate">
    
            </property>
        </bean>
        <!-- 创建jdbcTemplate对象-->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- 把dataSource传递给模板对象里面-->
            <property name="dataSource" ref="dataSource">
    
            </property>
        </bean>
    

    Java代码

    UserService.java
     private UserDao userDao;
    
        public void add(){
            System.out.println("service..................");
            userDao.add();
        }
    
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    
    UserDao.java
    private JdbcTemplate jdbcTemplate;
    
        public void add(){
            System.out.println("add..............");
        }
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        public JdbcTemplate getJdbcTemplate() {
            return jdbcTemplate;
        }
    

    spring事务管理

    • 事务概念
    1. 什么是事务(事务是对数据库操作的最基本的操作,指的是一组操作中若有一个不成功则都不成功)
      2.事务特性(4个)
      3.不考虑隔离性产生读问题
      4.解决读问题
      (1)。设置隔离级别
    • spring进行事务管理api

    spring对象事务管理,主要有两种方式:
    1.编程式事务管理(不用),因为通过编写代码来实现
    2.声明式事务管理
    (1).基于xml配置文件实现
    (2).基于注解实现

    • spring事务管理的api的介绍

    接口
    PlatformTransactionManager
    事务管理器
    (1)。spring针对不同的dao层框架,提供接口不同的实现类

    事务 说明
    org.springframework.jdbc.datasource.Date SourceTransactionManager 使用 Spring JDBC或mbatis进行持久化数据时使用

    (2)。首先配置事务的管理器

    搭建转账环境

    1.设计数据库
    2.书写service与dao层代码
    3.产生问题
    如果a少了钱b却没有多,钱就丢失了
    4.解决
    添加事务解决,出现异常进行回滚操作

    • 声明式事务管理(xml配置)
    <!-- 配置出c3p0连接池-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <!--注入属性值-->
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql:///oj"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
        </bean>
    

    1.配置文件方式使用aop思想配置

     <!-- 配置事务管理器 -->
        <bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!-- 注入dataSource-->
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
    <!-- 配置事务的增强-->
        <tx:advice id="interceptor" transaction-manager="DataSourceTransactionManager">
            <!--指定规则 做事务的事情-->
            <tx:attributes>
                <!--设置进行事务操作的方法匹配规则-->
                <tx:method name="account*"/><!--account*方法名以account开头的所有方法都进行事务增强-->
            </tx:attributes>
        </tx:advice>
    
     <!--配置切面-->
        <aop:config>
            <!--切入点-->
            <aop:pointcut id="pointcut1" expression="execution(* *.*(..))"></aop:pointcut>
            <!--切面-->
            <aop:advisor advice-ref="interceptor" pointcut-ref="pointcut1"></aop:advisor>
        </aop:config>
    
    • 声明式事务管理(注解)

    第一步:
    配置事务管理器

    <!--配置事务管理器-->
        <bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            &lt;!&ndash; 注入dataSource&ndash;&gt;
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    

    第二步:
    配置事务注解的操作

    <!--开启事务注解-->
        <tx:annotation-driven transaction-manager="DataSourceTransactionManager"></tx:annotation-driven>
    

    第三步:
    在使用的方法所在的类上面添加注解


    image.png

    相关文章

      网友评论

          本文标题:spring--基于aspectj的注解aop操作、事务

          本文链接:https://www.haomeiwen.com/subject/tppypftx.html