mybatis里设置事务自动提交

+1

MyBatis动态SQL

1.MyBatis动态SQL简介

MyBatis 功能强大,动态 SQL就是其一大特性,即拼接SQL字符串。使用过 JDBC 的同学应该有所体会,根据不同条件拼接 SQL 语句非常痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。

动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。

2.动态SQL标签:if,choose (when, otherwise),trim (where, set),foreach

2.1 if标签:

注:if标签一般用于非空验证,如上例,若id为空,if标签里的代码,将不会执行,反之,则会执行。

2.2 choose(when,otherwise)标签:

注:choose(when,otherwise)标签相当于switch(case,default) ,如上例,若title 为空,when标签里的代码,将不会执行,默认执行otherwise标签里面的代码。

2.3  trim(where,set)标签:

注:假设上例传入的username,password不为空,代码就可以运行成功!但朋友们可能有疑问了,实际上执行的sql语句是什么呢?其实,sql为:select * from user where username=? and password=? 朋友们是否发现,where标签代替了sql中where关键字,但if中的and不见了。其实where标签可以自动去除是“AND”或“OR”开头的sql中的“AND”或“OR”关键字。

如果 where 元素没有按正常套路出牌,我们还是可以通过自定义 trim 元素来定制sql,实现where标签的效果。代码如下:

set标签,代码如下:

注:set标签功能和where标签差不多,set标签代替了sql中set关键字,set标签可以自动去除sql中的多余的“,”

同理,trim标签也可以实现set标签的功能

2.4 foreach标签:foreach标签实现批量删除,

注:foreach标签可迭代任何对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数,当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值。collection标签可以填(’list’,’array’,’map’)。

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名;

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置;

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔符;

close表示以什么结束。

3.bind

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

4.Multi-db vendor support

一个配置了“_databaseId”变量的 databaseIdProvider 对于动态代码来说是可用的,这样就可以根据不同的数据库厂商构建特定的语句。比如下面的例子:

动态 SQL 中可插拔的脚本语言
MyBatis 从 3.2 开始支持可插拔的脚本语言,因此你可以在插入一种语言的驱动(language driver)之后来写基于这种语言的动态 SQL 查询。

可以通过实现下面接口的方式来插入一种语言:

一旦有了自定义的语言驱动,你就可以在 mybatis-config.xml 文件中将它设置为默认语言:

除了设置默认语言,你也可以针对特殊的语句指定特定语言,这可以通过如下的 lang 属性来完成:

或者在你正在使用的映射中加上注解 @Lang 来完成:

注意 可以将 Apache Velocity 作为动态语言来使用,更多细节请参考 MyBatis-Velocity 项目。

0

Mybatis批量删除实现

Mybatis批量删除实现,本例是以曾经一个项目力的设备操作为例。

1.首先是 EquipmentMapper 接口

2.然后是 EquipmentMapper.xml

+1

mybatis的优点总结

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解(实体和数据库的映射可以在XML中间中,也可以使用注解),将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。http://791202.com/ 那啥快看

一、MyBatis的优点

  1. 与JDBC相比,减少了50%以上的代码量。

  2. MyBatis是最简单的持久化框架,小巧并且简单易学。

  3. MyBatis灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。

  4. 提供XML标签,支持编写动态SQL语句(XML中使用if, else)。

  5. 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)。

二、MyBatis框架适用场合

  MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。

  对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

0

秒会mybatis调用存储过程(MySQL)

一、简介

有的时候,我们不方便自己写SQL,而是只能调用别人提供的存储过程,那如何使用mybatis调用存储过程呢?

二、示例步骤(MySQL)

2.1 准备一张表

2.2 准备一个存储过程

以设备的名称为输入参数,以统计到设备的总数为输出参数

2.3 mybatis-config.xml

2.4 CusDevice.java

2.5 DeviceDAO的实现

2.6 Mapper的实现

注意:statementType=”CALLABLE” 必须为CALLABLE,告诉MyBatis去执行存储过程, 否则会报错
Exception in thread “main” org.apache.ibatis.exceptions.PersistenceException

mode=IN 输入参数 mode=OUT输出参数 jdbcType为数据库定义的字段类型。

