mybatis

Statement

Statement对象用于将 SQL 语句发送到数据库中。

实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:

  1. Statement
  2. PreparedStatement(它从 Statement 继承而来
  3. CallableStatement(它从 PreparedStatement 继承而来)。

    它们都专用于发送特定类型的 SQL 语句

  • Statement 对象用于执行不带参数的简单 SQL语句
  • PreparedStatement 对象用于执行带或不带 IN参数的预编译 SQL语句
  • CallableStatement 对象用于执行对数据库已存储过程的调用。

sql

这个元素可以被用来定义可重用的 SQL 代码段,这些 SQL 代码可以被包含在其他语句中。它可以(在加载的时候)被静态地设置参数。 在不同的包含语句中可以设置不同的值到参数占位符上。比如:

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

这个 SQL 片段可以被包含在其他语句中,例如

<select id="selectUsers" resultType="map">
select
<include refid="userColumns"><property name="alias" value="t1"/></include>,
<include refid="userColumns"><property name="alias" value="t2"/></include>
from some_table t1
cross join some_table t2
</select>

属性值也可以被用在 include 元素的 refid 属性里或 include 元素的内部语句中,例如:

<sql id="sometable">
${prefix}Table
</sql> <sql id="someinclude">
from
<include refid="${include_target}"/>
</sql> <select id="select" resultType="map">
select
field1, field2, field3
<include refid="someinclude">
<property name="prefix" value="Some"/>
<property name="include_target" value="sometable"/>
</include>
</select>

resultMap

resultMap元素有很多子元素和一个值得深入探讨的结构。 下面是resultMap 元素的概念视图。

结果映射(resultMap)

  • constructor-用于在实例化类时,注入结果到构造方法中

    • idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
    • arg -将被注入到构造方法的一个普通结果
  • id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
  • result – 注入到字段或 JavaBean 属性的普通结果
  • association–一个复杂类型的关联;许多结果将包装成这种类型嵌套结果映射 – 关联本身可以是一个 resultMap 元素,或者从别处引用一个
  • collection – 一个复杂类型的集合

    嵌套结果映射 – 集合本身可以是一个 resultMap 元素,或者从别处引用一个
  • discriminator – 使用结果值来决定使用哪个 resultMap
    • case – 基于某些值的结果映射

      嵌套结果映射 – case 本身可以是一个 resultMap元素,因此可以具有相同的结构和元素,或者从别处引用一个

mybatis动态sql中的trim标签的使用

trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码:

  1、

  select * from user
  <trim prefix="WHERE" prefixoverride="AND |OR">
    <if test="name != null and name.length()>0"> AND name=#{name}</if>
    <if test="gender != null and gender.length()>0"> AND gender=#{gender}</if>
  </trim>

  假如说name和gender的值都不为null的话打印的SQL为:select * from user where name = 'xx' and gender = 'xx'

  在红色标记的地方是不存在第一个and的,上面两个属性的意思如下:

  prefix:前缀      

  prefixoverride:去掉第一个and或者是or

  2、

  update user
  <trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">
    <if test="name != null and name.length()>0"> name=#{name} , </if>
    <if test="gender != null and gender.length()>0"> gender=#{gender} , </if>
  </trim>

  假如说name和gender的值都不为null的话打印的SQL为:update user set name='xx' , gender='xx' where id='x'

  在红色标记的地方不存在逗号,而且自动加了一个set前缀和where后缀,上面三个属性的意义如下,其中prefix意义如上:

  suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)

  suffix:后缀

  

#{},${}区别

{}是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

Mybatis在处理{}替换成变量的值。

使用#{}可以有效的防止SQL注入,提高系统安全性。

bind

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:

<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>

最新文章

  1. xml解析
  2. angular2 - content projection-
  3. Mysql event学习
  4. 转:Tomcat安装配置及站点说明
  5. PAT (Basic Level) Practise:1021. 个位数统计
  6. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库
  7. iOS开发——Touch ID 指纹识别
  8. 如何实现批处理文件传参数给SQLPLUS
  9. MySQL协议简单分析
  10. IOS--实现滤镜效果的四种方式
  11. STM32F10x 学习笔记6(USART实现串口通讯 2)
  12. JS的substr与substring的区别
  13. Creating a Broker (创建代理)
  14. 关于Spring的BeanPostProcessor
  15. latex中pdflatex与xelatex的区别
  16. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十一)redis密码设置、安全设置
  17. jquery post跨域请求数据
  18. 在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天。要求尽早聚会
  19. 基于WebGL/Threejs技术的BIM模型轻量化之图元合并
  20. [Oracle]Sqlplus 中使用 new_value

热门文章

  1. nessus在Linux上的安装
  2. CentOS7 修改设置静态IP和DNS
  3. OpenJudge计算概论-找和为K的两个元素
  4. python @abstractmethod
  5. SIT测试 和 UAT测试
  6. Springboot集成MapperFactory(ma.glasnost.orika.MapperFactory)类属性复制
  7. java导入excel很完美的取值的方法
  8. SpringCloud学习成长之 十 高可用服务注册中心
  9. asp.net怎样实现批量下载文件(非打包形式下载)
  10. Django补充之模板语言