¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³ | »áÔ±ÖÐÐÄ | ÎÒҪͶ¸å Àî´óͬ £¨https://www.lidatong.com.cn/£©- ¿Æ¼¼¡¢½¨Õ¾¡¢¾­Ñé¡¢ÔƼÆËã¡¢5G¡¢´óÊý¾Ý,Õ¾³¤Íø!
µ±Ç°Î»Ö㺠Ê×Ò³ > ´óÊý¾Ý > ÕýÎÄ

spring֮ΪʲôҪʹÓÃÊÂÎñ£¿£¨Ò»£©

·¢²¼Ê±¼ä£º2020-12-15 01:13:02 ËùÊôÀ¸Ä¿£º´óÊý¾Ý À´Ô´£ºÍøÂçÕûÀí
µ¼¶Á£ºÎÊÌâÃèÊö£ºÏÖÔÚÎÒÃÇÓÐÒ»¸öÊý¾Ý¿â£ºspring ÈýÕÅ±í£ºaccount¡¢book¡¢book_stock account´æ´¢×ÅÓû§ÒÔ¼°ÕË»§Óà¶î¡£book´æ´¢×ÅÊéºÅ¡¢Ãû×ÖºÍ ¹ºÂòÒ»±¾ËùÐè½ð¶î¡£book_stock´æ´¢×ÅÊéºÅÒÔ¼°¶ÔÓ¦µÄ¿â´æ¡£ ÏÖÔÚÎÒÃÇÓÐÕâôһ¸öÐèÇó£º Óû§ÂòÒ»±¾Ê飬ÏÈÈÃÊéµÄ¿â´æ¼õÒ»£¬

ÎÊÌâÃèÊö£ºÏÖÔÚÎÒÃÇÓÐÒ»¸öÊý¾Ý¿â£ºspring

ÈýÕÅ±í£ºaccount¡¢book¡¢book_stock

account´æ´¢×ÅÓû§ÒÔ¼°ÕË»§Óà¶î¡£book´æ´¢×ÅÊéºÅ¡¢Ãû×ÖºÍ ¹ºÂòÒ»±¾ËùÐè½ð¶î¡£book_stock´æ´¢×ÅÊéºÅÒÔ¼°¶ÔÓ¦µÄ¿â´æ¡£

ÏÖÔÚÎÒÃÇÓÐÕâôһ¸öÐèÇó£ºÓû§ÂòÒ»±¾Ê飬ÏÈÈÃÊéµÄ¿â´æ¼õÒ»£¬È»ºóÔÚÈÃÓû§Óà¶î¼õÈ¥ÏàÓ¦µÄ½ð¶î¡£ÎÒÃÇÀ´¿´ÈçºÎ´¦Àí¡£

н¨Ò»¸öJava project£¬ÔÚÏîÄ¿ÏÂн¨Ò»¸ölibÎļþ¼Ð£¬ÔÚÎļþ¼ÐÖмÓÈëÒÔÏ°ü£º

Ñ¡ÖÐÕâЩ°ü£¬µã»÷Êó±êÓÒ¼ü£¬Ñ¡Ôñbuild path£¬Ñ¡Ôñadd to build path¡£

È»ºó½¨Á¢ÒÔϵÄĿ¼½á¹¹£º

Ò»¡¢ÅäÖÃÁ¬½ÓÊý¾Ý¿â

db.properties

jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///spring
jdbc.initPoolSize=5
jdbc.maxPoolSize=10

ÔÚapplicationContex.xmlÖÐ

<?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:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
    <!-- µ¼Èë×ÊÔ´Îļþ -->
    context:property-placeholder location="classpath:db.properties"/>
    
     ÅäÖà C3P0 Êý¾ÝÔ´ bean id="dataSource"
        class="com.mchange.v2.c3p0.ComboPooledDataSource">
        property name="user" value="${jdbc.user}"></property="password"="${jdbc.password}"="jdbcUrl"="${jdbc.jdbcUrl}"="driverClass"="${jdbc.driverClass}">

        ="initialPoolSize"="${jdbc.initPoolSize}"="maxPoolSize"="${jdbc.maxPoolSize}">
    </bean>
    
    
