最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis使用foreach遍歷list集合或者array數(shù)組方式

 更新時(shí)間:2021年07月30日 15:20:01   作者:ACodeBird  
這篇文章主要介紹了mybatis使用foreach遍歷list集合或者array數(shù)組方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、準(zhǔn)備工作

1.db.properties文件(記得修改自己的數(shù)據(jù)庫和用戶名、密碼)

dataSource.driver=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
dataSource.username=blog
dataSource.password=blog

2.主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--  引入外部配置文件-->
	<properties resource="db.properties"></properties>
	<!-- 別名設(shè)置,不設(shè)置時(shí)引用要使用全包名,設(shè)置后可以使用自定義別名,更加簡潔 -->
	<typeAliases>
		<!-- 別名設(shè)置有兩種,一種是一個(gè)一個(gè)設(shè)置,另外一種是設(shè)置某個(gè)包,默認(rèn)別名為類名(大小寫都可以,建議小寫) -->
		<!-- 第一種設(shè)置 
	 	<typeAlias type="com.mybatis_demo.domain.User" alias="user"/>-->
	 	<!-- 第二種設(shè)置,整個(gè)包下面的類都進(jìn)行別名設(shè)置,推薦第二種 -->
	 	<package name="com.mybatis_demo.domain"/>
	 </typeAliases>
<!-- 環(huán)境模式:development開發(fā)模式 work工作模式 -->
  <environments default="development">
  <!-- 環(huán)境變量 -->
    <environment id="development">
    <!-- 使用jdbc的事務(wù)管理 -->
      <transactionManager type="JDBC"/>
      <!-- 使用連接池 -->
      <dataSource type="POOLED">
        <property name="driver" value="${dataSource.driver}"/>
        <property name="url" value="${dataSource.url}"/>
        <property name="username" value="${dataSource.username}"/>
        <property name="password" value="${dataSource.password}"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 引入mapper映射文件 -->
  <mappers>
  <!--  1.相對路徑引入-->
   <!--  <mapper resource="mapper/UserMapper.xml"/> -->
    <!-- 2.絕對路徑引入 -->
    <!-- <mapper url="file:\\\D:\sts-bundle\workplace\mybatis_demo\src\main\resources\mapper\UserMapper.xml"/> -->
    <!-- 3.對應(yīng)mapper接口全包名引入,需要對應(yīng)的mapper.xml與接口mapper處于同一包下才可以,且xml文件名與接口名要相同,xml文件中的namespace必須是對應(yīng)接口的全包名 -->
    <!-- <mapper class="com.mybatis_demo.mapper.UserMapper"/> -->
    <!-- 4.包引入,要求跟接口引入一樣 -->
   <!--  <mapper resource="mapper/UserMapper2.xml"/> -->
    <package name="com.mybatis_demo.mapper"/>
  </mappers>
</configuration>

3.創(chuàng)建User類和包裝類UserVo

User.java

package com.mybatis_demo.domain;
public class User {
	private Integer uid;
	private String uname;
	private Integer age;
	private String address;
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", uname=" + uname + ", age=" + age + ", address=" + address + "]";
	}
}

UserVo.java

package com.mybatis_demo.domain;
import java.util.List;
public class UserVo extends User {
	private Integer[] ids;
	private List<Integer> idList;
	public Integer[] getIds() {
		return ids;
	}
	public void setIds(Integer[] ids) {
		this.ids = ids;
	}
	public List<Integer> getIdList() {
		return idList;
	}
	public void setIdList(List<Integer> idList) {
		this.idList = idList;
	}
	
}

二、遍歷數(shù)組和集合的映射文件和對應(yīng)的接口

1.mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis_demo.mapper.UserMapper">
<!-- 遍歷list集合,collection="list",如果你傳參的時(shí)候是直接傳遞list集合,那么這里只能填list,不能填參數(shù)名 -->
<select id="selectByList" resultType="User">
	select * from t_user where uid in
	<foreach collection="list" item="item" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>
<!-- 遍歷數(shù)組 ,collection="array",如果你傳參的時(shí)候是直接傳遞數(shù)組,那么這里只能填array,不能填參數(shù)名-->
<select id="selectByArray" resultType="User">
	select * from t_user where uid in
	<foreach collection="array" item="item" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>
<!-- 遍歷包裝類中的數(shù)組,collection="ids",這里不再是array,而是包裝類中對應(yīng)的變量名,因?yàn)槟銈鬟f的參數(shù)是一個(gè)包裝類,mybatis是通過get方法獲取包裝類中的數(shù)組 -->
<select id="selectUserVoByArray" parameterType="UserVo" resultType="User">
	select * from t_user where uid in
	<foreach collection="ids" item="item" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>
<!-- 遍歷包裝類中的list集合,collection="idList",這里不再是list,而是包裝類中對應(yīng)的變量名,因?yàn)槟銈鬟f的參數(shù)是一個(gè)包裝類,mybatis是通過get方法獲取包裝類中的list集合 -->
<select id="selectUserVoByList" parameterType="UserVo" resultType="User">
	select * from t_user where uid in
	<foreach collection="idList" item="item" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>
