今日学习中遇见几个问题

关于mybatis foreach的几种情况

1.当我需要传入多个参数的时候,可以将参数封装进map集合中(一般来说是针对一个对象而言的,比如user中的username,gender,age等)

这里的name,gender均为map的key
参数map应为 Map<String,String> map=new HashMap<>();
map.put("name","chq");
map.put("gender","男");
List<User> list = userDao.findByMap(map); <select id="findByMap" parameterType="java.util.HashMap" resultType="user">
select * from user where username=#{name} and gender=#{gender}
</select>

当传入为多个对象的时候,我们就需要重新创建一个对象,这个对象中包含其他对象以及getter,setter方法

2.批量添加,首先 我们创建一个list集合,向集合中添加user对象,然后遍历,批量添加 注意这里的collection是list

 <insert id="insertBatch" parameterType="java.util.ArrayList"  >
insert into user(username,age,gender) values
<foreach collection="list" item="user" separator=",">
(#{user.userName},#{user.age},#{user.gender})
</foreach>
</insert> public void testInsertBatch() throws Exception{
List<User> list=new ArrayList<>();
User user1=new User();
user1.setUserName("111");
user1.setGender("女");
user1.setAge(33);
User user2=new User();
user2.setUserName("222");
user2.setGender("女");
user2.setAge(44);
User user3=new User();
user3.setUserName("333");
user3.setGender("女");
user3.setAge(55);
list.add(user1);
list.add(user2);
list.add(user3);
boolean b = userDao.insertBatch(list);
System.out.println(b);
}

3.当非一个对象的参数时候,我们可以把多个对象添加到map集合中,然后再去操作, 比如下方,我们map集合中有属性gender, 以及一个list

这个与重新重建一个实体类有什么区别呢? 个人见解: 好像没啥区别,就算到时候回传到前台时也是几乎差不多.....有哪位有好的见解欢迎留言....!!!!!!!!!!!

    <select id="findByMapMore" parameterType="java.util.Map" resultType="user">
select * from user where gender=#{gender} and uid in
<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</select> @Test
public void testFindByMapMore() throws Exception{
Map<String,Object> map=new HashMap<>();
map.put("gender","男");
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
map.put("ids",list);
List<User> users = userDao.findByMapMore(map);
for (User user:users){
System.out.println(user);
}
}

4.传入一个数组时,注意collection是array,


@Test
public void testFindByArray() throws Exception{
Integer[] arrays=new Integer[]{1,2,3,4,5};
List<User> list=userDao.findByArray(arrays);
for(User user:list){
System.out.println(user);
}
} <select id="findByArray" resultType="user">
select * from user where uid in
<foreach collection="array" open="(" separator="," close=")" index="index" item="id">
#{id}
</foreach>
</select>

mybatis 基础(二) CRUD中的关键点的更多相关文章

  1. mybatis 基础(二) xml文件中的其他知识点

    mybatis xml文件中一些标签的使用 此标签主要用作 配置 "别名" 如果实体类与数据库中字段名在不区分大小写的情况下相同的话, 那就不需要配置resultMap,因为mys ...

  2. Mybatis基础-完整CRUD操作

    步骤一:mybatis基本配置 1)创建Java项目,在lib下导入mybatis所需要的Jar包,包括链接mysql的mysql-connector-java-5.1.7-bin.jar. 2)在s ...

  3. mybatis 基础(二) 动态sql 关于where if / where choose when otherwise

    个人理解: where if就相当于正常的java中的if 语句,如果有多个条件组合判断的话用 and, or连接 而where choose when otherwise choose就好像是swi ...

  4. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  5. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  6. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  7. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  8. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

  9. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

随机推荐

  1. [kuangbin带你飞]专题一 简单搜索 x

    A - 棋盘问题 POJ - 1321 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋 ...

  2. BZOJ 2651 城市改建 树形DP+模拟?

    题意 给一颗树,删除一条边再加一条边,使它仍为一颗树且任意两点间的距离的最大值最小. 题目数据范围描述有问题,n为1或重建不能使任意两点距离最大值变小,可以输出任意答案. 分析 删除一条边后会使它变成 ...

  3. sh_17_字符串的查找和替换

    sh_17_字符串的查找和替换 hello_str = "hello world" # 1. 判断是否以指定字符串开始 print(hello_str.startswith(&qu ...

  4. [笔记]动态规划(dynamic programming)

    动态规划与分治方法都是通过组合子问题的解来求解原问题,区别在于:分治方法将问题划分为互不相交的子问题,递归求解子问题,再将它们的解组合起来,求出原问题的解.分治算法可能反复的求解某些公共子问题,从而使 ...

  5. Git本地安装

    1 Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码 ...

  6. [CSP-S模拟测试]:密码(数位DP+库默尔定理)

    题目描述 为了揭穿$SERN$的阴谋,$Itaru$黑进了$SERN$的网络系统.然而,想要完全控制$SERN$,还需要知道管理员密码.$Itaru$从截获的信息中发现,$SERN$的管理员密码是两个 ...

  7. nvidia-smi 实时刷新 实时显示显存使用情况

    watch -n 0.5 -d nvidia-smi     #每隔0.5秒刷新一次

  8. Maximum upload size exceede上传文件大小超出解决

    在这里记录三种方法, 努力提高自己的姿势水平 application.yml配置 spring: servlet: multipart: enabled: true max-file-size: 10 ...

  9. [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)

    Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...

  10. [zookeeper]ZooInspector的使用

    一.背景   Zookeeper作为常用的集群协调者组件被广泛应用,尤其是在大数据生态圈中:   Zookeeper集群存储各个节点信息,包括:Hadoop.Hbase.Storm.Kafka等等: ...