mybatis與mybatis-plus使用示例

一厘灼、mybatis-plus概念

官方文檔:https://baomidou.com/guide/

mybatis使用方式是直接在xml中通過SQL語句操作數(shù)據(jù)庫鸯屿,包括簡單的CRUD操作都必須

要寫SQL語句星立,而mybatis-plus在Mybatis基礎(chǔ)上擴(kuò)展了許多功能晴竞,對CRUD的封裝勾拉、代碼

生成器等粘姜,很好的提高基于MyBatis 的項(xiàng)目開發(fā)效率鞠苟。

二乞榨、mybatis-plus的安裝配置

Spring Boot中快速使用

1,引入pom.xml依賴

1 <!-- mybatis-plus-->

2 <dependency>

3 <groupId>com.baomidou</groupId>

4 <artifactId>mybatis-plus-boot-starter</artifactId>

5 <version>3.0.3</version>

6 </dependency>

2当娱,配置application-test.yml

1 mybatis-plus:

2 configuration:

3 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4 mapper-locations: classpath:mapping/*Mapping.xml #配置自定義sql時Mapping.xml掃描的路徑

5 type-aliases-package: com.example.demo.*.entity #配置三掃碼的實(shí)體類路徑

6 global-config:

7 db-config:

8 logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)

9 logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

10 id-type: none

3吃既,Application 配置 MapperScan 注解

1 @MapperScan("com.example.demo.*.mapper")

2 @SpringBootApplication

3 public class DemoApplication {

4 public static void main(String[] args) {

5 SpringApplication.run(DemoApplication.class, args);

6 }

7 }三、mybatis-plus的代碼生成器

AutoGenerator 是 MyBatis-Plus 的代碼生成器跨细,通過 AutoGenerator 可以快速生成

Entity鹦倚、Mapper、Mapper XML冀惭、Service震叙、Controller 等各個模塊的代碼,極大的提升

了開發(fā)效率散休。

1媒楼,引入pom.xml依賴

1 <!-- mp自動代碼生成-->

2 <dependency>

3 <groupId>com.baomidou</groupId>

4 <artifactId>mybatis-plus-generator</artifactId>

5 <version>3.0.3</version>

6 </dependency>

7 <!-- velocity 模板引擎, 默認(rèn) -->

8 <dependency>

9 <groupId>org.apache.velocity</groupId>

10 <artifactId>velocity-engine-core</artifactId>

11 <version>2.0</version>

12 </dependency>

13

14 <!-- freemarker 模板引擎 -->

15 <dependency>

16 <groupId>org.freemarker</groupId>

17 <artifactId>freemarker</artifactId>

18 <version>2.3.23</version>

19 </dependency>

20

21 <!-- beetl 模板引擎 -->

22 <dependency>

23 <groupId>com.ibeetl</groupId>

24 <artifactId>beetl</artifactId>

25 <version>2.2.5</version>

26 </dependency>

2,引入代碼生成器模板類 MysqlGenerator.java

3戚丸,配置數(shù)據(jù)源地址划址、生成路徑和表名及其他自定義屬性3.1:配置生成路徑

1 //當(dāng)前路徑

2 String projectPath = System.getProperty("user.dir");

3 //輸出路徑

4 gc.setOutputDir(projectPath + "/src/main/java");

3.2: 數(shù)據(jù)源配置

1 // 數(shù)據(jù)源配置

2 DataSourceConfig dsc = new DataSourceConfig();

3 dsc.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useJ

4 // dsc.setSchemaName("public");

5 dsc.setDriverName("com.mysql.cj.jdbc.Driver");

6 dsc.setUsername("root");

7 dsc.setPassword("123456");

8 dsc.setDbType(DbType.MYSQL); //指定數(shù)據(jù)庫的類型

9 mpg.setDataSource(dsc);

3.3:包配置

1 // 包配置

2 PackageConfig pc = new PackageConfig();

3 pc.setParent("com.example.demo.test"); //自定義包的路徑

4 //pc.setModuleName("module"); //模塊名稱 設(shè)置后,會生成com.cxyxs.test.module,里面存放之前設(shè)

5 pc.setEntity("entity");

6 pc.setMapper("mapper");

7 pc.setService("service");

8 pc.setController("controller");

9 mpg.setPackageInfo(pc);

3.4:設(shè)置要生成的表

1 // 策略配置

2 StrategyConfig strategy = new StrategyConfig();

3 strategy.setInclude("t_test"); //設(shè)置映射的表名,可以設(shè)置多個表4:運(yùn)行main方法生成代碼文件

四昏滴、mybatis-plus的使用示例(單表猴鲫,一對多,多對多谣殊,條件

構(gòu)造語句)

示例暫用三張表做演示:(t_user用戶表拂共、t_role角色表、t_user_role用戶角色表)

以t_user表為例

(1)新建一個User表對應(yīng)實(shí)體類:

使用@TableName("t_user")進(jìn)行表名注解;

使用lombok插件的@Data注解在類上, 為類提供讀寫get/set屬性, 此外還提供了

equals()姻几、hashCode()宜狐、toString() 方法;

補(bǔ)充: lombok插件使用:

1):在pom.xml添加依賴

1 <dependency>

2 <groupId>org.projectlombok</groupId>

3 <artifactId>lombok</artifactId>

4 <version>1.18.2</version>

5 </dependency>

2):添加IDE工具對Lombok的支持

IDEA中引入Lombok支持如下: 點(diǎn)擊File-- Settings設(shè)置界面,搜索安裝

Lombok插件蛇捌;實(shí)體類繼承extends Model<User>抚恒,Model已經(jīng)實(shí)現(xiàn)了序列化,不用再手動實(shí)現(xiàn)序列化;

1 /**

2 * 用戶實(shí)體類

3 * @Author fansongsong

4 */

