SpringIOC和SpringAOC

打印 上一主题 下一主题

主题 540|帖子 540|积分 1620

  1. lombok插件
  2. <strong>XML</strong>
复制代码
  1.     <!-- 加载资源文件 -->
  2.     <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
  3.     <!-- 注入数据源 -->
  4.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  5.         <property name="driverClass" value="${msg1}"></property>
  6.         <property name="jdbcUrl" value="${msg2}"></property>
  7.         <property name="user" value="${msg3}"></property>
  8.         <property name="password" value="${msg4}"></property>
  9.     </bean>
  10.     <!-- 注入QueryRunner -->
  11.     <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
  12.         <constructor-arg name="ds" ref="dataSource"></constructor-arg>
  13.     </bean>
  14.     <!-- 连接工具类 -->
  15.     <bean id="connectionUtil" class="com.xn.util.ConnectionUtil">
  16.         <property name="dataSource" ref="dataSource"/>
  17.     </bean>
  18.     <!-- 事务工具类 -->
  19.     <bean id="transactionUtil" class="com.xn.util.TransactionUtil">
  20.         <property name="connectionUtil" ref="connectionUtil"/>
  21.     </bean>
  22.     <!-- 注入dao -->
  23.     <bean id="mapperImp" class="com.xn.dao.AccountMapperImp">
  24.         <property name="queryRunner" ref="queryRunner"></property>
  25.         <property name="connectionUtil" ref="connectionUtil"></property>
  26.     </bean>
  27.     <!-- 注入service -->
  28.     <bean id="service" class="com.xn.service.AccountServiceImp">
  29.         <property name="mapper" ref="mapperImp"/>
  30.         <property name="transactionUtil" ref="transactionUtil"></property>
  31.     </bean>
  32.     <!-- 注入controller -->
  33.     <bean id="controller" class="com.xn.controller.AccountControllerImp">
  34.         <property name="service" ref="service"/>
  35.     </bean>
复制代码
  1. 功能:对实体类自动,动态生成getset,无参有参.....
  2. 步骤:
  3.     1.idea安装插件(只做一次)
  4.     2.添加坐标
复制代码
  1.      <!-- lombok -->
  2.         <dependency>
  3.             <groupId>org.projectlombok</groupId>
  4.             <artifactId>lombok</artifactId>
  5.             <version>1.18.26</version>
  6.         </dependency>
  7.     </dependencies>
复制代码
  1.    3.编写注解
  2. dbUtil-阿帕奇提供操作数据库的插件
  3. 核心类:QueryRunner
  4.             .query()  查询
  5.             .update() 增删改
复制代码
  1.     //操作数据库的核心类
  2.     QueryRunner queryRunner;
  3.     public void setQueryRunner(QueryRunner queryRunner) {
  4.         this.queryRunner = queryRunner;
  5.     }
  6. @Override
  7.     public void save(Account account) {
  8.         try {
  9.             queryRunner.update(connectionUtil.createCon(),"insert into account(aname,amoney) value(?,?)",account.getAname(),account.getAmoney());
  10.         } catch (SQLException throwables) {
  11.             throwables.printStackTrace();
  12.         }
  13.     }
  14. @Override
  15.     public void updateById(Account account) {
  16.         try {
  17.             queryRunner.update(connectionUtil.createCon(),"update  account set aname=?,amoney=? where aid=?",account.getAname(),account.getAmoney(),account.getAid());
  18.         } catch (SQLException throwables) {
  19.             throwables.printStackTrace();
  20.         }
  21.     }
  22.     @Override
  23.     public void deleteById(int id) {
  24.         try {
  25.             queryRunner.update(connectionUtil.createCon(),"delete from account where aid=?",id);
  26.         } catch (SQLException throwables) {
  27.             throwables.printStackTrace();
  28.         }
  29.     }
