1:动态sql:

意义:可以定义代码片段,可以进行逻辑判断,可以进行循环或批量处理,使条件判断更为简单

1.1:定义代码片段简化代码:

1.2:多条件查询:

<where> <if test=''>的用法:用于条件判断查询:

List<User> selectCondition(User user);

<select id="selectCondition" resultType="user" parameterType="user">
select <include refid="c"></include> from mybatis.user
<where>
<if test="name!=null and name!=''">
and name like concat('%',#{name},'%')
</if>
<if test="pwd!=null and pwd!=''">
and pwd =#{pwd}
</if>
</where>

</select>

   User user=new User();
user.setName("张");
user.setPwd("111111");
List<User> users = usermapper.selectCondition(user);
for (User user1 : users) {
System.out.println(user1);
}

}

1.3:条件修改:

<set> <if test=''>的用法:用于条件判断更新:

int updatecondition(User user);

<update id="updatecondition" parameterType="user">
update mybatis.user
<set>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="pwd!=null and pwd!=''">
pwd=#{pwd},
</if>

</set>
where id=#{id}
</update>

User user=new User();
user.setId(2);
user.setName("李四");
int i = usermapper.updatecondition(user);
sqlSession.commit();

注意:使用<set>至少更新一列

1.3:循环查询,批量删除,批量增加,批量更新:

循环查询<foreach>的用法:

List<User> selectForEach(Integer[] integers);
<select id="selectForEach"  resultType="user">
select <include refid="c"></include> from mybatis.user
where id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>

</select>

Integer[] arr={2,4,6};
List<User> users = usermapper.selectForEach(arr);
for (User user1 : users) {
System.out.println(user1);
}

<foreach>参数讲解:

collection:用来指定参数的类型,如果是List集合,则为list,如果是Map集合,则为map,如果为数组,则为array

item:每次循环遍历出来的值或对象

separator:多个值或对象之间的分隔符

open:整个循环外面的前括号

close:整个循环外面的后括号

批量删除<foreach>的用法:

int deleteForeach(Integer[] integers);接口
<delete id="deleteForeach">
delete from mybatis.user
where id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete> xml文件
Integer[] arr={1,2};
int i = usermapper.deleteForeach(arr);
sqlSession.commit();测试

批量增加<foreach>的用法:

int insertForeach(List<User> list);

<insert id="insertForeach" parameterType="user">
insert into mybatis.user(id,name,pwd)
values
<foreach collection="list" item="u" separator=",">
(#{u.id},#{u.name},#{u.pwd})
</foreach>
</insert>
注意:item="u",增加的对象为u,取出成员变量的形式应该为u.name等
List<User> list=new ArrayList<User>();
list.add(new User(1,"张三","1111111"));
list.add(new User(2,"张三","1111111"));
list.add(new User(10,"张三","1111111"));
int i = usermapper.insertForeach(list);
sqlSession.commit();

批量更新<foreach>的用法:

int updateForeach(List<User> list);



<update id="updateForeach" parameterType="user">
<foreach collection="list" item="u" separator=";">
update mybatis.user
<set>
<if test="u.name!=null and u.name!=''">
name=#{u.name},
</if>
<if test="u.pwd!=null and u.pwd!=''">
pwd=#{u.pwd},
</if>

</set>
where id=#{u.id}
</foreach>

</update>
List<User> list=new ArrayList<User>();
list.add(new User(1,"王五","1111111"));
list.add(new User(2,"李四","22222222"));
list.add(new User(10,"张三","3333333"));
int i = usermapper.updateForeach(list);
sqlSession.commit();

注意:需要在dabase.properties中加入&allowMultiQueries=true,即允许多行操作

指定参数位置下标查询:

入参是map:

返回值是一行的map:

Map usermap(Integer id);

<select id="usermap" parameterType="int" resultType="map">
select name,pwd from mybatis.user where id=#{id}
</select>

Map usermap = usermapper.usermap(1);
System.out.println(usermap);
System.out.println(usermap.get("name"));

返回值是多行的map:

List<Map> getmap();

<select id="getmap" resultType="map">
select name,pwd from mybatis.user
</select>

List<Map> getmap = usermapper.getmap();
for (Map map : getmap) {
System.out.println(map);
}

Mybatis的使用(3)的更多相关文章

  1. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  2. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  3. [原创]mybatis中整合ehcache缓存框架的使用

    mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...

  4. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  5. mybatis plugins实现项目【全局】读写分离

    在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...

  6. MyBatis基础入门--知识点总结

    对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...

  7. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  8. MyBatis源码分析(一)开篇

    源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...

  9. (整理)MyBatis入门教程(一)

    本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...

  10. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

随机推荐

  1. 一键解决Win10 LTSC 2021官方镜像存在的问题

    一键解决Win10 LTSC 2021官方镜像存在的问题 由于适用了win10 ltsc 2021之后,发现官方镜像存在一些致命的bug.但是本人又喜欢这个官方精简的系统,所以进行了一些修复.并将搜集 ...

  2. 169. Majority Element - LeetCode

    Question 169. Majority Element Solution 思路:构造一个map存储每个数字出现的次数,然后遍历map返回出现次数大于数组一半的数字. 还有一种思路是:对这个数组排 ...

  3. nodejs使用 svg-captcha 做验证码及验证

    一.需求 使用 nodejs 做后端开发,需要请求验证码,在 github 上看到了 svg-captcha 这个库,发现他是将 text 转 svg 进行返回的,安全性也有保证,不会被识别成文字. ...

  4. 以圆类 Circle 为基础设计球类 Sphere

    学习内容:实验二以圆类 Circle 为基础设计球类 Sphere 代码示例: import java.util.Scanner; class Point{ private double x; pri ...

  5. df-查看磁盘目录空间大小

    查看磁盘分区挂载情况. 语法 df [option] 选项 -T 显示文件系统类型. -h 带单位显示. 示例 [root@localhost ~]# df -Th Filesystem Type S ...

  6. 翻页组件page-flip调用问题

    翻页组件重新调用解决方案 翻页组件:page-flip import { PageFlip } from 'page-flip' pagefile() { //绘制翻页 this.pageFlip = ...

  7. 使用多线程提高REST服务器性能

    异步处理REST服务 1.使用Runnable异步处理Rest服务 释放主线程,启用副线程进行处理,副线程处理完成后直接返回请求 主要代码 import java.util.concurrent.Ca ...

  8. Linux服务器安装图形化界面

    Linux服务器安装图形化界面 1.检查有无安装gnome桌面 [root@localhost ~]# rpm -qa |grep gnome 2.查看可安装组件列表 [root@localhost ...

  9. client offset scroll 之间的区别

    一.client 属性 值 clientWidth 元素被设置的宽度 + padding左右内间距 clientHeight 元素被设置的高度 + padding上下内间距 clientLeft 左 ...

  10. Redis 切片集群的数据倾斜分析

    Redis 中如何应对数据倾斜 什么是数据倾斜 数据量倾斜 bigkey导致倾斜 Slot分配不均衡导致倾斜 Hash Tag导致倾斜 数据访问倾斜 如何发现 Hot Key Hot Key 如何解决 ...