A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangxuchang 初级黑马   /  2018-7-6 10:10  /  632 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-7-6 10:24 编辑

spring_day03

[Java] 纯文本查看 复制代码
快速入门:

准备:

建表+实体类

导包:

        spring-beans-4.2.4.RELEASE.jar

        spring-context-4.2.4.RELEASE.jar

        spring-core-4.2.4.RELEASE.jar

        spring-expression-4.2.4.RELEASE.jar

        spring-web-4.2.4.RELEASE.jar

        spring-test-4.2.4.RELEASE.jar

        

    //日志相关jar
    commons-logging-1.2.jar
    log4j-1.2.16.jar
    
    //AOP相关jar包
    com.springsource.org.aopalliance-1.0.0.jar
    spring-aop-4.2.4.RELEASE.jar
    com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
    
    //DB相关jar包
    spring-tx-4.2.4.RELEASE.jar
    spring-jdbc-4.2.4.RELEASE.jar
    
    //数据库驱动jar包
    mysql-connector-java-5.1.7-bin.jar
    //C3P0jar包
    c3p0-0.9.2.1.jar
    mchange-commons-java-0.2.3.4.jar

在src目录下创建db.properoties配置文件,提供数据库连接信息

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql:///springtest

jdbc.username=root

jdbc.password=123

创建applicationContext.xml文件

需要创建的对象:

连接池——单例

        注入到JdbcTemplate对象

JdbcTemplate

        注入到dao层对象(注解形式)

dao层

        注入到service层对象(注解形式)

service层

        注入到单元测试对象(注解形式)

<!-- 引入外部的properties文件 -->

<context:property-placeholder location="classpath:db.properties" />

<!-- 

  创建内置连接池 

  等价于 DriverManagerDataSource dmDs = new DriverManagerDataSource();

 -->

<bean id="dmDs" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="${jdbc.driverClass}" />

    <property name="url" value="${jdbc.url}" />

    <property name="username" value="${jdbc.username}" />

    <property name="password" value="${jdbc.password}"/>

</bean>

<!-- 

  创建c3p0连接池 

  等价于 ComboPooledDataSource c3p0Ds = new ComboPooledDataSource();

 -->

<bean id="c3p0Ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">

    <property name="driverClass" value="${jdbc.driverClass}" />

    <property name="jdbcUrl" value="${jdbc.url}" />

    <property name="user" value="${jdbc.username}" />

    <property name="password" value="${jdbc.password}" />

</bean>

<!--dao层未继承JdbcDaoSupport-->

    <!-- 创建JdbcTemplate对象 -->

    <bean id="jdbcTeplate" class="org.springframework.jdbc.core.JdbcTemplate">

        <property name="dataSource" ref="c3p0Ds"></property>

    </bean>

    <!--创建Dao层对象-->
    <bean id="accountDao" class="com.itnannan.dao.AccountDaoImpl"></bean>

<!--dao层继承JdbcDaoSupport-->

    <bean id="accountDao" class="com.itnannan.dao.AccountDaoImpl">

        <!-- 当注入dataSource后,底层会自动创建一个JdbcTemplate -->

        <property name="dataSource" ref="c3p0Ds" />

    </bean>

<!--service层对象-->

<bean id ="accountService" class="com.itnannan.service.AccountServiceImpl"/>

单元测试:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:applicationContext.xml")

public class JTemplateTest {

    @Autowired
    private AccountService accountService;
    
    @Test
    public void test01(){
            accountService.account("tom", "fox", 100);
    }

}

//获取对象(查询结果为一条记录)

    User user = jdbcTemplate.queryForObject("select * from t_user where id =?", 

                                            new BeanPropertyRowMapper<User>(User.class),1);

//获取对象集合(查询结果为多条记录)

    List<User> user = jTemplate.query("select * from t_user", new BeanPropertyRowMapper<User>(User.class));

声明式事务管理:

事务管理的核心:同一个连接

XML形式:

目的:使转账方法获得增强,实现事务管理

