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 + "'";

  • 相关阅读:
    dockerfile 镜像 指定虚拟机的内存
    springBoot整合MongoDB(动态查询)
    ubuntu 使用sudo apt-get update命令的时候会报http://archive.ubuntukylin.com:10006/ubuntukylin/dists/xenial/InRelease 无法连接
    在Ubuntu下进行MongoDB安装步骤
    艺术和代码的结合 turtle + python 的结合
    MySQL CPU性能定位
    送书丨《架构解密:从分布式到微服务》
    区块链在天猫国际商品溯源中的应用
    nginx gzip
    别被忽悠了!阿里内部人士:我们正悄悄地拆掉中台,你还在建?
  • 原文地址:https://www.cnblogs.com/xianz666/p/13258906.html
Copyright © 2011-2022 走看看