zoukankan      html  css  js  c++  java
  • statementType 使用

    要实现动态传入表名、列名,需要做如下修改

    添加属性statementType=”STATEMENT”
    同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}
    <delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT">
    <![CDATA[
    delete from ${table} where
    ${col} < ${date}]]>
    </delete>
    statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。
    将传入的数据直接显示生成在sql中,对于字符串数据,需要手动加上引号。
    String dateStr = DateFormatUtils.format(date.getTime(), "yyyy-MM-dd HH:mm:ss");
    dateStr = "'" + dateStr + "'";

    在mapper文件中可以使用statementType标记使用什么的对象操作SQL语句。

    statementType:标记操作SQL的对象

    要实现动态传入表名、列名,需要做如下修改 ,添加属性statementType=”STATEMENT” ,同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}

    <delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT">
    <![CDATA[
    delete from ${table} where
    ${col} < ${date}]]>
    </delete>
    取值说明:
    1、STATEMENT:直接操作sql,不进行预编译,获取数据:$—Statement
    2、PREPARED:预处理,参数,进行预编译,获取数据:#—–PreparedStatement:默认
    3、CALLABLE:执行存储过程————CallableStatement
    另外说明下:如果只为STATEMENT,那么sql就是直接进行的字符串拼接,这样为字符串需要加上引号,如果为PREPARED,是使用的参数替换,也就是索引占位符,我们的#会转换为?再设置对应的参数的值

    statementType:STATEMENT,PREPARED 或 CALLABLE(存储过程) 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.fujitsu.tti.biz.f64.dao.itpdb.F64GoodsInfoSelectDao">

    <select id="goodsInfoSelect" parameterType="Integer" statementType="CALLABLE" resultType="com.fujitsu.tti.biz.f64.model.GoodsInfo">
    {call F64_GoodsInfo_Select(#{eigyousyoId, jdbcType = INTEGER, mode = IN})}
    </select>

    </mapper>
    1.Statement、PreparedStatement和CallableStatement都是接口(interface)。

    2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。

    3.Statement接口提供了执行语句和获取结果的基本方法;
    PreparedStatement接口添加了处理 IN 参数的方法;
    CallableStatement接口添加了处理 OUT 参数的方法。

    4.Statement:

    普通的不带参的查询SQL;支持批量更新,批量删除;
    Statement每次执行sql语句,数据库都要执行sql语句的编译 ,
    最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。
    PreparedStatement:

    可变参数的SQL,编译一次,执行多次,效率高;
    安全性好,有效防止Sql注入等问题;
    支持批量更新,批量删除;
    PreparedStatement是预编译的,使用PreparedStatement有几个好处:
    1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
    2. 安全性好,有效防止Sql注入等问题。
    3. 对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;
    4. 代码的可读性和可维护性。
    CallableStatement:
    继承自PreparedStatement,支持带参数的SQL操作;
    支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;

    要实现动态传入表名、列名,需要做如下修改
    添加属性statementType=”STATEMENT”
    同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}

    <delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT">
    <![CDATA[
         delete from ${table} where ${col} < ${date}
       ]]>
    </delete>
    statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。
    xxxx:xxxx:将传入的数据直接显示生成在sql中,对于字符串数据,需要手动加上引号。
        

    String dateStr = DateFormatUtils.format(date.getTime(), "yyyy-MM-dd HH:mm:ss");
    dateStr = "'" + dateStr + "'";

  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/xianz666/p/13258906.html
Copyright © 2011-2022 走看看