设计宗旨:
- 专注于优雅地编写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 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 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());
- }
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());
}
- <span style= "font-weight: normal;" >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" ));
- }</span>
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。我写过两篇文章来讨论过这个问题
我使用DSL编写SQL的一个java实现
你还在用PreparedStatement吗
我认为PreparedStatement对比直接拼接SQL并没有绝对的优势,而且它没法解决一些实际的需求,写起来也不能算优雅。于是我开 始搜索相关的解决方案,并没有发现一些现存的工具,在读了很多相关的文章,我认为DSL会是一个很好的方式来处理SQL。我在工作的项目当中引入了DSL 的思想,写了一个雏形的框架,因为一开始写的时候,设计不是特别完善,于是决定做一个开源的项目,把这个框架重新设计,这就成了LikeSql。
LikeSql的计划
- 尽快完善文档,释出release版本(希望年内达成吧)
- 编写教程和例子
- 建立反馈渠道和讨论圈子
- 和其他框架的集成
关于LikeSql的名字
Like有两层意思,一个相似,像的意思,就是希望这个框架写起来与SQL文本很相近,易读性强;另一个意思是喜欢,希望使用它的用户能够喜欢写SQL。
2605

被折叠的 条评论
为什么被折叠?