beans>

¶þ¡¢ÀûÓûùÓÚ×¢½âµÄ·½Ê½ÅäÖÃbean

ÏòapplicationContext.xmlÖмÓÈë

context:component-scan base-package="com.gong.spring"context:component-scan>

Èý¡¢ÅäÖÃJdbcTemplate£¬²¢ÀûÓÃJdbcTemplate²Ù×÷Êý¾Ý¿â

ÏòapplicationContext.xmlÖмÓÈë

     ÅäÖà Spirng µÄ JdbcTemplate ="jdbcTemplate" 
        class="org.springframework.jdbc.core.JdbcTemplate" ref="dataSource">

BookShopDao.java

package com.gong.spring.tx;

public interface BookShopDao {
    
    ¸ù¾ÝÊéºÅ»ñÈ¡ÊéµÄµ¥¼Û
    int findBookPriceByIsbn(String isbn);
    ¸üÐÂÊéµÄ¿â´æ£¬Ê¹ÊéºÅ¶ÔÓ¦µÄ¿â´æ-1
    void updateBookStock(String isbn);
    ¸üÐÂÕË»§Óà¶î£ºÊ¹usernameµÄbalance-price
    void updateUserAccount(String username, price);
}

BookShopDaoImpl.java

import org.springframework.beans.factory.annotation.Autowired;
 org.springframework.jdbc.core.JdbcTemplate;
 org.springframework.stereotype.Repository;