5 @Data

6 @TableName("t_user")

7 public class User extends Model<User> {

8 /**

9 * 主鍵

10 */

11 private String id;

12 /**

13 * 用戶名

14 */

15 private String name;

16 /**

17 * 手機(jī)

18 */

19 private String mobile;

20 ...

21 /**

22 * 用戶地址

23 */24 @TableField(exist = false)

25 @JsonProperty("address_name")

26 private String addressName;

27 }

這里幾個注解需要注意,第一是@tableName("t_user"),它是指定與數(shù)據(jù)庫表的關(guān)聯(lián),這里

的注解意味著你的數(shù)據(jù)庫里應(yīng)該有一個名為user的表與之對應(yīng),并且數(shù)據(jù)表的列名應(yīng)該就是

User類的屬性络拌;

如果有需要俭驮,對于User類中有而user表中沒有的屬性需要加注解@TableField(exist =

false),表示排除User類中的屬性;

如果有需要,把實(shí)體類字段名在以JSON形式返回前端時需要把該屬性的名稱序列化為另

外一個名稱@JsonProperty("address_name")注解 混萝;

(2) 新建Dao層接口UserMapper:

dao接口即UserMapper需要繼承mybatis-plus的Basemapper<User>接口,這樣就能夠使

用封裝好的很多通用方法,

使用@Repository注明dao層遗遵,在Spring中配置掃描包地址,然后生成dao層的bean逸嘀,之

后被注入到ServiceImpl中

1

2 /**

3 * 用戶數(shù)據(jù)庫控制層接口Mapper

4 * @Author fansongsong

5 */

6 @Repository

7 public interface UserMapper extends BaseMapper<User> {

8

9 /**

10 * 根據(jù)用戶id獲取用戶角色組信息

11 * @param id 用戶id

12 * @return UserRoleVO

13 */

14 UserRoleVO getUserRole(String id);

15 }

(3)新建UserMapping.xml配置文件:使用<mapper namespace="com.example.demo.user.mapper.UserMapper">與第二

步的UserMapper接口唯一綁定

1 <?xml version="1.0" encoding="UTF-8"?>

2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/myba

3 <mapper namespace="com.example.demo.user.mapper.UserMapper">

4

5 <resultMap id="BaseResultMap" type="com.example.demo.user.entity.User">

6 <result column="id" jdbcType="VARCHAR" property="id" />

7 <result column="name" jdbcType="VARCHAR" property="name" />

8 <result column="mobile" jdbcType="VARCHAR" property="mobile" />

9 <result column="create_time" property="createTime" />

10 <result column="modify_time" property="modifyTime" />

11 <result column="deleted" property="deleted" />

12 <result column="status" property="status" />

13 </resultMap>

14

15 <!-- 通用查詢結(jié)果列 -->

16 <sql id="Base_Column_List">

17 id, name , mobile, create_time, modify_time, deleted, status

18 </sql>

19

20 </mapper>

(4)新建Service層類UserService:

繼承mybatis-plus的 IService<User>接口

1 /**

2 * 用戶服務(wù)類

3 * @author fansongsong

4 */

5 public interface IUserService extends IService<User> {

6 }

