LikeSql——让你更优雅地写SQL
?
LikeSql是我写一个开源的小框架(http://code.google.com/p/likesql/),目标是提供一个更优雅地处理SQL的一个方案,希望能够替代PreparedStatement和直接拼接SQL。虽然现在还有没有正式的release版本,我还在为此努力。
?
设计宗旨:
专注于优雅地编写SQL和易读性保持细小和灵活?
一些代码示例:
?
public void testAtStyleExpression(){LikeSql sql=DML.select("id,name") .from("user") .where(AtExp.at("(name =@name or id=@id) and gender=@gender") .set("id", 1) .set("name", "John") .set("gender", "M"));String eSql="SELECT id,name FROM user WHERE (name ='John' or id=1) and gender='M'";String eTpl="SELECT id,name FROM user WHERE (name =? or id=?) and gender=?";assertEquals(eSql,sql.toString());assertEquals(eTpl,sql.toTemplate());}public void testInExpression(){LikeSql sSql=DML.select("id,name") .from("user") .where(QuestExp.qt("id in (?)").set(1,ArrayExp.array(new int[]{1,3,6})));String eSql="SELECT id,name FROM user WHERE id in (1,3,6)";String eTpl="SELECT id,name FROM user WHERE id in (?,?,?)";assertEquals(eSql,sSql.toString());assertEquals(eTpl,sSql.toTemplate());}public void testSimpleSql(){String eSql="INSERT INTO users (no,id,name,gender,height) VALUES(1,15666662656565,'johny',null,195.36)";String eTpl="INSERT INTO users (no,id,name,gender,height) VALUES(?,?,?,?,?)";LikeSql iSql=DML.insertInto("users") .value("no", 1) .value("id", new BigInteger("15666662656565")) .value("name","johny") .value("gender",null) .value("height", 195.36);assertEquals(eSql,iSql.toString());assertEquals(eTpl,iSql.toTemplate());}?
LikeSql sql=DML.selectAll() .from("user") .where(QuestExp.qt("id=? AND gender=?") .set(1, 1) .set(2, 'M'));PreparedStatement stmt=sql.toPreStatement(con);System.out.println("Template:"+sql.toTemplate());System.out.println("SQL:"+sql.toString());ResultSet rs=stmt.executeQuery();while(rs.next()){System.out.println(rs.getString("name"));}?LikeSql不是什么LikeSql不是ORM框架LikeSql不是重复发明iBatis,Hibernate?
为什么会有LikeSql其实最初的想法来源于我工作经手的几个项目,项目都是采用简单的JDBC+直接拼接SQL来访问数据库。直接拼接SQL存在诸多缺点,这里就不在多论述了。主要是我在维护和改进的过程中,发现并没有一个很优雅的方式来处理SQL。我写过两篇文章来讨论过这个问题?
关于LikeSql的名字?
Like有两层意思,一个相似,像的意思,就是希望这个框架写起来与SQL文本很相近,易读性强;另一个意思是喜欢,希望使用它的用户能够喜欢写SQL。
?
?
欢迎加入这个项目,欢迎指教和讨论。
,因为上述两点.
.