复制代码
  1. <!-- 注入QueryRunner -->
  2.     <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
  3.         <constructor-arg name="ds" ref="dataSource"></constructor-arg>
  4.     </bean>
复制代码
  1. junit测试
  2. 使用步骤:
  3.     1.坐标
复制代码
  1.      单元测试-->
  2.         <dependency>
  3.             <groupId>junit</groupId>
  4.             <artifactId>junit</artifactId>
  5.             <version>4.12</version>
  6.             <scope>test</scope>
  7.         </dependency>
复制代码
  1.    2.注解(修饰方法)
  2.         @Test======>可以运行的方法
  3.         @Before====>@Test运行之前
  4.         @After=====>@Test运行之后
复制代码
  1. public class Test01 {
  2.     ClassPathXmlApplicationContext applicationContext=null;
  3.     IAccountController controller=null;
  4.     @Before
  5.     public void beforeMethod(){
  6.         applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  7.         controller = (IAccountController) applicationContext.getBean("controller");
  8.     }
  9.     @After
  10.     public void afterMethod(){
  11.         applicationContext.close();
  12.     }
  13.     @Test
  14.     public void show1(){
  15.         controller.save(new Account("林航宇",2000));
  16.         controller.save(new Account("杨文琪",2000));
  17.     }
  18.     @Test
  19.     public void show2(){
  20.         List<Account> all = controller.findAll();
  21.         for (int i = 0; i < all.size(); i++) {
  22.             Account account =  all.get(i);
  23.             System.out.println(account);
  24.         }
  25.     }
  26. }
复制代码
注解
  1. <!-- 加载资源文件 -->    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>    <!-- 注入数据源 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="driverClass" value="${msg1}"></property>        <property name="jdbcUrl" value="${msg2}"></property>        <property name="user" value="${msg3}"></property>        <property name="password" value="${msg4}"></property>    </bean>    <!-- 注入QueryRunner -->
  2.     <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
  3.         <constructor-arg name="ds" ref="dataSource"></constructor-arg>
  4.     </bean>
  5.     <context:component-scan base-package="com.xn"></context:component-scan></beans>
复制代码

  

  

  

  设置工具
  

  

  

  

   
  1. 项目总结:
  2.     1.事务管理应该由service层进行实现
  3. 代码优化:
  4.     目的:业务层进行事务管理