@Repository("bookShopDao")
class BookShopDaoImpl implements BookShopDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Override
     findBookPriceByIsbn(String isbn) {
        String sql = "SELECT price FROM book WHERE isbn = ?";
        return jdbcTemplate.queryForObject(sql,Integer.class,isbn);
    }

    @Override
     updateBookStock(String isbn) {
        String sql2 = "SELECT stock FROM book_stock WHERE isbn = ?"int stock = jdbcTemplate.queryForObject(sql2,isbn);
        ¼ì²éÊéµÄ¿â´æÊÇ·ñ×ã¹»£¬Èç¹û²»¹»£¬¾ÍÅ׳öÒì³£
        if(stock == 0){
            throw new BookStockException("¿â´æ²»×ã!");
        }
        
        String sql = "UPDATE book_stock SET stock = stock -1 WHERE isbn = ?";
        jdbcTemplate.update(sql,1)"> price) {
        String sql2 = "SELECT balance FROM account WHERE username = ?"int balance = jdbcTemplate.queryForObject(sql2,username);
        if(balance < price){
            new UserAccountException("Óà¶î²»×ã!");
        }
        
        String sql = "UPDATE account SET balance = balance - ? WHERE username = ?"×Ô¼º¶¨Òå¸ÃÅ׳öµÄÒì³£¡£

BookStockException.java

class BookStockException extends RuntimeException{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public BookStockException() {
        super();
         TODO Auto-generated constructor stub
    }

     BookStockException(String message,Throwable cause,boolean enableSuppression,1)">boolean writableStackTrace) {
        (message,cause,enableSuppression,writableStackTrace);
         BookStockException(String message) {
        (message);
         BookStockException(Throwable cause) {
        (cause);
            }

    
}

UserAccountException.java

class UserAccountException  UserAccountException() {
         UserAccountException(String message,1)"> UserAccountException(String message) {
         UserAccountException(Throwable cause) {
            }

    
    
}

Òª¶¨Òå×Ô¼ºÒì³£µÄÃû³Æ£¬ÐèÒªÈÃÆä¼Ì³ÐRuntimeException£¬²¢ÊµÏÖ¹¹Ôì·½·¨¡£

È»ºóÊÇ·þÎñ²ãµÄ´úÂ룺

BookShopService.java

 BookShopService {
    
     purchase(String username,String isbn);
    
}

Ö»ÓÐÒ»¸ö·½·¨Ì壬¾ÍÊǹºÂòµÄ²Ù×÷¡£

BookShopServiceImpl.java¡¡¡¡

 org.springframework.stereotype.Service;


@Service("bookShopService"class BookShopServiceImpl  BookShopService {

    @Autowired
     BookShopDao bookShopDao;
    
    @Override
    1. »ñÈ¡ÊéµÄµ¥¼Û
        int price = bookShopDao.findBookPriceByIsbn(isbn);
        
        2. ¸üпâ´æ
        bookShopDao.updateBookStock(isbn);
        
        3. ¸üÐÂÓà¶î
        bookShopDao.updateUserAccount(username,price);
    }

}

×îºó£¬ÎÒÃǽ¨Á¢Ò»¸öJUnit Test CaseµÄÎļþ½øÐвâÊÔ£º

SpringTransactionImpl.java

 org.junit.Test;
 org.springframework.context.ApplicationContext;
 org.springframework.context.support.ClassPathXmlApplicationContext;

 SpringTransactionTest {

    private ApplicationContext ctx = null;
    private BookShopDao bookShopDao = private BookShopService bookShopService = ;
    {
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        bookShopDao = ctx.getBean(BookShopDao.);
        bookShopService = ctx.getBean(BookShopService.);
    }
    
    
    @Test
     testBookShopService(){
        bookShopService.purchase("AA","1001");
    }
    
    @Test
     testBookShopDaoUpdateUserAccount(){
        bookShopDao.updateUserAccount("AA",10 testBookShopDaoUpdateBookStock(){
        bookShopDao.updateBookStock("1001" testBookShopDaoFindPriceByIsbn() {
        System.out.println(bookShopDao.findBookPriceByIsbn("1001"));
    }

}

ÕâÀïÃ浱ȻҲ¿ÉÒÔ²âÊÔ²Ù×÷Êý¾Ý¿âµÄDaoµÄ´úÂë¡£ÎÒÃÇÏÖÔÚ¾ÍÖ»¹Ø×¢testBookShopService·½·¨£¬¼´¹ºÂò²Ù×÷ÊÇ·ñ´æÔÚÎÊÌâ¡£

ÓÒ¼üµã»÷testBookShopService£¬Ñ¡Ôñrun as JUnit-Test¡£Ö´Ðгɹ¦ºóÎÒÃÇ¿´Êý¾Ý¿âÖеÄÊý¾Ý£º

³É¹¦µÄÂòÒ»±¾ÊéºÅΪ1001 µÄÊéÁË¡£

ÕË»§Óà¶î¼õµôÁË100.

ÎÒÃÇÔÙÖ´ÐÐÒ»´ÎtestBookShopService·½·¨£º±¨´í£ºÓà¶î²»×㣬ÏÔÈ»60²»¹»Âò100µÄÊé¡£

µ«ÊÇÄØ£¬ÎÒÃÇÏÈÖ´ÐеÄÊÇ¿â´æ¼õÒ»²Ù×÷£¬´Ëʱ¿â´æ£º

Ã÷Ã÷ûÓÐÂò³É¹¦£¬µ«¿â´æ¼õÁËÒ»£¬Õâ¾Í´æÔÚÎÊÌâÁË¡£

ÓÐÈËÒ²Ðí»áÎÊ£¬ÄÇÎÒÃÇÏÈÅжϽð¶î£¬ÔÙ½øÐпâ´æ²Ù×÷²»¾Í¿ÉÒÔÁËô£¿

ÕâÒ²´æÔÚÎÊÌ⣺¼ÙÉè½ð¶î×ã¹»£¬µ«ÊÇ¿â´æΪÁã¡£ÏÈÖ´Ðнð¶î¼õµôÊéµÄ¼ÛÖµ²Ù×÷£¬µ«Êǻᱨ¿â´æ²»×ã¡£Ï൱ÓÚÎÒÇ®¸¶ÁË£¬Ã»Âòµ½Ê飬Õâ²»¾ÍÞÏÞÎÁË¡£

ÕâÖÖÇé¿öÏ£¬ÎÒÃǾÍÐèÒªÓõ½ÊÂÎñ´¦Àí¡£

±¾ÕÂÌ«³¤ÁË£¬·ÅÔÚϽÚд°É¡£¡£¡£

£¨±à¼­£ºÀî´óͬ£©

¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ!

    ÍƼöÎÄÕÂ
      ÈȵãÔĶÁ