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. Java API获取consumer group最新提交位移的时间

    碰到了有人问起这个问题,目前java consumer没有利用OffsetAndMetadata中的metadata字段记录提交的时间,故直接通过java consumer来查询是不行,我们需要直接读 ...

  2. [转]Python中__repr__和__str__区别

    class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...

  3. Hadoop简单介绍

    Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 随后在2003 ...

  4. Mac OSX取消Apache(httpd)开机启动(转载)

    启动服务时提示Apache启动失败,80端口被占用.查看进程发现存在几个httpd. OS X自带Apache,可是默认是没有启动的.我也没有开启Web共享,怎么就开机启动了呢? 不知道是不是因为安装 ...

  5. Python3.6 性能测试框架Locust的搭建与使用

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 方法一: pip install locustio 方法二: 开发工具:pycharm 使用 ...

  6. TX2-入门坑点-Ubuntu16.04任务栏消失

    问题:安装cuda过程中出现任务栏消失,快捷键失效的现象. 解决方法:重装桌面无法解决,使用cssm无法解决,最后删除home目录下的 .cache文件夹重启后解决

  7. Robot Framework自动化测试Selenium2Library库详细用法

    一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internete ...

  8. java学习笔记-连数据库JDBC

    查看JDK API文档,学习JDBC中类和接口的定义,分析其中的方法 ===============PreparedStatement ===================查询

  9. toolbar按钮添加图标

    需要toolbar关联imagelist组件,imagelist组件添加需要的图片,在toolbar新建按钮,按钮中选择相应图表.

  10. java框架之Hibernate(1)-简介及初使用

    简介 hibernate 是一个开源 ORM ( Object / Relationship Mipping ) 框架,它是对象关联关系映射的持久层框架,它对 JDBC 做了轻量级的封装,而我们 ja ...