复制代码
  1. public class AccountServiceImp implements IAccountService{
  2.     IAccountMapper mapper;
  3.     public void setMapper(IAccountMapper mapper) {
  4.         this.mapper = mapper;
  5.     }
  6.     //装配
  7.     TransactionUtil transactionUtil;
  8.     public void setTransactionUtil(TransactionUtil transactionUtil) {
  9.         this.transactionUtil = transactionUtil;
  10.     }
  11.     @Override
  12.     public void transfer(String sourceName, String targetName, int money) {
  13.         try {
  14.             transactionUtil.beginTx();
  15.             //查询数据
  16.             Account sourceAccount=mapper.findByName(sourceName);
  17.             Account targetAccount=mapper.findByName(targetName);
  18.             //转账
  19.             sourceAccount.setAmoney(sourceAccount.getAmoney()-money);
  20.             targetAccount.setAmoney(targetAccount.getAmoney()+money);
  21.             //修改数据库
  22.             mapper.updateById(sourceAccount);
  23. //            int a=10/0;//模拟异常
  24.             mapper.updateById(targetAccount);
  25.             transactionUtil.commitTx();
  26.         } catch (Exception e) {
  27.             e.printStackTrace();
  28.             transactionUtil.rollbackTx();
  29.         } finally {
  30.             transactionUtil.closeTx();
  31.         }
  32.     }
复制代码
  1.     1.同一个业务方法的多个dao方法公用一个connection对象
复制代码
  1. public class AccountMapperImp implements IAccountMapper{
  2.     //操作数据库的核心类
  3.     QueryRunner queryRunner;
  4.     public void setQueryRunner(QueryRunner queryRunner) {
  5.         this.queryRunner = queryRunner;
  6.     }
  7.     //注入连接工具类
  8.      ConnectionUtil connectionUtil;
  9.     public void setConnectionUtil(ConnectionUtil connectionUtil) {
  10.         this.connectionUtil = connectionUtil;
  11.     }
  12.     @Override
  13.     public void save(Account account) {
  14.         try {
  15.             queryRunner.update(connectionUtil.createCon(),"insert into account(aname,amoney) value(?,?)",account.getAname(),account.getAmoney());
  16.         } catch (SQLException throwables) {
  17.             throwables.printStackTrace();
  18.         }
  19.     }
复制代码
  1.    2.ThreadLocal
复制代码
  1. <!-- 事务工具类 -->
  2.     <bean id="transactionUtil" class="com.xn.util.TransactionUtil">
  3.         <property name="connectionUtil" ref="connectionUtil"/>
  4.     </bean>
  5.     <!-- 注入dao -->
  6.     <bean id="mapperImp" class="com.xn.dao.AccountMapperImp">
  7.         <property name="queryRunner" ref="queryRunner"></property>
  8.         <property name="connectionUtil" ref="connectionUtil"></property>
  9.     </bean>
  10.     <!-- 注入service -->
  11.     <bean id="service" class="com.xn.service.AccountServiceImp">
  12.         <property name="mapper" ref="mapperImp"/>
  13.         <property name="transactionUtil" ref="transactionUtil"></property>
  14.     </bean>
复制代码
  1.     3.通过连接对象进行事务的统一管理
复制代码
  1. public class ConnectionUtil {
  2.     //装配数据源
  3.     DataSource dataSource;
  4.     public void setDataSource(DataSource dataSource) {
  5.         this.dataSource = dataSource;
  6.     }
  7.     //线程区域对象
  8.     ThreadLocal<Connection> threadLocal=new ThreadLocal<Connection>();
  9.     //获取连接
  10.     public Connection createCon(){
  11.         try {
  12.             //获取线程内的连接对象
  13.             Connection connection=threadLocal.get();
  14.             //判断
  15.             if(connection==null){
  16.                 connection=dataSource.getConnection();//创建连接
  17.                 threadLocal.set(connection);//保存
  18.             }
  19.             return  connection;
  20.         } catch (SQLException throwables) {
  21.             throwables.printStackTrace();
  22.         }
  23.         return null;
  24.     }
  25.     //移除连接
  26.     public void removeCon(){
  27.         threadLocal.remove();//一处连接对象
  28.     }
  29. }
复制代码
  1. public class TransactionUtil {
  2.     //注入连接工具类
  3.     ConnectionUtil connectionUtil;
  4.     public void setConnectionUtil(ConnectionUtil connectionUtil) {
  5.         this.connectionUtil = connectionUtil;
  6.     }
  7.     //开启事务
  8.     public void beginTx(){
  9.         try {
  10.             connectionUtil.createCon().setAutoCommit(false);
  11.         } catch (SQLException throwables) {
  12.             throwables.printStackTrace();
  13.         }
  14.     }
  15.     //提交事务
  16.     public void commitTx(){
  17.         try {
  18.             connectionUtil.createCon().commit();
  19.         } catch (SQLException throwables) {
  20.             throwables.printStackTrace();
  21.         }
  22.     }
  23.     //回滚事务
  24.     public void rollbackTx(){
  25.         try {
  26.             connectionUtil.createCon().rollback();
  27.         } catch (SQLException throwables) {
  28.             throwables.printStackTrace();
  29.         }
  30.     }
  31.     //关闭事务
  32.     public void closeTx(){
  33.         try {
  34.             connectionUtil.createCon().close();
  35.             connectionUtil.removeCon();
  36.         } catch (SQLException throwables) {
  37.             throwables.printStackTrace();
  38.         }
  39.     }
  40. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表