</mapper>

2.mapper接口

UserMapper.interface

package com.mybatis_demo.mapper;
import java.util.List;
import java.util.Map;
import com.mybatis_demo.domain.User;
import com.mybatis_demo.domain.UserVo;
public interface UserMapper {
	//mybatis使用mapper動(dòng)態(tài)代理
	
	//4大原則,一個(gè)注意
	//1.接口中的方法名需要與對應(yīng)mapper.xml的id一致
	//2.接口中的返回值需要與對應(yīng)mapper.xml的返回值類型保持一致
	//3.接口中的參數(shù)需要與對應(yīng)mapper.xml的參數(shù)類型、個(gè)數(shù)、參數(shù)名保持一致
	//4.對應(yīng)mapper.xml的名字空間需要修改成對應(yīng)接口的全包名
	//注意:mapper動(dòng)態(tài)代理根據(jù)返回值類型,mybatis會(huì)自動(dòng)選擇調(diào)用selectone還是selectlist....
	//用list封裝條件
	public List<User> selectByList(List<Integer> testlist);
	//用數(shù)組封裝條件
	public List<User> selectByArray(Integer[] ids);
	//用包裝類中的數(shù)組封裝條件
	public List<User> selectUserVoByArray(UserVo userVo);
	//用包裝類中的list封裝條件
	public List<User> selectUserVoByList(UserVo userVo);	
}

三、測試代碼

package com.mybatis_demo.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.mybatis_demo.domain.User;
import com.mybatis_demo.domain.UserVo;
import com.mybatis_demo.mapper.UserMapper;
public class TestMapper {
	
	//用包裝類中的list封裝條件,傳遞參數(shù)是一個(gè)包裝類
	@Test
	public void test_selectUserVoByList() {
		try {
			 //讀取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//創(chuàng)建SqlSessionFactoryBuilder對象,用來獲取SqlSessionFactory對象
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用SqlSessionFactoryBuilder對象build一個(gè)SqlSessionFactory對象
			SqlSessionFactory build = builder.build(in);
			//利用sqlSessionFactory獲取session對象
			SqlSession session = build.openSession();
			//通過session對象獲取對應(yīng)mapper接口
			UserMapper mapper = session.getMapper(UserMapper.class);
			List<Integer> idList = new ArrayList<Integer>();
			idList.add(5);
			idList.add(3);
			idList.add(123);
			idList.add(19);
			UserVo userVo = new UserVo();
			userVo.setIdList(idList);
			List<User> users = mapper.selectUserVoByList(userVo);
			for (User user : users) {
				System.out.println(user);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//用包裝類中的array封裝條件,傳遞參數(shù)是一個(gè)包裝類
	@Test
	public void test_selectUserVoByArray() {
		try {
			 //讀取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//創(chuàng)建SqlSessionFactoryBuilder對象,用來獲取SqlSessionFactory對象
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用SqlSessionFactoryBuilder對象build一個(gè)SqlSessionFactory對象
			SqlSessionFactory build = builder.build(in);
			//利用sqlSessionFactory獲取session對象
			SqlSession session = build.openSession();
			//通過session對象獲取對應(yīng)mapper接口
			UserMapper mapper = session.getMapper(UserMapper.class);
			Integer[] ids = new Integer[]{5,9,30};
			UserVo userVo = new UserVo();
			userVo.setIds(ids);
			List<User> users = mapper.selectUserVoByArray(userVo);
			for (User user : users) {
				System.out.println(user);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//用數(shù)組封裝條件,傳遞參數(shù)是一個(gè)數(shù)組
	@Test
	public void test_selectByArray() {
		try {
			 //讀取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//創(chuàng)建SqlSessionFactoryBuilder對象,用來獲取SqlSessionFactory對象
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用SqlSessionFactoryBuilder對象build一個(gè)SqlSessionFactory對象
			SqlSessionFactory build = builder.build(in);
			//利用sqlSessionFactory獲取session對象
			SqlSession session = build.openSession();
			//通過session對象獲取對應(yīng)mapper接口
			UserMapper mapper = session.getMapper(UserMapper.class);
			Integer[] ids = new Integer[]{5,9,30};
			List<User> users = mapper.selectByArray(ids);
			for (User user : users) {
				System.out.println(user);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//用list封裝條件,傳遞參數(shù)是一個(gè)list集合
	@Test
	public void test_selectByList() {
		try {
			 //讀取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//創(chuàng)建SqlSessionFactoryBuilder對象,用來獲取SqlSessionFactory對象
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用SqlSessionFactoryBuilder對象build一個(gè)SqlSessionFactory對象
			SqlSessionFactory build = builder.build(in);
			//利用sqlSessionFactory獲取session對象
			SqlSession session = build.openSession();
			//通過session對象獲取對應(yīng)mapper接口
			UserMapper mapper = session.getMapper(UserMapper.class);
			List<Integer> list = new ArrayList<Integer>();
			list.add(5);
			list.add(3);
			list.add(123);
			list.add(19);
			List<User> users = mapper.selectByList(list);
			for (User user : users) {
				System.out.println(user);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

四、總結(jié)

1.如果你傳參的時(shí)候直接傳一個(gè)數(shù)組,那么使用foreach遍歷時(shí)collection=“array”,這里是固定寫法,即這里的array與你的實(shí)參名無關(guān)

2.如果你傳參的時(shí)候直接傳一list集合,那么使用foreach遍歷時(shí)collection=“l(fā)ist”,這里是固定寫法,即這里的list與你的實(shí)參名無關(guān)

3.如果你傳參的時(shí)候直接傳一個(gè)含有數(shù)組成員變量的類,那么使用foreach遍歷時(shí)collection=“你的變量名”,這里不再是固定寫法,即這里的命名取決于成員變量的變量名,例如:成員變量名是test,那么就是collection=“test”

4.如果你傳參的時(shí)候直接傳一個(gè)含有l(wèi)ist集合成員變量的類,跟3的情況一樣

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 可重啟線程及線程池類的設(shè)計(jì)(詳解)

    java 可重啟線程及線程池類的設(shè)計(jì)(詳解)

    下面小編就為大家?guī)硪黄猨ava 可重啟線程及線程池類的設(shè)計(jì)(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 基于Java在netty中實(shí)現(xiàn)線程和CPU綁定

    基于Java在netty中實(shí)現(xiàn)線程和CPU綁定

    這篇文章主要介紹了基于Java在netty中實(shí)現(xiàn)線程和CPU綁定,文章圍繞主題的相關(guān)內(nèi)容展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • SpringBoot中的HATEOAS詳情

    SpringBoot中的HATEOAS詳情

    這篇文章主要介紹了SpringBoot中的HATEOAS詳情,SpringBoot提供了HATEOAS的便捷使用方式,文章圍繞主題展開詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • tomcat啟動(dòng)完成執(zhí)行 某個(gè)方法 定時(shí)任務(wù)(Spring)操作

    tomcat啟動(dòng)完成執(zhí)行 某個(gè)方法 定時(shí)任務(wù)(Spring)操作

    這篇文章主要介紹了tomcat啟動(dòng)完成執(zhí)行 某個(gè)方法 定時(shí)任務(wù)(Spring)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • MyBatis加解密插件的示例詳解

    MyBatis加解密插件的示例詳解

    本文介紹了使用?MyBatis?插件實(shí)現(xiàn)數(shù)據(jù)庫字段加解密的探索過程,實(shí)際開發(fā)過程中需要注意的細(xì)節(jié)比較多,整個(gè)流程下來我對?MyBatis?的理解也加深了,對MyBatis加解密插件感興趣的朋友跟隨小編一起看看吧
    2022-08-08
  • MyBatis XML方式的基本用法之多表查詢功能的示例代碼

    MyBatis XML方式的基本用法之多表查詢功能的示例代碼

    這篇文章主要介紹了MyBatis XML方式的基本用法之多表查詢功能的示例代碼,本文通過示例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Intellij搭建springmvc常見問題解決方案

    Intellij搭建springmvc常見問題解決方案

    這篇文章主要介紹了Intellij搭建springmvc常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 解決IDEA的maven項(xiàng)目中沒有新建Servlet文件的選項(xiàng)問題

    解決IDEA的maven項(xiàng)目中沒有新建Servlet文件的選項(xiàng)問題

    這篇文章主要介紹了IDEA的maven項(xiàng)目中沒有新建Servlet文件的選項(xiàng)問題及解決方法,本文給大家分享問題原因就解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java語言描述存儲(chǔ)結(jié)構(gòu)與鄰接矩陣代碼示例

    Java語言描述存儲(chǔ)結(jié)構(gòu)與鄰接矩陣代碼示例

    這篇文章主要介紹了Java語言描述存儲(chǔ)結(jié)構(gòu)與鄰接矩陣代碼示例,涉及Java存儲(chǔ)結(jié)構(gòu),鄰接矩陣,鄰接表的介紹與比較,然后分享了鄰接矩陣的Java實(shí)現(xiàn)等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考。
    2017-11-11
  • Java設(shè)計(jì)模式之java原型模式詳解

    Java設(shè)計(jì)模式之java原型模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-09-09

最新評論

若羌县| 红桥区| 桂林市| 宕昌县| 仪征市| 烟台市| 嘉荫县| 东山县| 古田县| 禄劝| 沽源县| 龙泉市| 商南县| 昆山市| 南昌县| 茶陵县| 大渡口区| 湖北省| 延长县| 饶阳县| 轮台县| 洛隆县| 景宁| 佛教| 拜城县| 白银市| 延边| 紫金县| 逊克县| 民和| 夹江县| 徐闻县| 正蓝旗| 扎囊县| 象山县| 墨玉县| 登封市| 黔西| 寿光市| 天镇县| 龙川县|