这样写 Mybatis会帮助我们自动回填输出的deviceCount的值。

2.7 测试

三、结果

可以看到mybatis调用存储过程测试成功了。

更多MyBatis使用教程,请持续关注本站:http://791202.com/

+1

浅谈mybatis分页查询

概述

抛开mybatis的分页实现方式,这里先简单叙述一下在应用程序中进行分页的实现方式。基本就是两种:

内存分页。内存分页就是根据sql语句将所有的数据从数据库中查询出来,装载到内存,然后在内存中根据分页参数(参数1:从第几条开始查询;参数2:查询几条)选取符合条件的记录。

物理分页。物理分页是在sql语句中就附带了分页参数,所以查询出的结果就是期望的分页结果,无需再在内存中做分页的逻辑。

这两种思路各有优缺点:

内存分页实现简单,能兼容所有的数据库。因为不同数据库的分页查询条件是不同的(比如,mysql:limit offset limit;oracle:rownum),使用内存分页不用在sql语句后面附加分页查询条件,从而sql语句更加兼容。但是确定同样明显,对数据库和网络IO都会带来很大的压力。在业务量稍大的系统中,该方案都不可取。

物理分页的优缺点和内存分页的相反,性能好,但是使用较繁琐,需要针对不同的数据库书写不同的sql语句。
mybatis的分页方式

在mybatis的官方文档中对分页做了介绍(这里),其思路就是在数据查询接口中传递RowBounds参数,接口如下:

使用方式如下:

调用方式:

list中的是符合sql语句的第11-15(均包含)条数据。

我们可以看到,在sql语句中没有附加分页查询的条件,却得到了分页查询的效果。那么mybatis中是怎么实现的呢?其实就是上面所说的内存分页方式,其关键的代码如下:

mybatis内存分页的逻辑:

我们已经明白内存分页的方式是不可取的,那么在使用mybatis的时候怎么进行分页呢?既然内存分页不能使用,那就只能进行物理分页了,其实就是在查询语句中附加分页查询的条件。这样就会导致针对每一种数据库需要维护一套分页查询的sql语句,略微繁琐。

那能不能融合融合内存分页和物理分页的有点呢?即sql语句只用维护一套,而实现物理分页呢?答案是有的,可以参考Mybatis-PageHelper,目前我还没有对其进行深入研究。其大致的思路就是利用mybatis提供的plugin功能拦截数据库查询,根据不同的数据库在查询语句的后面附件不用的分页查询条件。

至于有没有必要在项目中使用Mybatis-PageHelper,我觉得如果分页需求较少,自己手写分页sql便可,毕竟引入第三方的插件会存在引入额外bug的可能。

更多mybatis使用心得,请持续关注本站:http://791202.com/

0

mybatis查询返回list,包括resultType和resultMap两种写法

mybatis查询返回List集合时,需要将resultType的值定义为集合中的元素类型,而不是返回集合本身。

代码示例

ok,mybatis查询返回list写法就是这么简单。

0

Eclipse里Spring MVC4+Spring 4+Mybatis3+junit4+Maven3.0 整合搭建

创建maven工程

点击Eclipse菜单栏File->New->Ohter->Maven->选择项目目录->next->选择项目类型

搜索web,创建项目->next

填写groupId和artifact Id->finish

项目配置

右击项目-new

创建如下几个文件

配置build path

分别修改输出路径为

  • src/main/resources对应target/classes
  • src/main/java对应target/classes
  • src/test/resources对应target/test-classes
  • src/test/java对应target/test-classes

设置JDK版本

设置部署程序集(Web Deployment Assembly)

把两个test目录去掉!!!

到此项目算是部署完成了。

spring mvc+spring+mybatis配置

pom.xml文件

web.xml

dispatcher-servlet.xml

applicationContext-bean.xml

mybaitis.xml

单元测试代码

0

SQLite + mybatis 使用教程

1.创建user表

创建的数据库文件保存在“C\mydb.db”中

2.准备依赖的jar包

3.configuration.xml

4.userMapper.xml

5.UserVo.java

6. UserTest.java

0