(5)新建ServiceImpl層類UserServiceImpl:UserServiceImpl類需要繼承mybatis-plus的ServiceImpl<對應(yīng)user實(shí)體Mapper, 對應(yīng)user

實(shí)體> 并實(shí)現(xiàn)mybatis-plus的IUserService接口

使用@Service注明該類為服務(wù)實(shí)現(xiàn)層

使用@Resource注解將指定Bean默認(rèn)按照ByName自動注入

使用@Override加在實(shí)現(xiàn)方法上是覆蓋(override)或者重寫(因?yàn)橐獙?shí)現(xiàn)這個接口里面

的所有方法)车要,不加編譯器也可以識別炮捧,加上增強(qiáng)代碼的可讀性

使用lombok的@Sl4j注解,進(jìn)行l(wèi)og打印日志;

1 **

2 * 用戶服務(wù)實(shí)現(xiàn)類

3 * @Author fansongsong

4 */

5 @Service

6 @Slf4j

7 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserServic

8

9 @Resource

10 UserMapper userMapper;

11

12 @Resource

13 IUserService userService;

14

15 @Resource

16 TUserRoleService userRoleService;

17

18 /**

19 * 查詢用戶角色v1(自定義sql)

20 * @param id 用戶id

21 * @return UserRoleVO

22 */

23 @Override

24 public UserRoleVO userRoleV1(String id) {

25 //自定義sql根據(jù)用戶id獲取用戶角色組信息

26 UserRoleVO result = userMapper.getUserRole(id);

27 log.info("UserRoleVO result msg:"+ result.getName());

28 return result;

29 }

30 }(6)新建Controller層類UserController:

使用@RestController注解標(biāo)識該類為控制層;

使用@RequestMapping("/user")注解標(biāo)識控制層的映射請求谅海,也就是通過它來指定控制

器可以處理哪些URL請求;

使用@Resource沈善、@Autowired注解將指定Bean默認(rèn)按照ByName自動注入

使用@GetMapping("/get_user/{id}")支持請求類型為get的請求乓搬,一般用于獲取資源請

求晴玖,值為請求路徑;

使用@PostMapping("/create")支持請求類型為post的請求千埃,一般用于向服務(wù)器提交資

源春叫,值為請求路徑;

使用@PutMapping("/update")支持請求類型為put的請求亭螟,一般用于向服務(wù)器更新資源残家,

值為請求路徑;

使用@DeleteMapping("/delete_user/{id}")支持請求類型為delete的請求脑蠕,一般用于向服

務(wù)器刪除資源,值為請求路徑;

使用@PathVariable(value = "id")注解跪削,獲取路徑參數(shù)谴仙,如

@GetMapping("/get_user/{id}")請求獲取路徑中的{id}占位符的值;

使用@RequestBody注解,將JSON形式請求參數(shù)轉(zhuǎn)化為相應(yīng)的實(shí)體類

使用@RequestParam(value = "page_no", required = false, defaultValue = "1")注解碾盐,獲

取請求體中的參數(shù);

1 /**

2 * 用戶控制層

3 * @Author fansongsong

4 */

5

6 @RestController

7 @RequestMapping("/user")

8 public class UserController {

9

10 @Resource

11 private IUserService userService;

12

13 //一對一

14 /**

15 * 根據(jù)用戶id查詢用戶信息

16 * @param id 用戶id

17 * @return ApiResponse

18 */19 @GetMapping("/get_user/{id}")

20 public ApiResponse getUser(@PathVariable(value = "id") String id) {

21 User user = userService.getUser(id);

22 return ApiResponse.success(user);

23 }

24 }

1:單表(CRUD)

1.1: 新增晃跺, UserServiceImpl.createUser()

1 userMapper.insert(user);或者

2 userService.save(user);

1.2: 修改, UserServiceImpl.updateUser()

1 userMapper.updateById(user);或者

2 userService.updateById(user);

1.3: 刪除毫玖, UserServiceImpl.deleteUser()

1 userMapper.deleteById(id);或者

2 userService.removeById(id);

注意:mybatis-plus的刪除默認(rèn)是物理刪除掀虎,如果需要邏輯刪除要進(jìn)行相關(guān)配置

1.3.1:application-test.yml配置,指定刪除的value設(shè)為1付枫,恢復(fù)的設(shè)為0

1 mybatis-plus:

2 global-config:

3 db-config:

4 logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)

5 logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

1.3.2:在mybatis-plus-3.1.1版本之前需要在自己寫的配置類中配置烹玉,后續(xù)版本直接跳

