大三一门软件工程课硬是要做一个 C/S 的管理软件。用了 Java FX 做了界面,奈何还是得拼接 SQL 语句( JDBC )来完成数据交互。请问有没有什么方便的工具可以将( SQL 语句,变量名)转换成字符串?
1
misaka19000 2018-11-29 00:28:15 +08:00 via Android
用 mybatis 或者 jpa
|
2
sutra 2018-11-29 01:16:30 +08:00
这道题可能回答 ORM 更合适点。
|
3
mingl0280 2018-11-29 06:15:59 +08:00
不拼接,参数化查询。
|
4
SamsonWang 2018-11-29 06:46:17 +08:00 via Android
既然是学校的练习项目,不妨尝试用纯手工拼接一次,以后使用各种库的时候就能体会到方便性了
|
5
mmdsun 2018-11-29 07:32:24 +08:00 via Android
String.format()
|
6
xbigfat 2018-11-29 07:59:21 +08:00 via iPhone 1
真心建议手写一次。正式项目里用 JPA 实现可能很少写 SQL,手写语句,或者手写 ORM 框架,可以学到很多(反射,注解,最重要的是 orm 思想)
|
7
JaguarJack 2018-11-29 08:01:35 +08:00 via iPhone
orm
|
8
TommyLemon 2018-11-29 10:13:11 +08:00
首先 SQL 原生写法肯定是要掌握的,使用 Navicat,DataGrip,MySQLWorkbench 等各种数据库工具,
在 快速查找数据、验证代码查到的数据是否正确、简单插入或修改部分开发环境的数据 等都比写代码方便很多。 实现接口的话可以用 APIJSON,不用写代码,自动将前端传的 JSON 参数转为 SQL 执行并返回 JSON 结果, 期间自动校验角色及对应的操作权限,自动防 SQL 注入。 GitHub 右上角点 Star 支持下吧 ^_^ https://github.com/TommyLemon/APIJSON |
9
ren2881971 2018-11-29 10:20:58 +08:00
无解 复杂的报表 sql 绝不是 orm 能解决的。
你最多就是保证 参数化查询。。。 一些动态条件你不拼接能行么。 |
10
TommyLemon 2018-11-29 10:36:20 +08:00
@ren2881971
报表确实复杂,动辄一屏以上,各种 join,子查询,case 等,我也没见过能搞得定的 ORM。 不过一般中小型互联网项目的大部分接口都远没有这么复杂的查询, APIJSON 支持得很好,仍然不用写代码,目前已实现: 大体功能:增删改查、分页查询、统计与验证、注册登录、模糊搜索、正则匹配、连续范围<br /> 、结构校验、角色及操作权限校验、数据保护、远程函数调用等<br /> 操作方式:增、删、改、查、调用远程函数<br /> 操作对象:单个对象、可关联的多个对象、数组等<br /> 请求方法:GET,HEAD,GETS,HEADS,POST,PUT,DELETE<br /> 请求结构:{Table:{...}}、{Table0:{...},Table1{...},Table2:{...}...}、{"[]":{Table:{...}}}、{"[]":{Table0:{...},Table1{...},"Array0[]":{...},...}}等各种组合和嵌套<br /> 返回结构:对应请求结构的各种 JSON 结构。<br /> 功能符号:<br /> ```js "key[]":{} // 查询数组 "key{}":[] // 匹配选项范围 "key{}":"<=10;length(key)>1..." // 匹配条件范围 "key()":"function(arg0,arg1...)" // 远程调用函数 "key@":"key0/key1.../targetKey" // 引用赋值 "key$":"%abc%" // 模糊搜索 "key~":"^[0-9]+$" // 正则匹配 "key%":"2018-01-01,2018-10-01" // 连续范围 "key+":[1] // 增加 /扩展 "key-":888.88 // 减少 /去除 "name:alias" // 新建别名 "@column":"id,sex,name" // 返回字段 "@group":"userId" // 分组方式 "@having":"max(id)>=100" // 聚合函数 "@order":"date-,name+" // 排序方式 "@schema":"sys" // 集合空间 "@database":"PostgreSQL" // 跨数据库 "@role":"LOGIN" // 访问角色 ``` 详细说明见通用文档中的 [功能符]( https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2) |
11
TommyLemon 2018-11-29 10:37:18 +08:00
@TommyLemon 还有自动化 JOIN(LEFT JOIN, RIGHT JOIN, INNER JOIN, CROSS JOIN) 也不用写代码哦
|
12
onice 2018-11-29 10:58:05 +08:00
JDBC 可以直接预编译查询,就是那个 PreparedStatement。不建议直接拼接字符串,容易产生 SQL 注入漏洞。
|
13
TommyLemon 2018-11-29 11:40:19 +08:00
@onice APIJSON 的 Java 实现源码 APIJSONDemo 就是用了 PreparedStatement,自动防 SQL 注入哦,
CRUD 还不用自己写代码。 |