Java连接数据库#05#,对代码进行改进。

DAO层依赖关系草图

应用示例(只需3步!)

1、首先定义接口类:

package org.sample.shop.common.dao;

import org.sample.shop.common.entity.Cart;
import org.sample.shop.common.entity.Order; import java.util.List; public interface CartDAO { int addItem(Long uid, Long itemId); int removeItem(Long id); int removeAll(Long uid); // 清空购物车 List<Cart> listByUid(Long uid); Order getPreOrder(Long uid);
}

2、然后书写相应的SQL以及返回类型(id的默认格式是“文件名_方法名”):

<sql id="cart_addItem">
INSERT INTO cart(user_id, item_id)
VALUES (?, ?)
</sql>
<sql id="cart_removeAll">
DELETE FROM cart WHERE user_id=?
</sql>
<sql id="cart_removeItem">
DELETE FROM cart WHERE id=?
</sql>
<sql id="cart_getByUid" type="org.sample.shop.common.entity.Cart">
SELECT id, user_id AS userId, item_id AS itemId FROM cart WHERE user_id=?
</sql>
<sql id="cart_getPreOrder" type="org.sample.shop.common.entity.OrderDetail">
SELECT cart.id, item_id AS itemId, item.user_id AS userId, price
FROM cart
LEFT JOIN item ON cart.item_id = item.id
WHERE cart.user_id=?
</sql>
<sql id="cart_getSum" type="java.lang.Number">
SELECT SUM(price) AS sum
FROM cart
LEFT JOIN item ON cart.item_id = item.id
WHERE cart.user_id=?
</sql>

3、最后,通过QueryRunnerProxy执行SQL并拿到所需对象。

package org.sample.shop.common.dao.impl;

import org.sample.shop.common.dao.CartDAO;
import org.sample.shop.common.db.QueryRunnerProxy;
import org.sample.shop.common.entity.Cart;
import org.sample.shop.common.entity.Order;
import org.sample.shop.common.entity.OrderDetail; import java.util.List;
import java.util.Map; public class CartDAOImpl implements CartDAO { @Override
public int addItem(Long uid, Long itemId) {
return QueryRunnerProxy.update("cart_addItem", uid, itemId);
} @Override
public int removeItem(Long id) {
return QueryRunnerProxy.update("cart_removeItem", id);
} @Override
public int removeAll(Long uid) {
return QueryRunnerProxy.update("cart_removeAll", uid);
} @Override
public List<Cart> listByUid(Long uid) {
return QueryRunnerProxy.query("cart_getByUid", uid);
} @Override
public Order getPreOrder(Long uid) {
Order order = new Order();
order.setUserId(uid); // 设置买家id
// 1. 查总价
List<Map> mapList = QueryRunnerProxy.query("cart_getSum", uid);
Double total = Double.parseDouble(mapList.get(0).get("sum").toString());
order.setTotal(total);
// 2. 查对应的物品清单
List<OrderDetail> details = QueryRunnerProxy.query("cart_getPreOrder", uid);
order.setDetails(details);
return order;
}
}

具体实现代码参考github:https://github.com/xkfx/simple-shop

不过还有一些线程安全方面的隐患待解决。。。。。。。。。。。。。

Java连接数据库 #06# SQL与代码分离(精化版本)的更多相关文章

  1. Java连接数据库 #05# SQL与代码分离

    索引 读取html中的SQL语句 缺陷总结 在Java连接数据库 #04#里大概是这样放sql语句的: package org.sample.shop.db.queryrunner; import o ...

  2. 代码生成java连接数据库的所需代码(超详细)

    开始学习: round 1:(一开始学习当然还是要一步一步学习的啦,哪有什么一步登天!!!) a.准备工作:1.eclipse,mysql(这两个软件肯定要的啦,不然学什么把它们连接起来) 2.加载驱 ...

  3. Java连接数据库 #04# Apache Commons DbUtils

    索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...

  4. JAVA连接数据库 #03# HikariCP

    索引 为什么用数据库连接池? HikariCP快速入门 依赖 简单的草稿程序 设置连接池参数(只列举常用的) MySQL配置 修改Java连接数据库#02#中的代码 测试 为什么用数据库连接池? 为什 ...

  5. 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

    JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...

  6. C#和Java中执行SQL文件脚本的代码(非常有用)

    原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...

  7. java 连接mysql 和sql server2008代码

    这两天用java分别连接mysql和sql server2008代码.刚開始都是有错.如今找到了在 自己机器上成功连接的代码: 1. mysql Class.forName("com.mys ...

  8. Java&Selenium自动化测试实现页面元素、页面对象及测试代码分离

    一.摘要 本篇博文将介绍自动化测试实现页面元素.页面对象及测试代码分离在自动化框架中的实现 二.解析页面元素定位信息 首先,将页面元素与实际的代码分离,首先我们将页面元素定位信息和定位表达式保存在属性 ...

  9. Java连接数据库 #02# JDBC经典套路

    内容索引 LocalConnectionFactory.java LocalConnectionProxy.java ProfileDAO.java-2.0 ProfileDAOImpl.java-2 ...

随机推荐

  1. 遍历文件,读取.wxss文件,在头部添加一条注释

    change.pl #!/usr/bin/perl use autodie; use utf8; use Encode qw(decode encode); use v5.26; my $path = ...

  2. web开发中xml的内容

    文档声明(注:文档声明前不能有注释) XML中的元素/标签 注:xmlx中解析程序会将其中的空格与换行当做内容来解析,区分大小写 CDATA区域中的内容不解析

  3. 怎样把Word文档导入Excel表格

    Word是现在办公中的基础文件格式了,很多的内容我们都通过Word来进行编辑,那么当我们需要将Word文档里的信息导入到Excel里面的时候,我们应该怎样做呢?下面我们就一起来看一下吧. 操作步骤: ...

  4. ASP.NET Core 集成测试中通过 Serilog 向控制台输出日志

    日志是程序员的雷达,不仅在生产环境中需要,在集成测试环境中也需要,可以在持续集成失败后帮助定位问题.与生产环境不同,在集成测试环境中使用控制台输出日志更方便,这样可以通过持续集成 runner 执行 ...

  5. ZOJ 4060 - Flippy Sequence - [思维题][2018 ACM-ICPC Asia Qingdao Regional Problem C]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4060 题意: 给出两个 $0,1$ 字符串 $S,T$,现在你有 ...

  6. POJ 1426 - Find The Multiple - [DP][BFS]

    题目链接:http://poj.org/problem?id=1426 Given a positive integer n, write a program to find out a nonzer ...

  7. TensorRT层和每个层支持的精度模式

    下表列出了TensorRT层和每个层支持的精确模式.它还列出了该层在深度学习加速器(DLA)上运行的能力.有关附加约束的更多信息,请参见 DLA Supported Layershttps://doc ...

  8. PostgreSQL 自动输入密码(转)

    原文:https://www.cnblogs.com/litmmp/p/5122534.html 在 Shell 命令行中,使用 postgresql-client 连接 PostgreSQL 数据库 ...

  9. 判断是手机请求还是pc请求

    网址 http://detectmobilebrowsers.com/ string u = Request.ServerVariables["HTTP_USER_AGENT"]; ...

  10. BeanUtils工具类

    用对象传参,用JavaBean传参. BeanUtils可以优化传参过程. 学习框架之后,BeanUtils的功能都由框架来完成. 一.为什么用BeanUtils? 每次我们的函数都要传递很多参数很麻 ...