下面是使用模板引擎+JSQLparse实现的过程,开发工具使用Java开发工具,这样的做法你能接受吗。
public procedure P_users_1001001(UserInfo info){
/**自定义对象。*/
DataGrid dg = new DataGrid();
/**
sql{
--userinfo是实体表。
insert es_system.users (user_code,user_name)
values
(:info.userCode,info.user_name);
--查询的值放到data(二维数组)里。
select * into :data from users where user_code=:info.getUser_code();
}
*/
return ProcedureUtil.createProcedure(0,"用户创建成功!!",dg);
}
在我的构想中,将开发一个简单的工具,根据上述自动解析出Java原代码,并执行原代码返回执行结果,达到类以于脚本语言的效果。
如果续1的方式不喜欢,这样或许你会喜欢 。
1、SQL语句符合sql92标准。
2、Java标准语法。
3、一个精简的ORM。根据数据库生成对等的JavaBean.数据库的类型与JavaBean的类型对应,校验可以通过标注的方式进行。
public procedure P_users_1001001(UserInfo info){
/**自定义对象。*/
DataGrid dg = new DataGrid();
sql.execute("insert es_system.users (user_code,user_name)"+
"values" +
" (:info.userCode,info.user_name) ";
sql.executeQuery("select * into :data from users where user_code=:info.getUser_code()");
return ProcedureUtil.createProcedure(0,"用户创建成功!!",dg);
}
结论:
经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:
1、跨数据库:即允许在多个数据库上运行。
2、可读性强:可读性强,入门的成本低,开发人员容易接受。
3、效率高:主要分两部份,开发的效率及运行的效率,在两都之间达到平衡。
4、即时运行:以脚本化的方式运行。
实现的方案如下:
1、将SQL92关键字对象化。
2、扩展SQL92标准,支持如:@等关键用法。
用例如下:
1、关键字对象化:
UserInfo是一个用户对象:主要属性有用户代码、用户名称、性别、年龄,部门id (外键)等。
Dep是一个部门对象:含部门的相关信息。
isNullNotCondition是一个自定函数,如果部门名称为空,不做为条件。
Select(UserInfo.class,"DEP_NAME") .from(UserInfo.class)
.innerJour(Dep.class)
.on("UserInfo.dep_id=Dep.dep_id");
.where()
.and("UserInfo.dep_id=:id")
.or(isNullNotCondition("Dep.dep_name=:name"));
动态SQL语句:
SQL = "select user_code,user_name,sex,age,dep_id,dep_name "+
" from UserInfo"+
" innerJour Dep "+
" on (user_info.dep_id=Dep.dep_id" +
" where userInfo.dep_id=:id"+
" @isNullNotCondition(and Dep.dep_name=:name)";
封装的集合如下:
1、创建临时表
2、Insert、Update、Delete、Select语句。
3、根据数据库生成Java对象,java对象与数据库一一对应该。
|
|