zoukankan      html  css  js  c++  java
  • [原创]spring及springmvc精简版--继承数据源,声明式事物

    1.前期:导入c3p0 jar包,相关数据库连接jar包,我用的是mysql

    2.关注事物管理器的配置和AOP配置

    代码: 核心关注bean配置文件

     application.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:context="http://www.springframework.org/schema/context"
     6     xmlns:tx="http://www.springframework.org/schema/tx"
     7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
     9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    10         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    11     <!-- 加载属性文件 -->
    12     <context:property-placeholder location="classpath:db.properties"/>
    13     
    14     
    15     
    16     
    17     <!-- 初始化数据源的bean -->
    18     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    19         <property name="driverClass" value="${driverClassName1}"></property>
    20         <property name="jdbcUrl" value="${url1}"></property>
    21         <property name="user" value="${username1}"></property>
    22         <property name="password" value="${password1}"></property>
    23         <property name="maxPoolSize" value="${maxActive1}"></property>
    24         <property name="initialPoolSize" value="${initialSize1}"></property>
    25     </bean>
    26     <!-- 配置jdbcTemplate -->
    27     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    28         <property name="dataSource" ref="dataSource"></property>
    29         
    30     </bean>
    31     
    32     <bean id="person" class="com.bean.Person"></bean>
    33     
    34     <bean id="dao" class="com.dao.Dao">
    35         <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    36     </bean>
    37     <bean id="service" class="com.service.Service">
    38         <property name="dao" ref="dao"></property>
    39     </bean>
    40     
    41     <!-- 购买商品的bean -->
    42     <bean id="users" class="com.bean.Users"></bean>
    43     <bean id="goods" class="com.bean.Goods"></bean>
    44     <bean id="usersDao" class="com.dao.UsersDao">
    45         <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    46     </bean>
    47     <bean id="goodsDao" class="com.dao.GoodsDao">
    48         <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    49     </bean>
    50     <bean id="buyService" class="com.service.BuyService">
    51         <property name="goodsDao" ref="goodsDao"></property>
    52         <property name="usersDao" ref="usersDao"></property>
    53     </bean>
    54     <bean id="buyMarthService" class="com.service.BuyMarthService">
    55         <property name="buyService" ref="buyService"></property>
    56     </bean>
    57     
    58 
    59     <!-- 配置事务管理器 -->
    60     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    61         <property name="dataSource" ref="dataSource"></property>
    62     </bean>
    63     <!-- 配置事务属性 -->
    64     <tx:advice id="txa" transaction-manager="transactionManager">
    65         <tx:attributes>
    66             <tx:method name="buyOneGoods" propagation="REQUIRES_NEW"/>
    67             <tx:method name="*"/>
    68         </tx:attributes>
    69     </tx:advice>
    70     <!-- 配置事务aop
    71     
    72      -->
    73     
    74     <aop:config>
    75         <aop:pointcut expression="execution(* com.service.*.*(..))" id="pc"/>
    76         <aop:advisor advice-ref="txa" pointcut-ref="pc"/>
    77     </aop:config>
    78 </beans>

    db.properties

    1 driverClassName1 = com.mysql.jdbc.Driver
    2 url1 = jdbc:mysql://localhost:3306/test
    3 username1 = root
    4 password1 = mysql
    5 maxActive1 = 50
    6 initialSize1 =20

    com.bean

    Users

     1 package com.bean;
     2 
     3 public class Goods {
     4 
     5     private int gid;
     6     private int gprice;
     7     private int gnum;
     8     public int getGid() {
     9         return gid;
    10     }
    11     public void setGid(int gid) {
    12         this.gid = gid;
    13     }
    14     public int getGprice() {
    15         return gprice;
    16     }
    17     public void setGprice(int gprice) {
    18         this.gprice = gprice;
    19     }
    20     public int getGnum() {
    21         return gnum;
    22     }
    23     public void setGnum(int gnum) {
    24         this.gnum = gnum;
    25     }
    26     
    27 }

    Person

     1 package com.bean;
     2 
     3 public class Person {
     4 
     5     private String name;
     6     private int age;
     7     public String getName() {
     8         return name;
     9     }
    10     public void setName(String name) {
    11         this.name = name;
    12     }
    13     public int getAge() {
    14         return age;
    15     }
    16     public void setAge(int age) {
    17         this.age = age;
    18     }
    19     
    20 }

    User

     1 package com.bean;
     2 
     3 public class Users {
     4 
     5     private int uid    ;
     6     private String uname;
     7     private int umoney;
     8     public int getUid() {
     9         return uid;
    10     }
    11     public void setUid(int uid) {
    12         this.uid = uid;
    13     }
    14     public String getUname() {
    15         return uname;
    16     }
    17     public void setUname(String uname) {
    18         this.uname = uname;
    19     }
    20     public int getUmoney() {
    21         return umoney;
    22     }
    23     public void setUmoney(int umoney) {
    24         this.umoney = umoney;
    25     }
    26     
    27 }

     

    DAO

    DAO

     1 package com.dao;
     2 import org.springframework.jdbc.core.JdbcTemplate;
     3 
     4 import com.bean.Person;
     5 
     6 
     7 public class Dao {
     8     
     9     private JdbcTemplate jdbcTemplate;
    10     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    11         this.jdbcTemplate = jdbcTemplate;
    12     }
    13 
    14     public int update(Person p){
    15         int num = jdbcTemplate.update("update person set name=? where age=?", p.getName(),p.getAge());
    16         return num;
    17     }
    18 }

    GoodsDao

     1 package com.dao;
     2 
     3 import org.springframework.jdbc.core.JdbcTemplate;
     4 
     5 public class GoodsDao {
     6 
     7     private JdbcTemplate jdbcTemplate;
     8     
     9     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    10         this.jdbcTemplate = jdbcTemplate;
    11     }
    12     
    13     public int getGpriceByGid(int gid){
    14         int gprice = jdbcTemplate.queryForObject("select gprice from goods where gid=?", Integer.class, gid);
    15         return gprice;
    16     }
    17     
    18     public int getGnumByGid(int gid){
    19         int gnum = jdbcTemplate.queryForObject("select gnum from goods where gid=?", Integer.class, gid);
    20         return gnum;
    21     }
    22     
    23     public void updateGnum(int gid,int num){
    24         jdbcTemplate.update("update goods set gnum=gnum-? where gid=?", num,gid);
    25     }
    26 }

    UserDao

    package com.dao;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    
    public class UsersDao {
        private JdbcTemplate jdbcTemplate;
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        public int getMoneyByUid(int uid){
            int umoney = jdbcTemplate.queryForObject("select umoney from users where uid=?", Integer.class, uid);
            return umoney;
        }
        public void updateUmoney(int uid,int price){
            jdbcTemplate.update("update users set umoney=umoney-? where uid=?", price,uid);
        }
    }

    Service

     1 package com.service;
     2 
     3 public class BuyMarthService {
     4 
     5     private BuyService buyService;
     6     public void setBuyService(BuyService buyService) {
     7         this.buyService = buyService;
     8     }
     9     
    10     public void buygoodsList(int uid,int[] gids,int[] nums){
    11         for(int i = 0;i<gids.length;i++){
    12             buyService.buyOneGoods(uid, gids[i], nums[i]);
    13         }
    14         
    15     }
    16 }
     1 package com.service;
     2 
     3 import com.dao.GoodsDao;
     4 import com.dao.UsersDao;
     5 
     6 public class BuyService {
     7 
     8     private UsersDao usersDao;
     9     private GoodsDao goodsDao;
    10     public void setGoodsDao(GoodsDao goodsDao) {
    11         this.goodsDao = goodsDao;
    12     }
    13     public void setUsersDao(UsersDao usersDao) {
    14         this.usersDao = usersDao;
    15     }
    16     
    17     public void buyOneGoods(int uid,int gid,int num){
    18         /*
    19          * 1-获取商品的库存
    20          * 2-验证库存是否足够
    21          *  1-不足:抛出异常  (回滚)
    22          *  2-足:修改商品的库存
    23          * 3-修改余额等同2
    24          */
    25         int gnum = goodsDao.getGnumByGid(gid);
    26         if(gnum <= num){
    27             throw new RuntimeException("商品库存不足");
    28         }
    29         goodsDao.updateGnum(gid, num);
    30         int gprice = goodsDao.getGpriceByGid(gid);
    31         int umoney = usersDao.getMoneyByUid(uid);
    32         if(umoney < gprice*num){
    33             throw new RuntimeException("用户余额不足");
    34         }
    35         usersDao.updateUmoney(uid, gprice*num);
    36     }
    37     
    38 }
     1 package com.service;
     2 
     3 import com.bean.Person;
     4 import com.dao.Dao;
     5 
     6 public class Service {
     7 
     8     private Dao dao;
     9     public void setDao(Dao dao) {
    10         this.dao = dao;
    11     }
    12     public void updatePerson(Person p){
    13         dao.update(p);
    14     }
    15 }
  • 相关阅读:
    闲着写了一个查看股票的程序
    Oracle10g正则表达式
    跨语言平台的RSA加密、解密、签名、验证算法的实现
    Base64转换:AQAB=65537,你知道为什么吗?
    无题
    07年了,新的一年又开始了
    简单生活
    近期关注
    闲话
    各大网站的WEB服务器分析
  • 原文地址:https://www.cnblogs.com/jasonHome/p/6670337.html
Copyright © 2011-2022 走看看