java 实体拼装sql_002.测验.Java之拼装SQL

f58d995d669d7d37f169041269cf7395.png

题图:两脚站在同一根高压电线上,电流基本上不从小鸟身上流过,小鸟是不会被电到的。

002.测验.Java之拼装SQL

这是一个十分简单但不实用的编程练习,拼装SQL。

select一个表,where很多单纯的and条件。

作者:史荣久 日期:2014-11-26 许可:CC BY-SA 3.0

任务说明

实现以下接口,完成练习目标。

package com.moilioncircle.kiss;

public interface Sql {

public Sql select(String... fields);

public Sql from(String table);

public Sql where(String fieldAndOperator, Object value);

public Sql and(String fieldAndOperator, Object value);

public String build();

}

任务目标

(1) 以下6个build()得出的sql,在MySql上执行,都返回1条记录。

Sql sql = new ();

sql.select("id","birthday","homedir","description")

.from("sqltest")

.where("homedir=", "d:\\jonny\\")

.build();

sql.select("count(*)")

.from("sqltest")

.where("id>", Integer.valueOf(1))

.and("birthday=", Date.valueOf("1971-01-01"))

.build();

sql.select("count(*)")

.from("sqltest")

.build();

sql.select("1").build();

sql.select("count(*)")

.from("sqltest")

.where("description=", "jonny's pet")

.build();

sql.select("count(*)")

.from("sqltest")

.where("description=", "ben said \"hi tom!\"")

.build();

(2) 以下3个build(),抛出异常(选择舒服的异常类型)

sql.select("").build();

sql.select(null).build();

sql.select("count(*)")

.where("description=", "jonny's pet")

.build();

测试数据

通过以下SQL创建表和数据。

CREATE TABLE `sqltest` (

`id` INT NOT NULL,

`birthday` DATE NULL,

`homedir` VARCHAR(45) NULL,

`description` VARCHAR(45) NULL,

PRIMARY KEY (`id`));

insert into sqltest(id,birthday,homedir,description) values

(1,'1971-01-01','d:\\jonny\\','jonny''s pet'),

(2,'1971-02-01','d:\\tom','tom is good'),

(3,'1972-03-01','d:\\ben','ben said "hi tom!"');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; /** * SQLUtils utils = new SQLUtils(User.class); utils.setWhereStr("", "id", "=", 100).setWhereStr("and", "name", " ", "is null").setWhereStr("and", "date", ">=", new Date()); utils.setOrderByStr("id", "desc").setOrderByStr("name", "asc"); System.out.println(utils.buildSelectSQL()); System.out.println(utils.buildCountSQL()); */ import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class SqlUtils { private String beanName; private String beanShortName; private Map propertyMap; private List conditionList; private List relationList; private Map orderByMap; public SqlUtils(Class instance) { this.setBeanName(instance.getSimpleName()); this.setBeanShortName(Character.toLowerCase(this.getBeanName() .charAt(0)) + ""); init(); } public SqlUtils() { init(); } void init(){ propertyMap = new LinkedHashMap(); conditionList = new LinkedList(); relationList = new LinkedList(); orderByMap = new LinkedHashMap(); } /** * 添加查询条件 * * @param relation * 关联 "and","or"等 * @param property * 查询的对象属性 * @param condition * 查询的条件,关系符 * @param value * 查询的值 */ public SqlUtils setWhereStr(String relation, String property, String condition, Object value) { if(value != null){ relationList.add(relation); propertyMap.put(property, value); conditionList.add(condition); } return this; } private String buildWhereStr() { StringBuffer buffer = new StringBuffer(); if (!propertyMap.isEmpty() && propertyMap.size() > 0) { buffer.append("WHERE 1 = 1 "); int index = 0; for (String property : propertyMap.keySet()) { if (property != null && !property.equals("")) { buffer.append(r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值