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. 一、深入学习c++先要练好的内功

    掌握进程虚拟地址空间区域的划分 课程讲的内容建立在x86 32位的Linux系统下. 任何的编程语言会产生两种东西:指令和数据.磁盘上的可执行文件在启动时都会加载到内存当中,但是不会加载到物理内存中, ...

  2. 五、redis哨兵两套环境同一局域网容灾切换问题

    上周遇到个灵异事件,实验室有两套环境来搭建redis集群和哨兵,分别是: 第一套环境IP:67(master) 65(salve) 66(salve)第二套环境IP:115(master) 116(s ...

  3. 696. Count Binary Substrings - LeetCode

    Question 696. Count Binary Substrings Example1 Input: "00110011" Output: 6 Explanation: Th ...

  4. 个人冲刺(四阶段)——体温上报app(一阶段)

    任务:完成了后台数据库的类模块 MyDBHelper.java package com.example.helloworld; import android.content.Context; impo ...

  5. 深入探究MinimalApi是如何在Swagger中展示的

    前言 之前看到技术群里有同学讨论说对于MinimalApi能接入到Swagger中感到很神奇,加上Swagger的数据本身是支持OpenApi2.0和OpenApi3.0使得swagger.json成 ...

  6. React简单教程-1-组件

    前言 React,Facebook开发的前端框架.当时Facebook对市面上的前端框架都不满意,于是自己捣鼓出了React,使用后觉得特别好用,于是就在2013年开源了. 我也用React开发了一个 ...

  7. Sublime text eslint windows 配置

    1. 下载安装eslint npm install -g eslint 2. 设置环境变量 C:\Users\<你的用户名>\AppData\Roaming\npm 3. sublime ...

  8. 开源流程引擎Camunda BPM如何扩展数据库表

    前言 在使用开源流程引擎(如:JBPM.Activiti.Flowable.Camunda等)的时候,经常会遇到这样的需求,我们需要按照业务需求增加一张数据库的表,而且这张表是跟工作流引擎有交互的(注 ...

  9. LVGL库入门教程02-基本控件与交互

    LVGL 本质上是一个 GUI 库,它包含大量的控件(widget),即按钮.标签.滑块.菜单栏这种具有一定人机交互特征的组合图形.LVGL 在设计时,采用了一定面向对象编程的设计思路,有效降低了代码 ...

  10. 这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入

    上次我们把验证码登录.小程序登录优雅地集成到了Spring Security,很多同学大呼过瘾,相比较一些传统玩法高级了很多.胖哥就赶紧抓住机会举一反三,把几个非标准的OAuth2也接入了进来,主要是 ...