dsqlcore v0.7.3
dsqlcore 简介
dsql(Direct SQL)是一个将sql文件直接转换为数据库访问对象(Dao, Data Access Object)代码的工具,见以下例子: (SQL源文件件为User.sql)
-- desc: 查询用户列表
-- name: getList
select userid, username, mobile from users where age >=(20);
...
以上User.sql经过dsql工具,生成以下UserDao.java代码
class UserDao{
public static List<UserPo> getList(int agebegin) throws Exception{
String sql="select userid, username, mobile from users where age >=?"
...
}
...
}
以及相应的UserPo代码
class UserPo {
...
public int userid ;
public String username;
public String mobile;
}
#dql安装 1. 本工具依赖于nodejs,首先安装nodejs,nodejs可从以下官网中下载 https://nodejs.org/
创建目录dsql,打开命令行终端,在dsql目录下执行以下dsql安装命令 npm install dsql
dsql下创建并正确配置db.json中的数据库连接地址及用户名密码
dsql下创建并配置java.json指定Dao及Po生成模板(暂不包括在当前dsql版本中)
#dsql使用 写sql文件,并生成sql文件对应的dao及po代码,生成命令如下:
dsql -java projectJavaSourceCodeDirectory relativeSqlFilePath 以上命令在本readme.txt文件所在目录下执行。其中relativeSqlFilePath相对于projectJavaSourceCodeDirectory目录
例子: dsql -java ../dsql4sample/src/main/java com/dsql4sample/sql/Test.sql
以上例子把sql文件../dsql4sample/src/main/java/com/dsql4sample/sql/Test.sql 生成为dao代码../dsql4sample/src/main/java/com/dsql4sample/dao/TestDao.java
同时生成相应po代码,并存放在以下目录中
../dsql4sample/src/main/java/com/dsql4sample/po/
以上目录路径均相对于dsql所在目录
#dsql的语法 为了能够自动生成Dao代码,dsql在sql基础上叠加了一层dsql语法 ##参数名规则
条件参数: fieldname compare-operator (value)
value是字符串或者数值,则 (value)转化为Dao代码时,表示为一个参数,参数名由字段名fieldname与compare-operator比较符决定。
1. 大于(或大于等于)比较符情况下, 参数名=fieldname+begin
例子 age>=(20)
(20)表示参数agebegin
小于(或小于等于)比较符情况下, 参数名=fieldname+end 例子 age<=(40) (40)表示参数ageend
等于比较符情况下, 参数名=fieldname 例子 age=(20) (20)表示参数变量age
IN比较符情况下, 参数名=fieldname+s 例子 userid in ( (1) ) (1)表示参数userids,userids代表多个userid经过逗号拼接出来的字符串
AS别名符情况下, 参数名=fieldname
例子 ('2020-04-05') as sumdate ('2020-04-05')表示参数sumdate
###参数数据类型
1. Int整形参数形如(value), 其中value为Int整形, 表示转化为Dao方法输入参数时,类型变为整形参数。
例如 age=(20),则age为整形参数, 注意括号与数字之间不能有空格
2. Long长整形参数形如(value ), 其中value为Int整形, 注意value与)之间多了一个空格,表示转化为Dao方法输入参数时,类型变为长整形参数。
例如: userid=(10 ) 注意整数与)之间后整好多了1个空格,所以userid为长整形参数
3. 字符串形参数形如('xxx'), 括号内为字符串,转化为Dao方法输入参数时,类型变为字符串参数。
例如: username=('tony'),所以userid为长整形参数,, 注意括号与字符串之间不能有空格
4. 浮点行参数形如(xxx.yyy),括号内是浮点数,转化为Dao方法输入参数时,类型变为浮点双精度Double参数。
例如: salary>=(1000.00 ) 所以salarybegin为浮点双精度Double参数,, 注意括号与浮点数之间不能有空格
###重新命名参数 -- rename: parametername 一行SQL形如: ... (value) ... -- rename: parametername 则 (value)表示参数parametername
例子 addtime>= ('2010-01-01') group by userid -- rename: regtime ('2010-01-01')表示参数regtime
##可选条件参数 如条件参数前面是2个空格,则是可选条件参数,当Dao方法传入该参数为null值时,则会忽略该条件。 例子: -- name: getList select userid, username, mobile from users where age >=(20) and salary>=(1000.00); 以上有2个条件参数agebegin 和 salarybegin ,其中salarybegin是可选参数,如果Dao方法传入的salarybegin=null, 则相当于不限定salary>=的条件
##方法名规则 SQL语句前(须单独一行) -- name: methodname 表示方法名为methodname的方法 例子: -- name: getList select ... ; 表示生成方法名为getList的方法,所有方法均抛异常throws Exception
##Dao类名规则 Dao类名=Sql文件名+Dao 例子 User.sql 代码生成为 UserDao.java
##Dao包名规则 Dao包名=Sql源文件的父目录对应的java包名+.dao SQL源代码文件 com/dsqlsample/sql/User.sql 的父目录为com/dsqlsample, UserDao包名为com.dsqlsample.dao 存放文件为com/dsqlsample/dao/UserDao.java
##持久化对象Po类名规则 持久化对象Po类名由方法名及文件名决定只针对select语句产生相应的Po对象 1. Yyy.sql 中形如 getListXxx 或 getItemXxx的方法产生的Po命名为YyyPo.java 2. getZzzListXxx或或 getZzzItemXxx的方法产生的Po命名为ZzzPo.java 3. 其他情况methodname的Po命名为methodnamePo