zoukankan      html  css  js  c++  java
  • ibatis简介及 like查询

    转自:http://www.cnblogs.com/linjiqin/archive/2012/05/28/2521451.html

     

    相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis是一种“半自动化”的ORM实现。
          所谓“半自动”,可能理解上有点生涩。纵观目前主流的ORM,无论Hibernate还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映射机制。程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate或者OJB提供的方法完成持久层操作。程序员甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。
          大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有一统天下的势头。但是,在一些特定的环境下,这种一站式的解决方案却未必灵光。
          在笔者的系统咨询工作过程中,常常遇到以下情况:
    1.系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。
    2.开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交通银行,都在开发规范中严格指定)
    3.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。
          面对这样的需求,再次举起Hibernate大刀,却发现刀锋不再锐利,甚至无法使用,奈何?恍惚之际,只好再摸出JDBC准备拼死一搏……,说得未免有些凄凉,直接使用JDBC进行数据库操作实际上也是不错的选择,只是拖沓的数据库访问代码,乏味的字段读取操作令人厌烦。
          “半自动化”的ibatis,却刚好解决了这个问题。
          这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。而ibatis的着力点,则在于POJO与SQL之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。
          使用ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate实现ORM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而ibatis则要求开发者编写具体的SQL语句。相对Hibernate等“全自动”ORM机制而言,ibatis以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显得别具意义。

     

    一、ibatis的关键字like查询

    select * from t_student where s_name '%张%';

    这种like语句在ibatis中怎么写,他们现在的项目是用ibatis作为持久层的框架。

    我的第一反应是这样写:
    <select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
         select * from t_student where s_name like #name#
    </select>

    但是在调用中需要在参数的前后加上%,比如这样:
    return sqlMapper.queryForList("showOneStudentByName", "%"+name+"%");

    虽然这样可行,但总显得有些不协调。仔细看了ibaitis的文档后发现最好的写法是这样
    <select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
       select * from t_student where s_name like '%'||#name#||'%' 
    </select>

    在调用的时候就不用去前后加%了。

    注意:sql语句不要写成select * from t_student where s_name like '%$name$%',这样极易受到注入攻击。
    网上搜了一下ibatis的关于like的使用,撇开 '%$xxx$%' 不讲。网上的解决方法如下:

    select *   
    from user  
    where username like '%'||#username#||'%'

    其实上面的语句是针对Oracle 的,对于不同数据库字符串连接符不一样。 现列举mysql

    select *   
    from user  
    where username like concat('%', #username#, '%') 

                

     

  • 相关阅读:
    Django-下载文件设置响应头和兼容中文
    django-strftime日期格式化问题
    API集成管理平台YAPI的搭建和使用
    dubbo 的 spi 思想是什么?
    关于
    Python接口自动化之unittest单元测试
    Python接口自动化之requests请求封装
    Python接口自动化之Token详解及应用
    Python接口自动化之cookie、session应用
    Python接口自动化-requests模块之post请求
  • 原文地址:https://www.cnblogs.com/qlong8807/p/2779178.html
Copyright © 2011-2022 走看看