最近在使用 Spring + iBatis 做一些小的 Java 项目,感觉难以驾驭 iBatis ,在数据访问层上花了大量的工作,被搞得很被动。深入反省认为这是受了潮流的误导,小项目本来就不应该使用大型的框架。于是反潮流而作,想出了一种最直接的方法:不使用 XML 或者标签来隔离 SQL 语句中的逻辑,也不想使用复杂的对象映射来访问数据库,而是在 Java 代码中直接写 SQL 来访问数据库。我以为 SQL 本来就是十分优秀的表达方法,即使在 Java 中也不一定事事都硬要使用 OO 。所以想把这个想法做成一个开源项目,深入地挖掘一下这里面的内涵。因为从来就没有参与过任何开源项目,不知道如何开始比较好,所以来这里想听听大家的意见。直接在 Java 中写 SQL 是不可能的,但是可以写出类似 SQL 语法的代码,如果熟悉 SQL 的话会很快掌握这种方法。下面是我构想的一个简单的代码片段,打算以这样的方式来访问数据库:
// 可以直接使用字符串、数字作为变参进行查询
String code = "123456789012345678";// 使用类似 SQL 的语法从数据表 Account 中建立一个数据查询对象。
// conn 是一个已经准备好的数据库接连。
Account t = new Account();
Query q = new Query(conn,
P(SELECT, t.Id, t.Name, t.Code,
WHERE, t.Code, EQ, code));// 定义从数据查询对象中提取数据的变量 Variable<?>
Variable<Integer> v_id = new Variable<Integer>(t.Id, 0);
Variable<String> v_name = new Variable<String>(t.Name, "");
Variable<String> v_code = new Variable<String>(t.Code, "");// 从查询对象中取出数据
if (q.retrieve(v_id, v_name, v_code))
println(System.out, ",", v_id, v_code, v_name);// 关闭查询对象
q.close();
// 可以直接使用字符串、数字作为变参进行查询
String code = "123456789012345678";// 使用类似 SQL 的语法从数据表 Account 中建立一个数据查询对象。
// conn 是一个已经准备好的数据库接连。
Account t = new Account();
Query q = new Query(conn,
P(SELECT, t.Id, t.Name, t.Code,
WHERE, t.Code, EQ, code));// 定义从数据查询对象中提取数据的变量 Variable<?>
Variable<Integer> v_id = new Variable<Integer>(t.Id, 0);
Variable<String> v_name = new Variable<String>(t.Name, "");
Variable<String> v_code = new Variable<String>(t.Code, "");// 从查询对象中取出数据
if (q.retrieve(v_id, v_name, v_code))
println(System.out, ",", v_id, v_code, v_name);// 关闭查询对象
q.close();
但是.Net的Linq和你装个想法是很相似的JPA,JDO都太重了,不灵活,JDBC显然太低级鼓励一下结贴吧~~~~~
感觉作用不大。
规模不大的系统确实用不着hibernate或iBatis作数据库操作层,甚至spring都可以不用