Tip:mapper.xml中sql语句不允许出现分号!

1、#和$符号的区别

  • #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
  • $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
  • #方式能够很大程度防止sql注入
  • $方式无法防止Sql注入。
  • $方式一般用于传入数据库对象,例如传入表名.

    例如:

    select  *  from  $tableName$  对于不同的表执行统一的查询

    update  $tableName$  set  name = #name#  每个实体一张表,改变不用实体的状态

  • 一般能用#的就别用$.

2、ibatis何时使用CDATA?

  在xml元素中,"<"和"&"是非法的,"<"会产生错误,因为解析器会把该字符解释为新元素的开始,"&"也会产生错误,因为解析器会把该字符解释为字符实体的开始。

所以这时候会用"<![CDATA[    ]]>" 括起来。

3、在ibatis中,批量插入,iterate标签。其中 COMPUTE_MSEL 是FUNCTION

    <insert id="batchInsert" parameterClass="java.util.List">
insert all
<iterate conjunction=" ">
into MONITOR_T_STA_TRACEDAILY
(TXNTRACENUMBER,
TXNCODE,
TXNREQUESTCHANNELID,
TXNBOCBANKREQUESTTIME,
TXNBOCBANKREQUESTDATE,
TXNBOCBANKRESPONSETIME,
TXNBOCBANKRESPONSEDATE,
TXNRETURNCODE,
TXNRETURNMESSAGE,
RESPONSESECONDS,
CREATETIME)
values
<![CDATA[
(#recordList[].txntracenumber#,
#recordList[].txncode#,
#recordList[].txnrequestchannelid#,
#recordList[].txnbocbankrequesttime#,
#recordList[].txnbocbankrequestdate#,
#recordList[].txnbocbankresponsetime#,
#recordList[].txnbocbankresponsedate#,
#recordList[].txnreturncode#,
#recordList[].txnreturnmessage#,
COMPUTE_MSEL(
#recordList[].txnbocbankrequestdate#,
#recordList[].txnbocbankrequesttime#,
#recordList[].txnbocbankresponsedate#,
#recordList[].txnbocbankresponsetime#),
sysdate)
]]>
</iterate>
select * from dual
</insert>

4、ibatis,批量插入时,当插入数据量太大时,会报 Cause: java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名

这时候采用,分批插入的方式,如下:

public Long insertBatch(List<StaTraceDaily> list){
//每批次插入数量
int batchCount = 1000;
//游标
int index = 0;
//批次
int batchNum = 1;
try {
for(;;){
if(index+batchCount>=list.size()){
//一次可全部插入
batchInsert(list.subList(index,list.size()));
System.out.println("第"+batchNum+"批:插入"+(list.size()-index)+"条");
break;
}else {
//需要多次插入
List<StaTraceDaily> staTraceDailyList = list.subList(index, index + batchCount);
batchInsert(staTraceDailyList);
index = index+batchCount;
System.out.println("第"+batchNum+"批:插入"+batchCount+"条");
}
batchNum++;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("over~,总共插入"+list.size()+"条,插入了"+batchNum+"批");
return null;
}

5、事务
Tip:
事务不能嵌套。在调用 commit()或 rollback()之前,从同一线程多次调用.startTransaction,将引起抛出异常。
对于每个 SqlMap 实例,每个线程最多只能打开一个事务。

例:

UserDao.insertUser (user); // Starts transaction

user.setName("wh");

UserDao.updateUser (user); // Starts a new transaction

因为没有显式地启动事务,iBatis会认为这是两次事务,分别从连接池中取两次Connection。

try {

daoManager.startTransaction();

UserDao.insertUser (user);

user.setName("wh");

UserDao.updateUser(user);

otherDao.doSomething(other);

...

daoManager.commitTransaction();

} finally {

daoManager.endTransaction();

}

这样就保持了原子性,整体为一个事务,要么全部执行成功,否则回滚。

Mybatis/ibatis基础知识的更多相关文章

  1. Mybatis学习---基础知识考核

    MyBatis 2.什么是MyBatis的接口绑定,有什么好处 接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,    我们直接调用接口方法就可以,这样比起原来了Sql ...

  2. Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6812311.html 1.对原生态jdbc程序中问题总结 1.1 jdbc程序 需求:使用jdbc查询mys ...

  3. iBatis基础知识

    iBatis简介: 特点:结构性好,小巧,容易上手 搭建环境: 1.创建java 项目 2.导入(3个)jar包:ibatis-2.3.0.667.jar,mysql驱动包,Junit测试包 3.配置 ...

  4. Ibatis基础知识:#与$的差别

    背景 Ibatis是一个轻量级.非侵入式的持久层框架,适用于范围较广.较轻便--当然,不管J2EE中哪一个持久层框架,都会基于JDBC(不细究JNDI方式).我们在SqlMap中编写SQL,利用各种S ...

  5. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  6. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  7. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  8. Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】

    前言 本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门 一.Shiro基础知识 在学习Shiro这个框架之前,首先我们要先 ...

  9. Hibernate入门1. Hibernate基础知识入门

    Hibernate入门1. Hibernate基础知识入门 20131127 前言: 之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了.这样一个庞大的Spring架构 ...

随机推荐

  1. [Algo] 131. Deep Copy Linked List With Random Pointer

    Each of the nodes in the linked list has another pointer pointing to a random node in the list or nu ...

  2. python3 文件流

    文件流 # python里的打开一个文件用open(),如果不能打开,会抛出异常:OSError # 文件流的基本参数 # . file: 打开一个文件 # . mode: 打开的模式,默认模式为tx ...

  3. osi七层模型专题

    OSI模型,即开放式通信系统互联参考模型,是国际标准化组织提出的一个试图是各种计算机或者通信系统在世界范围内互联为网络的标准框架.整个模型分为七层,物理层,数据链路层,网络层,传输层,会话层,表示层, ...

  4. 吴裕雄--天生自然 PYTHON3开发学习:字典

    dict = {'} dict1 = { 'abc': 456 } dict2 = { 'abc': 123, 98.6: 37 } dict = {'Name': 'Runoob', 'Age': ...

  5. 关于XML的一些总结

    xml的知识结构图 eXtensible Markup Language,可扩展标记语言,简称XML,和HTML比较而言,语法相似,作用不同 XML被设计用来存储和传输数据,但存储数据方面,数据库是主 ...

  6. Snapchat欲联手亚马逊推扫一扫功能,社交应用营收来源将有大变化?

    当下的社交应用,已经不能完全仅用"社交"的标签进行定义.因为目前的社交应用不仅承载着大众的喜怒哀乐和沟通指责,更在逐渐打造起一个连接多方的生态系统.甚至只从自身的营收.利润出发,社 ...

  7. windows远程无法粘贴复制

    解决办法: 1.  打开电脑的任务管理器,找到 rdpclip.exe 进程,如果能找到进程,就右键结束进程,如果没有,那就正好,不用结束了,说明没启动,正常来说,都会存在的,但是在我的win10就开 ...

  8. We don't wanna work!

    We don't wanna work! [JAG Asia 2016] 两个set,一个代表工作的,一个代表不工作的 其实是一个很简单的模拟,但是我竟然排序之前标号.... 检查代码的时候要从头开始 ...

  9. 【shell基础】

    Ctrl+R 搜索之前的命令 Ctrl+D 退出 Ctrl+A 移动到行首 Ctrl+E 移动到行尾 Ctrl+U 删除光标前的内容 Ctrl+K 删除光标后的内容 Ctrl+S 锁频 Ctrl+Q ...

  10. shell_clean_log

    apache日志每天进行轮转: vim /usr/local/apache2/conf/extar/httpd-vhosts.conf...ErrorLog "| /usr/local/ap ...