设为首页 收藏本站
查看: 1161|回复: 0

[软件发布] fastquery 1.0.11 发布,简单的数据持久层

[复制链接]

尚未签到

发表于 2016-10-28 10:13:36 | 显示全部楼层 |阅读模式
欢迎加入运维网交流群:263444886   DSC0000.png
                  fastquery 1.0.11 发布了。
fastquery 1.0.11 最新特性:
  
SQL中的变量用命名式
@Query("select name,age from UserInfo u where u.name = :name or u.age = :age")  
UserInfo[] findUserInfoByNameOrAge(@Param("name") String name, @Param("age")Integer age);
  其中:name对应@Param("name")所指定的方法变量值;:age对应@Param("age")所指定的方法变量值.当然SQL中的变量也可以用?N(N={正整数})的形式来表达,且不用标识@Param.
select name,age from UserInfo u where u.name = :name or u.age = :age  最终会编译成
select name,age from UserInfo u where u.name=? or u.age=?  因此很好地解决了SQL注入问题.
  
SQL中的变量采用${name}表达式
  实现原样替换.不过请注意避免SQL注入问题.
@Query("select * from `userinfo` where ${one} ${orderby}")  
UserInfo findUserInfo(@Param("orderby") String orderby, @Param("one") int i);
  
// String orderby 这个形参接受到的值会原样取代掉 "${orderby}", orderby 如果接受到的值为null,那么${orderby}默认为""
  
// int i 接受到的值会取代掉 "${one}"
  
// 假设: orderby的值为: "order by age desc", i的值为:1
  
// 则: 最终的SQL为: "select * from `userinfo` where 1 order by age desc"
采用${name}时请注意:

  •   传递null值,模板变量默认取""
  •   参数模板仅仅用来辅助开发者构建SQL语句
  •   请堤防使用不当,引发SQL注入问题
  •   请避免模板参数的值完全来源于用户层的输入
  •   请确保参数值可控.
      
  通过defaultVal属性指定:若参数接受到null值,应该采用的默认值(该属性不是必须的,默认为"").例如:
@Query("select * from `userinfo` ${orderby}")  
// orderby 若为null, 那么 ${orderby}的值,就取defaultVal的值
  
JSONArray findUserInfo(@Param(value="orderby",defaultVal="order by age desc") String orderby);
@QueryByNamed命名式查询
  就是把SQL语句写在配置文件里,然后用@QueryByNamed绑定配置文件中的id值,以便引用到SQL.
  配置文件的命名格式:类的长名称(包含包地址).queries.xml,每个类文件对应一个配置文件.
  配置文件里的SQL代码段,会被Velocity的模板引擎所渲染,因此,很方便写出复杂的动态SQL语句.
  例如:org.fastquery.dao.QueryByNamedDBExample.queries.xml
  

  
    
  
        select id,name,age from UserInfo
  
    
  

  
    
  
        
  
            ## :id 最终会替换成 ?
  
            ## ${id} 不会替换还成"?",引用的是参数源值
  
            select id,name,age from UserInfo where id = :id
  
        
  
    
  

  
    
  
        
  
            select id,name,age from UserInfo where 1 #{#condition}
  
        
  

  
        
  
            
  
                #if(${name})
  
                and name = :name
  
                #end
  

  
                #if(${age})
  
                and age = :age
  
                #end
  
            
  
        
  
    
  

  如果想把一些公用的SQL代码片段提取出来,以便重复使用,通过定义元素(零件集)可以达到效果. 在,元素中,可以通过#{#name}表达式引用到名称相匹配的零件.如:#{#condition}表示引用name="condition"的零件.
public interface QueryByNamedDBExample extends QueryRepository {  

  
    // 从该类的配置文件里寻找id="findUserInfoAll"节点,然后绑定其SQL代码段
  
    @QueryByNamed("findUserInfoAll")
  
    JSONArray findUserInfoAll();
  

  
    @QueryByNamed("findUserInfoOne")
  
    UserInfo findUserInfoOne(@Param("id")Integer id);
  

  
    @QueryByNamed("findUserInfoByNameAndAge")
  
    JSONArray findUserInfoByNameAndAge(@Param("name") String name, @Param("age")Integer age);
  
}
分页
  通过@QueryByNamed实现分页
  
    
  
    
  
        select no, name, sex from Student where 1 #{#condition} #{#order}
  
    
  

  
    
  
    
  
        select count(no) from Student where 1 #{#condition}
  
    
  

  
    
  
    
  
        
  
            #if($no)
  
            or no like :no
  
            #end
  

  
            #if($name)
  
            or name like :name
  
            #end
  

  
            #if($age)
  
            or age > :age
  
            #end
  
        
  

  
        
  
            order by age desc
  
        
  
    
  

  注意: #{#limit}是分页模板的内置零件,表示分页区间,#{#limit}可以放在SQL语句中的任何地方,不过,前提是:必须符合SQL语法.#{#limit}可以不用指定,默认在尾部.
  DB接口:
@QueryByNamed("findPage") // 引用id为"findPage"的分页模板  
Page findPage(Pageable pageable, @Param("no") String no, @Param("name") String name,@Param("age") Integer age);
  详细文档请参阅: 
  https://git.oschina.net/xixifeng.com/fastquery
  https://github.com/xixifeng/fastquery

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-292406-1-1.html 上篇帖子: 开源中国Android客户端v2.6.5代码开源啦! 下篇帖子: sofa
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表