spring4天计划(3day)

来源:互联网 发布:线切割3b编程实例宝剑 编辑:程序博客网 时间:2024/05/22 05:20

基于aspectj的注解aop

1.使用注解方式实现aop操作
第一步:创建对象
第二步:在spring核心配置文件中
第三步:在增强的

spring的jdbcTemplate

1.spring框架一站式框架
(1)针对javaee三层,每一层都有解决技术
(2)在dao层,使用jdbcTemplate
2.spring对不同的持久化层技术都进行封装
(1)jdbcTemplate对jdbc进行封装

3.jdbcTemplate使用和dbutis使用很相似,都对数据库进行crud操作

增加
1.导入jdbcTemplate的jar包
2.创建对象,设置数据库信息
3.创建jdbcTemplate对象,设置数据源
调用jdbcTemplate对象里面的方法实现

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">    <!-- 配置c3p0连接池 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <!--注入里面的属性值 -->        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>        <property name="user" value="root"></property>        <property name="jdbcUrl" value="jdbc:mysql:///yun"></property>        <property name="password" value="123456"></property>    </bean>    <!--开启aop操作 -->    <!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy> <bean id="book" class="cn.itcast.aop.Book"></bean>         <bean id="mybook" class="cn.itcast.aop.MyBook"></bean> --></beans>
package cn.itcast.jdbc;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import org.junit.Test;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.jdbc.datasource.DriverManagerDataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.opensymphony.xwork2.Result;import com.sun.org.apache.regexp.internal.recompile;public class JdbcTemplateDemo2 {//  @Test//  public void JDBCTest() throws SQLException{//      Connection conn=null;//      PreparedStatement psmt=null;//      ResultSet rs=null;//      try {//          Class.forName("com.mysql.jdbc.Driver");//          conn= (Connection) DriverManager.getConnection("jdbc:mysql:///yun","root","123456");//          String sql="select * from user where usrname=?";//          conn.prepareStatement(sql);//          psmt.setString(1, "lucy");//          rs=psmt.executeQuery();//          while(rs.next()){//              String usrname=rs.getString("usrname");//              String password=rs.getString("password");//              User user=new User();//              user.setUsrname(usrname);//              user.setPassword(password);//              System.out.println(user);//          }//      } catch (Exception e) {//          e.printStackTrace();//      }finally {//          rs.close();//          conn.close();//          psmt.close();//      }//  }//  @Test//  public void testObject() {//      // 1.设置数据库信息//      DriverManagerDataSource dataSource = new DriverManagerDataSource();//      dataSource.setDriverClassName("com.mysql.jdbc.Driver");//      dataSource.setUrl("jdbc:mysql:///yun");//      dataSource.setUsername("root");//      dataSource.setPassword("123456");//      // 2.创建jdbcTemplate对象,设置数据源//      JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);//      // 3.调用方法//      //调用方法得到记录数//      String sql="select * from user where username=?";//      User user=jdbcTemplate.queryForObject(sql, new MyRowMapper(), "marry");//      System.out.println(user); ////  }//4.查询返回对象    @Test    public void testList() {//      ComboPooledDataSource dataSource=new ComboPooledDataSource();//      dataSource.setDriverClass(com.mysql.jdbc.Driver);        // 1.设置数据库信息        DriverManagerDataSource dataSource = new DriverManagerDataSource();        dataSource.setDriverClassName("com.mysql.jdbc.Driver");        dataSource.setUrl("jdbc:mysql:///yun");        dataSource.setUsername("root");        dataSource.setPassword("123456");        // 2.创建jdbcTemplate对象,设置数据源        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);        // 3.调用方法        //调用方法得到记录数        String sql="select * from user ";        List<User> list=jdbcTemplate.query(sql, new MyRowMapper());        System.out.println(list);     }}class MyRowMapper implements RowMapper<User>{    @Override    public User mapRow(ResultSet rs, int num) throws SQLException {        String username=rs.getString("username");        String password=rs.getString("password");        User user=new User();        user.setUsrname(username);        user.setPassword(password);        return user;    }}

Spring的事务管理功能

事务概念:
1.什么是事务
2.事务的特性:
原子性,一致性,隔离性,持久性
3.不可隔离产生读问题
4.解决读问题
(1)设置隔离性

spring事务管理api

第一种:编程式事务管理(不怎么用)
第二种:声明式事务管理
(1)基于xml配置文件实现
(2)基于注解实现

spring针对不同的dao层,提供接口不同的实现类
首先配置事务的管理器

搭建转账环境
1.创建数据库表
2.创建一个service和dao类,完成注入关系
(1)service层又叫做业务逻辑层
(2)dao层,单纯对数据库操作层,在dao层不添加业务
(3)需求:小王转账给小马
小王少1000
小马多1000

3.没加事务产生的问题
(1)如果小王少了1000之后,出现异常,小马不会多1000,钱丢了

4.解决
(1)添加事务解决,出现异常回滚操作

声明式的事务管理(xml配置)
1.配置文件使用aop思想配置
第一步:配置事务管理器
第二步:配置事务的增强
第三步:配置切面

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 配置c3p0连接池 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <!--注入里面的属性值 -->        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>        <property name="user" value="root"></property>        <property name="jdbcUrl" value="jdbc:mysql:///yun"></property>        <property name="password" value="123456"></property>    </bean>    <!-- 1.配置事务管理器 -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!-- 注入dataSource -->        <property name="dataSource" ref="dataSource"></property>    </bean>    <!--配置事务的增强 -->    <tx:advice id="txadvice" transaction-manager="transactionManager">        <tx:attributes>        <!--设置进行事务操作的方法匹配规则  -->            <tx:method name="account*" />        </tx:attributes>    </tx:advice>    <!-- 配置切面 -->    <aop:config>     <aop:pointcut expression="execution(* cn.itcast.dao.OrdersDao.*(..))" id="pointcut1"/>     <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>    </aop:config>    <bean id="ordersService" class="cn.itcast.service.OrdersService">        <property name="ordersDao" ref="ordersDao"></property>    </bean>    <bean id="ordersDao" class="cn.itcast.dao.OrdersDao">        <property name="jdbcTemplate" ref="jdbcTemplate"></property>    </bean>    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">        <property name="dataSource" ref="dataSource"></property>    </bean></beans>

声明式事务管理(注解)
第一步:配置事务管理器
第二步:配置事务注释
第三步:在使用事务的方法所在类上面添加注释

package cn.itcast.service;import org.springframework.transaction.annotation.Transactional;import cn.itcast.dao.OrdersDao;@Transactionalpublic class OrdersService {    private OrdersDao ordersDao;    public void setOrdersDao(OrdersDao ordersDao) {        this.ordersDao = ordersDao;    }    //调用dao的方法    public void accountMoney(){        //小王少钱        ordersDao.lessMoney();        //出现异常        int i=10/0;        //小马多钱        ordersDao.moreMoney();    }}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 配置c3p0连接池 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <!--注入里面的属性值 -->        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>        <property name="user" value="root"></property>        <property name="jdbcUrl" value="jdbc:mysql:///yun"></property>        <property name="password" value="123456"></property>    </bean>    <!-- 1.配置事务管理器 -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!-- 注入dataSource -->        <property name="dataSource" ref="dataSource"></property>    </bean>    <tx:annotation-driven transaction-manager="transactionManager"/>    <bean id="ordersService" class="cn.itcast.service.OrdersService">        <property name="ordersDao" ref="ordersDao"></property>    </bean>    <bean id="ordersDao" class="cn.itcast.dao.OrdersDao">        <property name="jdbcTemplate" ref="jdbcTemplate"></property>    </bean>    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">        <property name="dataSource" ref="dataSource"></property>    </bean></beans>