天天看點

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

基于aspectj的注解aop操作

  • 第一步建立對象
  • 第二步在spring核心配置檔案中開啟aop操作
    spring--基于aspectj的注解aop操作、事務
    image.png
  • 第三步在增強類上使用注解完成aop操作
    spring--基于aspectj的注解aop操作、事務
    spring--基于aspectj的注解aop操作、事務
    spring--基于aspectj的注解aop操作、事務
    spring--基于aspectj的注解aop操作、事務

spring的jdbcTemplate操作(jdbc模闆)

1.spring架構一站式架構

1.針對javaee三層,每一層都有解決技術

2.在dao層,使用jdbcTemplate

2.spring對不同的持久化層技術都進行了封裝
spring--基于aspectj的注解aop操作、事務
  • 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而已)
  • 删除
  • 查詢
使用jdbc模闆也可以實作查詢操作
spring--基于aspectj的注解aop操作、事務
  • 查詢傳回某一個值
spring--基于aspectj的注解aop操作、事務

第一個參數是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);
           
  • 查詢傳回對象
    spring--基于aspectj的注解aop操作、事務
    spring--基于aspectj的注解aop操作、事務
//建立對象
        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集合
    spring--基于aspectj的注解aop操作、事務
    spring--基于aspectj的注解aop操作、事務
//建立對象
        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配置檔案,配置連接配接池

spring--基于aspectj的注解aop操作、事務
  • 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>
           

第三步:

在使用的方法所在的類上面添加注解

spring--基于aspectj的注解aop操作、事務
上一篇: 接口、多态
下一篇: Http協定