`
jandroid
  • 浏览: 1895708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

LikeSql是什么

阅读更多

设计宗旨:

 

  • 专注于优雅地编写SQL和易读性
  • 保持细小和灵活

 

一些代码示例:

 

Java代码
  1. public   void  testAtStyleExpression(){  
  2.         LikeSql sql=DML.select("id,name" )  
  3.                        .from("user" )  
  4.                        .where(AtExp.at("(name =@name or id=@id) and gender=@gender" )  
  5.                                                    .set("id" 1 )  
  6.                                                    .set("name" "John" )  
  7.                                                    .set("gender" "M" ));  
  8.           
  9.         String eSql="SELECT id,name FROM user WHERE (name ='John' or id=1) and gender='M'" ;  
  10.         String eTpl="SELECT id,name FROM user WHERE (name =? or id=?) and gender=?" ;  
  11.           
  12.         assertEquals(eSql,sql.toString());  
  13.         assertEquals(eTpl,sql.toTemplate());  
  14.     }  
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());
	}
Java代码
  1. public   void  testInExpression(){  
  2.         LikeSql sSql=DML.select("id,name" )  
  3.             .from("user" )  
  4.             .where(QuestExp.qt("id in (?)" ).set( 1 ,ArrayExp.array( new   int []{ 1 , 3 , 6 })));  
  5.           
  6.         String eSql="SELECT id,name FROM user WHERE id in (1,3,6)" ;  
  7.         String eTpl="SELECT id,name FROM user WHERE id in (?,?,?)" ;  
  8.           
  9.         assertEquals(eSql,sSql.toString());  
  10.         assertEquals(eTpl,sSql.toTemplate());  
  11.     }  
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());
	}
Java代码
  1. public   void  testSimpleSql(){  
  2.         String eSql="INSERT INTO users (no,id,name,gender,height) VALUES(1,15666662656565,'johny',null,195.36)" ;  
  3.         String eTpl="INSERT INTO users (no,id,name,gender,height) VALUES(?,?,?,?,?)" ;  
  4.           
  5.         LikeSql iSql=DML.insertInto("users" )  
  6.             .value("no" 1 )  
  7.             .value("id" new  BigInteger( "15666662656565" ))  
  8.             .value("name" , "johny" )  
  9.             .value("gender" , null )  
  10.             .value("height" 195.36 );  
  11.           
  12.         assertEquals(eSql,iSql.toString());  
  13.         assertEquals(eTpl,iSql.toTemplate());  
  14.     }  
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());
	}

 

Java代码
  1. <span style= "font-weight: normal;" >LikeSql sql=DML.selectAll()  
  2.                                .from("user" )  
  3.                                .where(QuestExp.qt("id=? AND gender=?" )  
  4.                                               .set(1 1 )  
  5.                                               .set(2 'M' ));  
  6.                 PreparedStatement stmt=sql.toPreStatement(con);  
  7.                 System.out.println("Template:" +sql.toTemplate());  
  8.                 System.out.println("SQL:" +sql.toString());  
  9.                 ResultSet rs=stmt.executeQuery();  
  10.                 while (rs.next()){  
  11.                     System.out.println(rs.getString("name" ));  
  12.                 }</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的计划

  1. 尽快完善文档,释出release版本(希望年内达成吧)
  2. 编写教程和例子
  3. 建立反馈渠道和讨论圈子
  4. 和其他框架的集成

 

关于LikeSql的名字

 

Like有两层意思,一个相似,像的意思,就是希望这个框架写起来与SQL文本很相近,易读性强;另一个意思是喜欢,希望使用它的用户能够喜欢写SQL。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics