柚子快報(bào)邀請(qǐng)碼778899分享:Mybatis基本使用
柚子快報(bào)邀請(qǐng)碼778899分享:Mybatis基本使用
學(xué)習(xí)資源: b站:遇見(jiàn)狂神說(shuō) 鏈接:https://www.bilibili.com/video/BV1NE411Q7Nx/?spm_id_from=333.999.0.0
使用環(huán)境:
jdk1.8mysql5.7maven3.8
1、第一個(gè)Mybatis程序
1.1、搭建數(shù)據(jù)庫(kù)
CREATE DATABASE `mybatis`
CREATE TABLE `user` (
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES
(1,'jack','123'),
(2,'tom','123'),
(3,'smith','123')
1.2、使用idea創(chuàng)建一個(gè)maven項(xiàng)目
導(dǎo)入依賴:
1.3、編寫(xiě)mybatis核心配置文件
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
1.4、創(chuàng)建工具類,獲取sqlSessionFactory對(duì)象
package com.yang.utils;
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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
static {
String resource = "mybatis-config.xml";
try {
// 獲取sqlSessionFactory對(duì)象
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 從sqlSessionFactory對(duì)象獲取sqlSession實(shí)例
* sqlSession:執(zhí)行sql語(yǔ)句的對(duì)象
*/
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
1.5、編寫(xiě)測(cè)試代碼
實(shí)體類:
package com.yang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
接口:
package com.yang.dao;
import com.yang.pojo.User;
import java.util.List;
public interface UserMapper {
List
}
接口對(duì)應(yīng)的mapper.xml:
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from user
在mybatis核心配置文件中(configuration標(biāo)簽內(nèi))注冊(cè)mapper:
測(cè)試:
package com.yang.dao;
import com.yang.pojo.User;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
// 1獲取sqlSession實(shí)例
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 2執(zhí)行sql
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List
for (User user : userList) {
System.out.println(user);
}
}
}
注意:如果mapper.xml定義在resources目錄之外,需要在pom.xml下配置
1.6、總結(jié)
步驟:
maven項(xiàng)目下使用mybatis需要在resources目錄下創(chuàng)建一個(gè)mybatis的核心配置文件創(chuàng)建數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)體類編寫(xiě)接口接口對(duì)應(yīng)的mapper配置文件中注冊(cè)mapper測(cè)試
注意點(diǎn):
注意每一個(gè)接口對(duì)應(yīng)一個(gè)mapper.xml文件,接口和接口中的方法,在mapper.xml文件中對(duì)應(yīng)在mybatis核心配置文件中注冊(cè)對(duì)應(yīng)的mapper使其生效mapper.xml不在resources目錄下創(chuàng)建時(shí),需要處理配置文件之外的載失敗的問(wèn)題
2、增刪改查
在UserMapper接口下添加方法:
// 根據(jù)id查詢用戶
User getUserById(int id);
// 添加一個(gè)用戶
int addUser(User user);
// 修改用戶信息
int updateUser(User user);
// 根據(jù)id刪除用戶
int deleteUser(int id);
對(duì)應(yīng)的mapper:
select * from user where id = #{id}
insert into user values(#{id},#{name},#{pwd})
update user set name=#{name},pwd=#{pwd} where id=#{id}
delete from user where id=#{id}
測(cè)試:
/**
* 刪除用戶
*/
@Test
public void test05(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
/**
* 修改用戶信息
*/
@Test
public void test04(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.updateUser(new User(3,"smith","123"));
sqlSession.commit();
sqlSession.close();
}
/**
* 增加一個(gè)用戶
*/
@Test
public void test03(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.addUser(new User(4,"milan","123"));
sqlSession.commit();
sqlSession.close();
}
/**
* 查詢單個(gè)用戶
*/
@Test
public void test02(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(2);
System.out.println(user);
sqlSession.commit();
sqlSession.close();
}
注意:
傳遞的參數(shù)類型是基本數(shù)據(jù)類型時(shí),可以省略parameterType不寫(xiě)增刪改操作返回類型都是int,可以省略resultType不寫(xiě)增刪改操作必須提交事務(wù),否者不成功
3、核心配置文件引入外部配置文件
resources目錄下創(chuàng)建外部配置文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&charsetEncoding=UTF-8"
username=root
password=root
核心配置文件中引入外部配置文件:
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
注意:
可以在核心配置文件中引入外部配置文件可以在核心配置文件中增加一些屬性如果核心配置文件和外部配置文件中有共同屬性字段,優(yōu)先使用外部配置文件的
4、別名替代全類名
方式1指定別名(指定具體類):
方式2指定別名(掃描包):
使用方式2指定別名,不適用默認(rèn)別名情況下,需要單獨(dú)設(shè)置別名時(shí)使用注解@Alias(“別名”)的方式:
package com.yang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.ibatis.type.Alias;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Alias("testUser") // 設(shè)置別名為testUser
public class User {
private int id;
private String name;
private String pwd;
}
5、映射器
方式1:指定接口對(duì)應(yīng)的mapper配置文件綁定
方式2:接口全類名綁定
方式3:掃描包綁定
注意:使用時(shí)需要注意接口和mapper的存放位置
6、生命周期和作用域
6.1、SqlSessionFactoryBuilder
一旦創(chuàng)建了 SqlSessionFactory,就不再需要SqlSessionFactoryBuilder實(shí)例因此 SqlSessionFactoryBuilder 實(shí)例的最佳作用域是方法作用域(也就是局部方法變量)
6.2、SqlSessionFactory
SqlSessionFactory 一旦被創(chuàng)建就應(yīng)該在應(yīng)用的運(yùn)行期間一直存在使用 SqlSessionFactory 在應(yīng)用運(yùn)行期間盡量不要重復(fù)創(chuàng)建多次因此 SqlSessionFactory 的最佳作用域是應(yīng)用作用域
6.3、SqlSession
每個(gè)線程都應(yīng)該有它自己的 SqlSession 實(shí)例SqlSession不能被共享,所以它的最佳的作用域是請(qǐng)求或方法作用域每次收到 HTTP 請(qǐng)求,就可以打開(kāi)一個(gè) SqlSession,返回一個(gè)響應(yīng)后,就關(guān)閉它
7、resultMap結(jié)果集映射
實(shí)體類屬性名為password,數(shù)據(jù)庫(kù)列名為pwd,使用resultMap解決:
select * from user where id = #{id}
8、日志
8.1、mybatis核心配置文件中設(shè)置標(biāo)準(zhǔn)的日志實(shí)現(xiàn):
在核心配置文件中設(shè)置:
8.2、Log4j日志實(shí)現(xiàn)
通過(guò)Log4j日志可以輸出日志到控制臺(tái),以及指定文件中可以指定輸出日志的格式定義日志信息的級(jí)別可以精確控制日志的生成通過(guò)配置文件配置,不需要修改程序原有代碼
1、導(dǎo)入log4j依賴:
2、resources目錄下新建log4j.properties配置文件:
### 設(shè)置
log4j.rootLogger = debug,stdout,D,E
### 輸出信息到控制臺(tái)
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 輸出DEBUG 級(jí)別以上的日志到=./log/debug.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./log/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 輸出ERROR 級(jí)別以上的日志到=./log/error.log
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =./log/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
3、編寫(xiě)測(cè)試類:
package com.yang.dao;
import org.apache.log4j.Logger;
import org.junit.Test;
public class Log4jTest {
private static final Logger logger = Logger.getLogger(Log4jTest.class);
@Test
public void testLog4j(){
// 記錄debug級(jí)別的信息
logger.debug("This is debug message.");
// 記錄info級(jí)別的信息
logger.info("This is info message.");
// 記錄error級(jí)別的信息
logger.error("This is error message.");
}
}
4、查看控制臺(tái)輸出以及項(xiàng)目路徑下生成目錄和文件記錄的內(nèi)容
9、Mybatis實(shí)現(xiàn)分頁(yè)
接口中添加方法:
/**
* 分頁(yè)查詢
*/
List
mapper中添加分頁(yè)查詢語(yǔ)句:
select * from user limit #{startIndex},#{pageSize}
測(cè)試代碼:
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 使用map封裝
Map
map.put("startIndex",0);
map.put("pageSize",3);
List
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
補(bǔ)充:
parameterType接收類型,對(duì)應(yīng)的取值類型
普通類型 int,double …,取值為_(kāi)int …包裝類型Integer,Double …,取值為 integer … 當(dāng)parameterType接受的類型是Map,取值時(shí)需要和Map的key對(duì)應(yīng)
9、Mybatis注解開(kāi)發(fā)
Mybatis注解開(kāi)發(fā)的底層邏輯是使用反射加載接口的結(jié)構(gòu),進(jìn)而獲取接口方法(返回類型,泛型,參數(shù)等)
使用注解來(lái)映射簡(jiǎn)單語(yǔ)句會(huì)使代碼顯得更加簡(jiǎn)潔如果是一些很復(fù)雜的操作,最好用 XML 來(lái)映射語(yǔ)句簡(jiǎn)單的sql語(yǔ)句可以使用注解的方式實(shí)現(xiàn),遇到一些復(fù)雜的sql語(yǔ)句,盡量使用xml語(yǔ)句的映射方式
接口代碼:
package com.yang.dao;
import com.yang.pojo.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select("select * from user")
List
}
核心配置文件中配置:
測(cè)試:
package com.yang;
import com.yang.dao.UserMapper;
import com.yang.pojo.User;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class TestUser {
@Test
public void testQueryUsers(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
使用注解開(kāi)發(fā)簡(jiǎn)單的CRUD操作:
// 根據(jù)id查詢用戶
@Select("select * from user where id = #{uid}")
User getUserById(@Param("uid") Integer id);
// 添加用戶
@Insert("insert into user values (#{id},#{name},#{password})")
int addUser(User user);
// 修改用戶信息
@Update("update user set name=#{name},pwd=#{password} where id=#{id}")
int updateUser(User user);
// 刪除用戶
@Delete("delete from user where id=#{uid}")
int deleteUser(@Param("uid") Integer id);
@Param注解的基本使用說(shuō)明
傳入單個(gè)基本數(shù)據(jù)類型時(shí),可以不指定@Param注解,默認(rèn)值為參數(shù)名傳入多個(gè)基本參數(shù)類型時(shí),需要給每個(gè)基本類型的參數(shù)使用@Param注解執(zhí)行sql預(yù)編譯的參數(shù)對(duì)應(yīng)的是@Param注解的值,而不是參數(shù)名包裝類型不需要指定@Param注解
10、復(fù)雜結(jié)果集映射
添加數(shù)據(jù)庫(kù)測(cè)試數(shù)據(jù):
CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `teacher` VALUES(1,'李老師')
CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` VALUES ('1','小明','1');
INSERT INTO `student` VALUES ('2','小強(qiáng)','1');
INSERT INTO `student` VALUES ('3','小紅','1');
INSERT INTO `student` VALUES ('4','小李','1');
INSERT INTO `student` VALUES ('5','小王','1');
teacher對(duì)應(yīng)實(shí)體類:
package com.yang.pojo;
import lombok.Data;
@Data
public class Teacher {
private Integer id;
private String name;
}
student對(duì)應(yīng)實(shí)體類:
package com.yang.pojo;
import lombok.Data;
@Data
public class Student {
private Integer id;
private String name;
}
10.1、對(duì)一關(guān)系
這里以一個(gè)學(xué)生對(duì)應(yīng)一個(gè)老師的形式舉例
Student實(shí)體中添加對(duì)象屬性:
// 一個(gè)學(xué)生關(guān)聯(lián)一個(gè)老師
private Teacher teacher;
StudentMapper.xml:
select s.id sid,s.name sname,t.id tid,t.name tname
from student s
join teacher t
on s.tid = t.id
注意:
對(duì)象類型屬性關(guān)系映射使用association和javaTypeproperty屬性對(duì)應(yīng)的是實(shí)體類屬性column屬性對(duì)應(yīng)的是查詢結(jié)果返回的列名因?yàn)椴樵兘Y(jié)果時(shí)使用了別名的方式,所以屬性column取值為別名的方式
10.2、對(duì)多關(guān)系
這里以一個(gè)老師對(duì)應(yīng)多個(gè)學(xué)生的形式舉例
Teacher實(shí)體類中添加集合類型屬性:
// 一個(gè)老師對(duì)應(yīng)多個(gè)學(xué)生
private List
TeacherMapper.xml:
SELECT t.id tid,t.name tname,s.id sid,s.name sname
FROM `teacher` t
JOIN `student` s
ON t.id = s.tid
where tid = #{tid}
測(cè)試:
@Test
public void testTeacher(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = teacherMapper.queryById(1);
System.out.println(teacher);
sqlSession.close();
}
注意:
集合類型的屬性關(guān)系映射與對(duì)象類型屬性關(guān)系映射不同集合類型的屬性關(guān)系映射是使用collection和ofTypeofType指定的類型為集合的泛型類型
總結(jié)
當(dāng)處理簡(jiǎn)單的普通類型的映射關(guān)系時(shí),使用resultType處理復(fù)雜類型(對(duì)象、集合)的映射關(guān)系時(shí),需要使用結(jié)果集映射resultMap處理結(jié)果集映射的關(guān)系時(shí),需要注意屬性名和列名的問(wèn)題
11、動(dòng)態(tài)SQL
在數(shù)據(jù)庫(kù)層面增加一些邏輯,根據(jù)條件動(dòng)態(tài)生成不同的sql語(yǔ)句
數(shù)據(jù)庫(kù)準(zhǔn)備:
CREATE TABLE `blog` (
`id` VARCHAR(50) NOT NULL COMMENT '博客id',
`title` VARCHAR(100) NOT NULL COMMENT '博客標(biāo)題',
`author` VARCHAR(30) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '創(chuàng)建時(shí)間',
`views` INT(30) NOT NULL COMMENT '瀏覽量'
)ENGINE=INNODB DEFAULT CHARSET=utf8
核心配置文件:
創(chuàng)建新的工具類:
package com.yang.utils;
import java.util.UUID;
public class IdUtils {
/**
* 返回一個(gè)隨機(jī)的string類型的id
*/
public static String getId(){
return UUID.randomUUID().toString().replace("-","");
}
}
實(shí)體類:
package com.yang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Blog {
private String id;
private String title;
private String author;
private Date createTime;
private Integer views;
}
接口:
package com.yang.dao;
import com.yang.pojo.Blog;
public interface BlogMapper {
int addBlog(Blog blog);
}
接口對(duì)應(yīng)mapper:
insert into blog values (#{id},#{title},#{author},#{createTime},#{views})
插入數(shù)據(jù):
@Test
public void insertTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
blogMapper.addBlog(new Blog(IdUtils.getId(),"Mybatis如此簡(jiǎn)單","jack",new Date(),8888));
blogMapper.addBlog(new Blog(IdUtils.getId(),"Spring如此簡(jiǎn)單","tom",new Date(),7777));
blogMapper.addBlog(new Blog(IdUtils.getId(),"SpringMVC如此簡(jiǎn)單","smith",new Date(),4444));
blogMapper.addBlog(new Blog(IdUtils.getId(),"SpringBoot如此簡(jiǎn)單","milan",new Date(),5555));
sqlSession.commit();
sqlSession.close();
}
11.1、if
使用if動(dòng)態(tài)拼接 SQL 最常見(jiàn)情景是根據(jù)條件包含 where 子句的一部分
接口:
List
mapper:
select * from blog where 1 = 1
and title=#{title}
and author=#{author}
測(cè)試:
@Test
public void queryBlogTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
HashMap
map.put("author","tom");
List
for (Blog blog : blogList) {
System.out.println(blog);
}
sqlSession.close();
}
通過(guò)傳入Map,對(duì)指定內(nèi)容進(jìn)行篩選,使用if標(biāo)簽拼接sql實(shí)現(xiàn)不同的查詢結(jié)果
11.2、where
where只會(huì)在至少一個(gè)子元素返回SQL子句的情況下才插入 “WHERE” 子句。而且,若子句的開(kāi)頭為 “AND” 或 “OR”,where元素也會(huì)將它們?nèi)コ苊饬藄ql語(yǔ)句拼接錯(cuò)誤
去除mapper中的 where 1 = 1:
select * from blog
and title=#{title}
and author=#{author}
11.3、choose、when、otherwise
當(dāng)我們只是想從多個(gè)條件中選擇一個(gè)使用。針對(duì)這種情況,MyBatis 提供了 choose 元素,它有點(diǎn)像 java中的 switch 語(yǔ)句
mapper:
select * from blog
title = #{title}
and author = #{author}
and views = #{views}
測(cè)試:
@Test
public void queryBlogTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
HashMap
map.put("title","SpringBoot如此簡(jiǎn)單");
map.put("author","tom");
map.put("views",8888);
List
for (Blog blog : blogList) {
System.out.println(blog);
}
sqlSession.close();
}
當(dāng)?shù)谝粋€(gè)條件滿足時(shí),下面的sql語(yǔ)句將不在拼接
11.4、set
set會(huì)動(dòng)態(tài)地在行首插入 SET 關(guān)鍵字,并會(huì)刪掉額外的逗號(hào)(這些逗號(hào)是在使用條件語(yǔ)句給列賦值時(shí)引入的)
接口中添加方法 :
int updateBlog(Map
mapper:
update blog
title=#{title},
author=#{author}
where id=#{id}
測(cè)試:
@Test
public void updateBlogTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
Map
map.put("title","Mybatis如此簡(jiǎn)單");
map.put("author","jack");
map.put("id","751e59e0a6934e509ab40f49d1a6a117");
blogMapper.updateBlog(map);
sqlSession.commit();
sqlSession.close();
}
使用set時(shí),當(dāng)前面的條件滿足,后面的條件不滿足時(shí),會(huì)自動(dòng)去除多余的逗號(hào),保證sql語(yǔ)句的正確
注意:當(dāng)沒(méi)有條件滿足時(shí),使用set,會(huì)導(dǎo)致sql語(yǔ)句拼接錯(cuò)誤
11.5、sql片段
把sql語(yǔ)句中的公共部分提取,方便復(fù)用
title = #{title}
and author = #{author}
and views = #{views}
select * from blog
include標(biāo)簽相當(dāng)于將sql標(biāo)簽的內(nèi)容插入到where標(biāo)簽內(nèi),當(dāng)下次有同樣需求時(shí),sql片段可以實(shí)現(xiàn)復(fù)用,建議使用時(shí),sql片段內(nèi)不包含where標(biāo)簽
11.6、foreach
可以將任何可迭代對(duì)象(如 List、Set 等)、Map 對(duì)象或者數(shù)組對(duì)象作為集合參數(shù)傳遞給 foreach。當(dāng)使用可迭代對(duì)象或者數(shù)組時(shí),index 是當(dāng)前迭代的序號(hào),item 的值是本次迭代獲取到的元素。當(dāng)使用 Map 對(duì)象(或者 Map.Entry 對(duì)象的集合)時(shí),index 是鍵,item 是值
接口:
List
mapper:
select * from blog
id=#{id}
collection是需要遍歷的集合item是集合中的每一個(gè)值open表示在開(kāi)頭拼接close表示在結(jié)尾拼接separator每一個(gè)值之間的分隔符,比如:where (item1 or item2 …)
測(cè)試:
@Test
public void queryBlogsForeachTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
Map
ArrayList
ids.add("751e59e0a6934e509ab40f49d1a6a117");
ids.add("b7e24d13123e445cbdb6ef9230496eff");
ids.add("5e6d4acc336342df9939033eb5c898c5");
// 將list集合放入map集合中
map.put("ids",ids);
List
for (Blog blog : blogList) {
System.out.println(blog);
}
sqlSession.close();
}
柚子快報(bào)邀請(qǐng)碼778899分享:Mybatis基本使用
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。