過,spring已經(jīng)配好了

1 @Configuration2 public class MyConfig {

3 @Bean

4 public ISqlInjector SqlInjector(){

5 return new LogicSqlInjector();

6 }

7 }

1.3.3:先在數(shù)據(jù)庫加deleted字段阐滩,對應(yīng)的實(shí)體類deleted字段上加@TableLogic 注解標(biāo)

識(對應(yīng)字段類型推薦使用 Integer,Boolean,LocalDateTime)二打,這就是告訴spring,我

要把這字段設(shè)為刪除標(biāo)志

1 /**

2 * 是否刪除(0:未刪,1:已刪)

3 */

4 @TableLogic//邏輯刪除

5 private Integer deleted;

1.4:查詢

1.4.1: 單數(shù)據(jù)查詢掂榔, UserServiceImpl.getUser()

1 // 一继效,Service提供的CRUD

2 // 1,根據(jù) ID 查詢

3 User user1 = userService.getById(id);

4

5 // 2装获,根據(jù) Wrapper瑞信,查詢一條記錄。結(jié)果集穴豫,如果是多個會拋出異常凡简,隨機(jī)取一條加上限制條件 wrapper.

6 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

7 userQueryWrapper.lambda().eq(User::getId,id);

8 User user2 = userService.getOne(userQueryWrapper);

9

10 // 3,根據(jù) Wrapper,查詢一條記錄,throwEx(boolean),有多個 result 是否拋出異常

11 User user3 = userService.getOne(userQueryWrapper,false);

12

13 // 4秤涩,根據(jù) Wrapper翁逞,查詢一條記錄,返回Map<String,Object>

14 Map<String,Object> user4 = userService.getMap(userQueryWrapper);

15

16 // 二,Mapper提供的CRUD

17

18 // 1溉仑,根據(jù) entity 條件,查詢一條記錄19 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

20 queryWrapper.lambda().eq(User::getId,id);

21 queryWrapper.lambda().eq(User::getDeleted, 0);

22 User user6 = userMapper.selectOne(queryWrapper);

23 // 2状植,根據(jù) ID 查詢

24 User user7 = userMapper.selectById(id);

1.4.2: 列表數(shù)據(jù)查詢浊竟,UserServiceImpl.getListUser()

1 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

2 List<User> result1 = userService.list(queryWrapper);

3 List<User> result2 = userMapper.selectList(queryWrapper);

2: 一對多查詢

2.1: 使用自定義sql, UserServiceImpl.getUserRoleV1()

2.2: 使用mybatis-plus單表查詢數(shù)據(jù)組裝津畸,UserServiceImpl.getUserRoleV2()

3. 多對多查詢

3.1: 使用自定義sql振定,UserServiceImpl.getListUserRoleV2()

3.2: 使用mybatis-plus單表查詢數(shù)據(jù)組裝, UserServiceImpl.getListUserRoleV1()

4肉拓,分頁插件PageHelper

官方文檔:https://pagehelper.github.io/docs/howtouse/

配置:引入分頁插件

在 pom.xml 中添加如下依賴:

1 <!-- 分頁插件 -->

2 <dependency>

3 <groupId>com.github.pagehelper</groupId>

4 <artifactId>pagehelper</artifactId>

5 <version>5.1.0</version>

6 </dependency>

如何在代碼中使用

在實(shí)現(xiàn)類使用PageHelper.startPage(pageNo, pageSize);進(jìn)行分頁

1 //每頁的大小為pageSize后频,查詢第pageNo頁的結(jié)果

2 PageHelper.startPage(pageNo, pageSize);3 //執(zhí)行查詢語句

4 List<User> result = userService.list(queryWrapper);

在Controller使用new PageInfo<>(userList)進(jìn)行包裝返回前端

1 /**

2 * 根據(jù)篩選條件查詢用戶列表

3 * @param pageNo 當(dāng)前第幾頁

4 * @param pageSize 每頁顯示條數(shù)

5 * @param mobile 手機(jī)號

6 * @param name 用戶名

7 * @return List<User>

8 */

9 @GetMapping("/list_user")

10 public ApiResponse listUser(

11 @RequestParam(value = "page_no", required = false, defaultValue = "1") int pageNo

12 @RequestParam(value = "page_size", required = false, defaultValue = "5") int page

13 @RequestParam(value = "mobile", required = false) String mobile,

14 @RequestParam(value = "name", required = false) String name) {

15 List<User> userList = userService.listUser(pageNo,pageSize,mobile,name);

16 return ApiResponse.success(new PageInfo<>(userList));

17 }

