转账示例(一):Dao层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)

缺点:Dao层面把Service层面的操作完成了,不利于后期的代码修改和重构

1.自行创建C3P0Util

account数据库

2.jar包

3.Dao层面

接口:

package com.learning.dao;

import com.learning.domain.Account;

public interface AccountDao {
    /**
     * 转账
     * @param fromname 转出用户
     * @param toname  转入用户
     * @param money  转账金额
     */
    public void updateAccount(String fromname,String toname,double money)throws Exception;
}

实现类:

package com.learning.dao.impl;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import com.learning.dao.AccountDao;
import com.learning.util.C3P0Util;

public class AccountDaoImpl implements AccountDao {

    public void updateAccount(String fromname, String toname, double money) throws Exception {
        //创建一个QueryRunner对象
        QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
        qr.update("update account set money=money-? where name=?",money,fromname);
        qr.update("update account set money=money+? where name=?",money,toname);
    }

}
时间: 2024-11-11 19:13:32

转账示例(一):Dao层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)的相关文章

转账示例(二):service层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)

缺点:Service层面把Dao层面的开启事务操作完成了 1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learning.dao; import com.learning.domain.Account; public interface AccountDao { /** * 转账 * @param fromname 转出用户 * @param toname 转入用户 * @param money 转账金额 */ @Deprecat

转账示例(四):service层面实现(线程管理Connection,AOP思想,动态代理)(本例采用QueryRunner来执行sql语句,数据源为C3P0)

用了AOP(面向切面编程),实现动态代理,service层面隐藏了开启事务. 1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learning.dao; import com.learning.domain.Account; public interface AccountDao { /** * 转账 * @param fromname 转出用户 * @param toname 转入用户 * @param money 转账金额 */

转账示例(三):service层面实现(线程管理Connection)(本例采用QueryRunner来执行sql语句,数据源为C3P0)

缺点:Service层面还是不应该出现关于事务的操作 1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learning.dao; import com.learning.domain.Account; public interface AccountDao { /** * 转账 * @param fromname 转出用户 * @param toname 转入用户 * @param money 转账金额 */ @Deprecated

C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】

为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:select id,pw where id='inputID' and pw='inputPW'; 一般情况没什么问题,但如果用户输入的id或PW带 ‘ ,这是可能就会出现漏洞,bug了 比如用户输入的id是: 1‘ or ’1‘=‘1 这是sql语句执行的是:select id,pw where id

C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. 在下面这段代码里,首先根据连接字符串创建一个SqlConnecdon连接对象,并用此对象连接数据源:然后创建一个SqlCommand对象,并用此对象的ExecuteNonQuery方法执行不带返回结果集的SQL语句. 1 //连接字符串 2 3 private static string strCo

MyBatis插件及示例----打印每条SQL语句及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResultS

MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResultS

跨服务器查询sql语句样例(转)

若2个数据库在同一台机器上: insert into DataBase_A..Table1(col1,col2,col3----) select col11,col22,col33-- from DataBase_B..Table11 若不在同一台机器上,则是本文要讲的内容: ----------------------------------------------------------------------------------------- 跨服务器查询sql语句样例 INSERT

以慕课网日志分析为例 进入大数据 Spark SQL 的世界

详情请交流  QQ  709639943 01.以慕课网日志分析为例 进入大数据 Spark SQL 的世界 02.漫谈spring cloud分布式服务架构 03.Spring Cloud微服务实战视频课程 04.漫谈spring cloud 与 spring boot 基础架构 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.快速上手Ionic3 多平台开发企业级问答社区 09.Java Sprin