需要:

    连接池                                                

    dao层继承JdbcDaoSupport         //需要连接池对象和数据库交互

        //以上为了操作数据库

        --------------------------------我是分割线--------------------------

    //以下为了实现事务管理(AOP)

    service                                                //需要dao层对象操作数据库

    事务管理器

    事务通知

    切面

配置applicationContext.xml文件

<!-- 目标对象,也是测试需要的对象 -->

<bean id ="accountService" class="com.itnannan.service.AccountServiceImpl2"/>

<!-- 

  创建c3p0连接池 

  等价于 ComboPooledDataSource c3p0Ds = new ComboPooledDataSource();

 -->

<bean id="c3p0Ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">

    <property name="driverClass" value="${jdbc.driverClass}" />

    <property name="jdbcUrl" value="${jdbc.url}" />

    <property name="user" value="${jdbc.username}" />

    <property name="password" value="${jdbc.password}" />

</bean>

<!--dao层对象-->

<bean id="accountDao" class="com.itnannan.dao.AccountDaoImpl">

    <!-- 当注入dataSource后,底层会自动创建一个JdbcTemplate -->

    <property name="dataSource" ref="c3p0Ds" />

</bean>

<!-- 目标对象,也是测试需要的对象service -->

<bean id ="accountService" class="com.itnannan.service.AccountServiceImpl"></bean>

<!--配置事务管理器  -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <!--事务的管理需要连接-->

    <property name="dataSource" ref="c3p0Ds"></property>

</bean>

<!-- 配置事务通知 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

    tx:attributes

    <!-- 

     name:必需的,对哪些方法进行事务控制

     isolation 可选 设置事务隔离级别 默认是DEFAULT 

     propagation:可选 设置事务传播 默认值 REQUIRED

     timeout 可选 超时时间 默认值-1 

     read-only 可选 默认值是false 如果不是只读,它可以对insert update delete操作,如果是只读不可以。

     rollback-for 可选 可以设置一个异常,如果产生这个异常,触发事务回滚

     no-rolback-for 可选 可以设置一个异常,如果产生这个异常,不会触发事务回滚

    -->

        <tx:method name="account" read-only="false"/>

    /tx:attributes

/tx:advice

<!-- 配置切面 -->

aop:config

    <aop:pointcut expression="execution(* com.itnannan.service.AccountServiceImpl.account(..))" id="XPoint"/>        

    <aop:advisor advice-ref="txAdvice" pointcut-ref="XPoint"/>

/aop:config

单元测试:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:applicationContext.xml")

public Test{

    //测试service对象的方法,需要service对象

    @Autowired

    private AccountService accountService;

    

    @Test
    public void test(){
        accountService.account("tom","fox",500);
    }

}

Annotation形式:

目的:使转账方法获得增强,实现事务管理

需要:

    连接池                                                

    dao层继承JdbcDaoSupport         //需要连接池对象和数据库交互

        //以上为了操作数据库

    //以下为了实现事务管理(AOP)

    service                                                //需要dao层对象操作数据库

    事务管理器

         配置注解需要的参数

配置applicationContext.xml文件:

<!-- 引入外部的properties文件 -->

<context:property-placeholder location="classpath:db.properties" />

<!-- 目标对象,也是测试需要的对象 -->

在service层添加注解注入dao

<bean id ="accountService" class="com.itnannan.service.AccountServiceImpl2"/>

<!-- 

  创建c3p0连接池 

  等价于 ComboPooledDataSource c3p0Ds = new ComboPooledDataSource();

 -->

<bean id="c3p0Ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">

    <property name="driverClass" value="${jdbc.driverClass}" />

    <property name="jdbcUrl" value="${jdbc.url}" />

    <property name="user" value="${jdbc.username}" />

    <property name="password" value="${jdbc.password}" />

</bean>

<!--dao层-->

<bean id="accountDao" class="com.itnannan.dao.AccountDaoImpl">

    <!-- 当注入dataSource后,底层会自动创建一个JdbcTemplate -->

    <property name="dataSource" ref="c3p0Ds" />

</bean>

<!--配置事务管理器  -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <property name="dataSource" ref="c3p0Ds"></property>

</bean>

<!-- 配置注解需要的参数 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

service层注解:

在类或要增强方法上添加@Transactional即可




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马