五、MyBatis XML映射文件

學(xué)習(xí)文檔:https://www.w3cschool.cn/mybatis/f4uw1ilx.html

MyBatis 的真正強(qiáng)大在于它的映射語句暖途,也是它的魔力所在卑惜。由于它的異常強(qiáng)大,映射器的 XML 文件

就顯得相對簡單驻售。如果拿它跟具有相同功能的 JDBC 代碼進(jìn)行對比露久,你會立即發(fā)現(xiàn)省掉了將近 95% 的

代碼。MyBatis 就是針對 SQL 構(gòu)建的欺栗,并且比普通的方法做的更好毫痕。

1 resultMap – 是最復(fù)雜也是最強(qiáng)大的元素,用來描述如何從數(shù)據(jù)庫結(jié)果集中來加載對象迟几。

2 sql – 可被其他語句引用的可重用語句塊消请。

3 insert – 映射插入語句

4 update – 映射更新語句

5 delete – 映射刪除語句

6 select – 映射查詢語句select 查詢語句是 MyBatis 中最常用的元素之一:

1 <select id="selectPerson" parameterType="int" resultType="hashmap">

2 SELECT * FROM PERSON WHERE ID = #{id}

3 </select>

Select 常用屬性描述:

1,XML映射文件和Mapper.java文件的綁定是通過xml中的

<mapper namespace = "Mapper類的完全限定名">

1 <mapper namespace="com.example.demo.user.mapper.UserMapper">

屬性

描述

id

在命名空間中唯一的標(biāo)識符类腮,可以被用來引用這條語句臊泰。

parameterTyp

e

將會傳入這條語句的參數(shù)類的完全限定名或別名。這個屬性是可選的蚜枢,因?yàn)?MyBatis 可以通過 Typ

默認(rèn)值為 unset因宇。

resultType

從這條語句中返回的期望類型的類的完全限定名或別名。注意如果是集合情形祟偷,那應(yīng)該是集合可以包

resultType 或 resultMap察滑,但不能同時使用。

resultMap

外部 resultMap 的命名引用修肠。結(jié)果集的映射是 MyBatis 最強(qiáng)大的特性贺辰,對其有一個很好的理解的話

使用 resultMap 或 resultType,但不能同時使用。2. xml中sql通過標(biāo)簽的屬性id="getUserRole"和映射的Mapper.java進(jìn)行唯一綁定

insert饲化,update 和 delete 語句的示例:

1

2 <insert id="insertAuthor">

3 insert into Author (id,username,password,email,bio)

4 values (#{id},#{username},#{password},#{email},#{bio})

5 </insert>

6

7 <update id="updateAuthor">

8 update Author set

9 username = #{username},10 password = #{password},

11 email = #{email},

12 bio = #{bio}

13 where id = #{id}

14 </update>

15

16 <delete id="deleteAuthor">

17 delete from Author where id = #{id}

18 </delete>

19

六莽鸭,MyBatis 動態(tài)SQL

使用MyBatis動態(tài)SQL進(jìn)行不同條件拼接 SQL 語句,拼接的時候要確保不能忘了必要的空

格吃靠,還要注意省掉列名列表最后的逗號等硫眨。

常用的動態(tài) SQL 元素:

if

choose (when, otherwise)

trim (where, set)

foreach

1,if

動態(tài) SQL 通常要做的事情是有條件地包含 where 子句的一部分巢块。比如:

1 <select id="getUserRoleList" resultMap="roleList" >

2 select

3 <include refid="Get_User_Role_List"/>

4 from t_user tu

5 left join t_user_role tur on tur.user_id = tu.id

6 left join t_role tr on tr.id = tur.role_id

7 <where>

8 tu.deleted = 0

9 <if test="roleId != null and roleId != ''">

10 and tr.id = #{roleId}11 </if>

12 <if test="mobile != null and mobile != ''">

13 and tu.mobile = #{mobile}

14 </if>

15 </where>

16 </select>

動態(tài)的通過"roleId"和"mobile"兩個條件進(jìn)行數(shù)據(jù)篩選礁阁,那個參數(shù)不為空就執(zhí)行那個條件語句

2,choose (when, otherwise)

有些時候族奢,我們不想用到所有的條件語句姥闭,而只想從中擇其一二。針對這種情況越走,MyBatis

提供了 choose 元素棚品,例如這次變?yōu)樘峁┝?title"就按"title"查找,提供了"author"就

按"author"查找廊敌,若兩者都沒有提供铜跑,就返回所有符合條件的結(jié)果

1 <select id="findActiveBlogLike"

2 resultType="Blog">

3 SELECT * FROM BLOG WHERE state = ‘ACTIVE’

4 <choose>

5 <when test="title != null">

6 AND title like #{title}

7 </when>

8 <when test="author != null and author.name != null">

9 AND author_name like #{author.name}

10 </when>

11 <otherwise>

12 AND featured = 1

13 </otherwise>

14 </choose>

15 </select>

4,trim (where, set)

一般常用在update 語句骡澈,set 元素可以被用于動態(tài)包含需要更新的列疼进,而舍去其他的。比

如:

1 <update id="updateAuthorIfNecessary">

2 update Author3 <set>

4 <if test="username != null">username=#{username},</if>

5 <if test="password != null">password=#{password},</if>

6 <if test="email != null">email=#{email},</if>

7 <if test="bio != null">bio=#{bio}</if>

8 </set>

9 where id=#{id}

10 </update>

5秧廉,foreach

動態(tài) SQL 的另外一個常用的必要操作是需要對一個集合進(jìn)行遍歷伞广,通常是在構(gòu)建 IN 條件語句的時候。比

如:

1 <select id="selectPostIn" resultType="domain.blog.Post">

2 SELECT *

3 FROM POST P

4 WHERE ID in

5 <foreach item="item" index="index" collection="list"

6 open="(" separator="," close=")">

7 #{item}

8 </foreach>

9 </select>

同時也可以使用foreach來進(jìn)行批量插入數(shù)據(jù)(注意:雖然Mybatis 對動態(tài)語句沒有數(shù)量上

的限制疼电,由于Mysql 對語句的長度有限制嚼锄,默認(rèn)是 4M,如果要進(jìn)行大數(shù)據(jù)量批處理時蔽豺,

盡量先把數(shù)據(jù)進(jìn)行l(wèi)ist切分区丑,在進(jìn)行批量插入操作)

代碼示例:UserServiceImpl.createBatchSaveUser()

1 <!-- 批量保存sql -->

2 <insert id="batchSave" parameterType="java.util.List" >

3 INSERT INTO t_user (

4 `id`,

5 `name`,

6 `mobile`,

7 `create_time`,

8 `modify_time`,

9 `deleted`,

10 `status`,11 `age`

12 )

13 VALUES

14 <foreach collection="list" index="index" item="item" separator=",">

15 (

16 #{item.id},

17 #{item.name},

18 #{item.mobile},

19 #{item.createTime},

20 #{item.modifyTime},

21 #{item.deleted},

22 #{item.status},

23 #{item.age}

24 )

25 </foreach>

26 </insert>

對于批量數(shù)據(jù)操作mybatis-plus也有相關(guān)支持

1 userService.saveBatch(userList);

2 userService.saveOrUpdateBatch(userList);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市修陡,隨后出現(xiàn)的幾起案子沧侥,更是在濱河造成了極大的恐慌,老刑警劉巖魄鸦,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宴杀,死亡現(xiàn)場離奇詭異,居然都是意外死亡拾因,警方通過查閱死者的電腦和手機(jī)旺罢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門旷余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扁达,你說我怎么就攤上這事正卧。” “怎么了跪解?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵炉旷,是天一觀的道長。 經(jīng)常有香客問我叉讥,道長窘行,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任节吮,我火速辦了婚禮,結(jié)果婚禮上判耕,老公的妹妹穿的比我還像新娘透绩。我一直安慰自己,他們只是感情好壁熄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布帚豪。 她就那樣靜靜地躺著,像睡著了一般草丧。 火紅的嫁衣襯著肌膚如雪狸臣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天昌执,我揣著相機(jī)與錄音烛亦,去河邊找鬼。 笑死懂拾,一個胖子當(dāng)著我的面吹牛煤禽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岖赋,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼檬果,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唐断?” 一聲冷哼從身側(cè)響起选脊,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脸甘,沒想到半個月后恳啥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丹诀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年角寸,在試婚紗的時候發(fā)現(xiàn)自己被綠了菩混。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡扁藕,死狀恐怖沮峡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亿柑,我是刑警寧澤邢疙,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站望薄,受9級特大地震影響疟游,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痕支,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一颁虐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卧须,春花似錦另绩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椭员,卻和暖如春车海,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隘击。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工侍芝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埋同。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓竭贩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莺禁。 傳聞我的和親對象是個殘疾皇子留量,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容