MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具包,只做增强不做改变,为简化开发工作、提高生产效率而生。

一、Service CRUD 接口


【说明】:【1】通用 Service CRUD 封装 MP提供的 IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页,前缀命名方式区分 Mapper层避免混淆。
【2】采用泛型实现重复利用,泛型 T为任意实体对象。
【3】建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类[IService]
【4】对象 Wrapper 为条件构造器,可以使用 Condition代替 Wrapper。Wrapper 使用时需要 new,Condition通过静态方法创建。

Save 方法


【1】插入一条记录(选择字段,策略插入)

boolean save(T entity);

【2】批量插入

boolean saveBatch(Collection<T> entityList);

【3】批量插入,batchSize表时插入批次数量

boolean saveBatch(Collection<T> entityList, int batchSize);

【SaveOrUpdate】


【1】TableId 主键如果在表中存在则更新记录,否则插入一条新记录

boolean saveOrUpdate(T entity);

【2】根据 updateWrapper尝试更新,否继续执行 saveOrUpdate(T)方法。Wrapper 的使用后续单独说明。

boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);

【3】批量修改插入or修改

boolean saveOrUpdateBatch(Collection<T> entityList);

【4】 批量修改插入or修改,同时使用 batchSize限制批次插入的数量

boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

【Remove】


【1】根据 entity 条件,删除记录

boolean remove(Wrapper<T> queryWrapper);

【2】根据 ID 删除

boolean removeById(Serializable id);

【3】根据 columnMap 条件,删除记录。传入的是表字段[不是类对象] map 对象

boolean removeByMap(Map<String, Object> columnMap);

【4】 删除(根据ID 批量删除)

boolean removeByIds(Collection<? extends Serializable> idList);

【Update】


【1】根据 UpdateWrapper 条件,更新记录需要设置 sqlset

boolean update(Wrapper<T> updateWrapper);

【2】根据 whereEntity 条件,更新记录

boolean update(T entity, Wrapper<T> updateWrapper);

【3】 根据 ID 选择修改

boolean updateById(T entity);

【4】 根据ID 批量更新

boolean updateBatchById(Collection<T> entityList);

【4】 根据ID 批量更新,batchSize 表示更新批次数量

boolean updateBatchById(Collection<T> entityList, int batchSize);

【Get】


【1】根据 ID 查询

T getById(Serializable id);

【2】根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

T getOne(Wrapper<T> queryWrapper);

【3】根据 Wrapper,查询一条记录,throwEx 有多个值时,是否抛错

T getOne(Wrapper<T> queryWrapper, boolean throwEx);

【4】 根据 Wrapper,查询一条记录,Wrapper<T> 实体对象封装操作类 QueryWrapper

Map<String, Object> getMap(Wrapper<T> queryWrapper);

【5】 根据 Wrapper,查询一条记录,Function 表示转化函数

<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

【List】


【1】查询所有

List<T> list();

【2】查询列表

List<T> list(Wrapper<T> queryWrapper);

【3】查询(根据ID 批量查询)

Collection<T> listByIds(Collection<? extends Serializable> idList);

【4】查询(根据 columnMap 条件)

Collection<T> listByMap(Map<String, Object> columnMap);

【5】查询所有列表

List<Map<String, Object>> listMaps();

【6】查询列表

List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);

【7】查询全部记录

List<Object> listObjs();

【8】查询全部记录

<V> List<V> listObjs(Function<? super Object, V> mapper);

【9】根据 Wrapper 条件,查询全部记录

List<Object> listObjs(Wrapper<T> queryWrapper);

【10】根据 Wrapper 条件,查询全部记录

<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

【Page】


【1】无条件翻页查询

IPage<T> page(IPage<T> page);

【2】翻页查询

IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);

【3】无条件翻页查询

IPage<Map<String, Object>> pageMaps(IPage<T> page);

【4】翻页查询

IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

【Count】


【1】查询总记录数

int count();

【2】根据 Wrapper 条件,查询总记录数

int count(Wrapper<T> queryWrapper);

Chain-query】


【1】链式查询普通

QueryChainWrapper<T> query();

【2】链式查询 lambda 式。注意:不支持 Kotlin

LambdaQueryChainWrapper<T> lambdaQuery();

【3】示例:

query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();

Chain-update】


【1】链式更改普通

UpdateChainWrapper<T> update();

【2】链式更改 lambda 式。注意:不支持 Kotlin

LambdaUpdateChainWrapper<T> lambdaUpdate();

【3】示例:

1 update().eq("column", value).remove();
2 lambdaUpdate().eq(Entity::getId, value).update(entity);

二、Mapper CRUD 接口


说明【1】通用 CRUD 封装 BaseMapper接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器;
【2】泛型 T 为任意实体对象;
【3】参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键;
对象 Wrapper 为 条件构造器

【Select】


【1】根据 ID 查询

T selectById(Serializable id);

【2】根据 entity 条件,查询一条记录

T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【3】查询(根据ID 批量查询)

List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

【4】根据 entity 条件,查询全部记录

List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【5】查询(根据 columnMap 条件)

List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

【6】根据 Wrapper 条件,查询全部记录

List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【7】根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值

List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【8】根据 entity 条件,查询全部记录(并翻页)

IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【9】根据 Wrapper 条件,查询全部记录(并翻页)

IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【10】根据 Wrapper 条件,查询总记录数

Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【Insert】


【1】插入一条记录,entity表示实体对象;

int insert(T entity);

【Delete】


【1】根据 entity 条件,删除记录

int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);

【2】删除(根据ID 批量删除)

int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

【3】根据 ID 删除

int deleteById(Serializable id);

【4】根据 columnMap 条件,删除记录

int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

【Update】


【1】根据 whereEntity 条件,更新记录

int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

【2】根据 ID 修改

int updateById(@Param(Constants.ENTITY) T entity);

【Select】


【1】根据 ID 查询

T selectById(Serializable id);

【2】根据 entity 条件,查询一条记录

T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【3】查询(根据ID 批量查询)

List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

【4】根据 entity 条件,查询全部记录

List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【5】查询(根据 columnMap 条件)

List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

【6】根据 Wrapper 条件,查询全部记录

List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【7】根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值

List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【8】根据 entity 条件,查询全部记录(并翻页)

IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【9】根据 Wrapper 条件,查询全部记录(并翻页)

IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

【10】根据 Wrapper 条件,查询总记录数

Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

类型 参数名 描述
Serializable id 主键ID
Wrapper<T> queryWrapper 实体对象封装操作类(可以为 null)
Collection<? extends Serializable> idList 主键ID列表(不能为 null 以及 empty)
Map<String, Object> columnMap 表字段 map 对象
IPage<T> page 分页查询条件(可以为 RowBounds.DEFAULT)

三、条件构造器


【1】以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中
【2】以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true
【3】以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)
【4】以下方法在入参中出现的R为泛型,在普通wrapper中是String,在LambdaWrapper中是函数(例:Entity::getId,Entity为实体类,getId为字段id的getMethod)
【5】以下方法入参中的R column均表示数据库字段,当R具体类型为String时则为数据库字段名(字段名是数据库关键字的自己用转义符包裹!)!而不是实体类数据字段名,另当R具体类型为SFunction时项目runtime不支持eclipse自家的编译器!
【6】以下举例均为使用普通wrapper,入参为Map和List的均以json形式表现!
【7】使用中如果入参的Map或者List为空,则不会加入最后生成的sql中!

警告:不支持以及不赞成在 RPC 调用中把 Wrapper 进行传输:
①、wrapper 很重
②、传输 wrapper 可以类比为你的 controller 用 map 接收值(开发一时爽,维护火葬场)
③、正确的 RPC 调用姿势是写一个 DTO 进行传输,被调用方再根据 DTO 执行相应的操作
④、我们拒绝接受任何关于 RPC 传输 Wrapper 报错相关的 issue 甚至 pr

【AbstractWrapper】


说明:QueryWrapper(LambdaQueryWrapper) UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件,entity 属性也用于生成 sql 的 where 条件。注意:entity 生成的 where 条件与使用各个 api 生成的 where 条件没有任何关联行为

allEq】


个别参数说明:
【1】params:key为数据库字段名,value为字段值;
【2】null2IsNull:为true则在 map的 value为 null时调用 isNull 方法,为false时则忽略 value为 null的;

1 allEq(Map<R, V> params)
2 allEq(Map<R, V> params, boolean null2IsNull)
3 allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
4
5 例1: allEq({id:1,name:"老王",age:null})--->id = 1 and name = '老王' and age is null
6 例2: allEq({id:1,name:"老王",age:null}, false)--->id = 1 and name = '老王'

个别参数说明:
【1】filter:过滤函数,是否允许字段传入比对条件中
【2】params 与 null2IsNull:同上

1 allEq(BiPredicate<R, V> filter, Map<R, V> params)
2 allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
3 allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
4
5 例1: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null})--->name = '老王' and age is null
6 例2: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null}, false)--->name = '老王'

【eq】

1 //等于 =
2 eq(R column, Object val)
3 eq(boolean condition, R column, Object val)
4
5 例: eq("name", "老王")--->name = '老王'

【ne】

1 //不等于 <>
2 ne(R column, Object val)
3 ne(boolean condition, R column, Object val)
4
5 例: ne("name", "老王")--->name <> '老王'

【gt】

1 //大于 >
2 gt(R column, Object val)
3 gt(boolean condition, R column, Object val)
4
5 例: gt("age", 18)--->age > 18

【ge】

1 //大于等于 >=
2 ge(R column, Object val)
3 ge(boolean condition, R column, Object val)
4
5 例: ge("age", 18)--->age >= 18

【lt】

1 //小于 <
2 lt(R column, Object val)
3 lt(boolean condition, R column, Object val)
4
5 例: lt("age", 18)--->age < 18

【le】

1 //小于等于 <=
2 le(R column, Object val)
3 le(boolean condition, R column, Object val)
4
5 例: le("age", 18)--->age <= 18

【between】

1 //BETWEEN 值1 AND 值2
2 between(R column, Object val1, Object val2)
3 between(boolean condition, R column, Object val1, Object val2)
4
5 例: between("age", 18, 30)--->age between 18 and 30

【notBetween】

1 //NOT BETWEEN 值1 AND 值2
2 notBetween(R column, Object val1, Object val2)
3 notBetween(boolean condition, R column, Object val1, Object val2)
4
5 例: notBetween("age", 18, 30)--->age not between 18 and 30

【like】

1 //LIKE '%值%'
2 like(R column, Object val)
3 like(boolean condition, R column, Object val)
4
5 例: like("name", "王")--->name like '%王%'

【notLike】

1 //NOT LIKE '%值%'
2 notLike(R column, Object val)
3 notLike(boolean condition, R column, Object val)
4
5 例: notLike("name", "王")--->name not like '%王%'

【likeLeft】

1 //LIKE '%值'
2 likeLeft(R column, Object val)
3 likeLeft(boolean condition, R column, Object val)
4
5 例: likeLeft("name", "王")--->name like '%王'

【likeRight】

1 //LIKE '值%'
2 likeRight(R column, Object val)
3 likeRight(boolean condition, R column, Object val)
4
5 例: likeRight("name", "王")--->name like '王%'

【isNull】

1 //字段 IS NULL
2 isNull(R column)
3 isNull(boolean condition, R column)
4
5 例: isNull("name")--->name is null

【isNotNull】

1 //字段 IS NOT NULL
2 isNotNull(R column)
3 isNotNull(boolean condition, R column)
4
5 例: isNotNull("name")--->name is not null

【in】

 1 //字段 IN (value.get(0), value.get(1), ...)
2 in(R column, Collection<?> value)
3 in(boolean condition, R column, Collection<?> value)
4
5 例: in("age",{1,2,3})--->age in (1,2,3)
6
7 //字段 IN (v0, v1, ...)
8 in(R column, Object... values)
9 in(boolean condition, R column, Object... values)
10
11 例: in("age", 1, 2, 3)--->age in (1,2,3)

【notIn】

 1 //字段 IN (value.get(0), value.get(1), ...)
2 notIn(R column, Collection<?> value)
3 notIn(boolean condition, R column, Collection<?> value)
4
5 例: notIn("age",{1,2,3})--->age not in (1,2,3)
6
7 //字段 NOT IN (v0, v1, ...)
8 notIn(R column, Object... values)
9 notIn(boolean condition, R column, Object... values)
10
11 例: notIn("age", 1, 2, 3)--->age not in (1,2,3)

【inSql】

1 //字段 IN ( sql语句 )
2 where id < 3)
3 inSql(R column, String inValue)
4 inSql(boolean condition, R column, String inValue)
5
6 例: inSql("age", "1,2,3,4,5,6")--->age in (1,2,3,4,5,6)
7 例: inSql("id", "select id from table where id < 3")--->id in (select id from table

【notInSql】

1 //字段 NOT IN ( sql语句 )
2 notInSql(R column, String inValue)
3 notInSql(boolean condition, R column, String inValue)
4
5 例: notInSql("age", "1,2,3,4,5,6")--->age not in (1,2,3,4,5,6)
6 例: notInSql("id", "select id from table where id < 3")--->id not in (select id from table where id < 3)

【groupBy】

1 //分组:GROUP BY 字段, ...
2 groupBy(R... columns)
3 groupBy(boolean condition, R... columns)
4
5 例: groupBy("id", "name")--->group by id,name

【orderByAsc】

1 //排序:ORDER BY 字段, ... ASC
2 orderByAsc(R... columns)
3 orderByAsc(boolean condition, R... columns)
4
5 例: orderByAsc("id", "name")--->order by id ASC,name ASC

【orderByDesc】

1 //排序:ORDER BY 字段, ... DESC
2 orderByDesc(R... columns)
3 orderByDesc(boolean condition, R... columns)
4
5 例: orderByDesc("id", "name")--->order by id DESC,name DESC

【orderBy】

1 //排序:ORDER BY 字段, ...
2 orderBy(boolean condition, boolean isAsc, R... columns)
3
4 例: orderBy(true, true, "id", "name")--->order by id ASC,name ASC

【having】

1 //HAVING ( sql语句 )
2 having(String sqlHaving, Object... params)
3 having(boolean condition, String sqlHaving, Object... params)
4
5 例: having("sum(age) > 10")--->having sum(age) > 10
6 例: having("sum(age) > {0}", 11)--->having sum(age) > 11

【or】

1 //拼接 OR
2 or()
3 or(boolean condition)
4
5 例: eq("id",1).or().eq("name","老王")--->id = 1 or name = '老王'

注意事项:主动调用 or表示紧接着下一个方法不是用 and连接!(不调用or则默认为使用and连接)

1 //OR 嵌套
2 or(Consumer<Param> consumer)
3 or(boolean condition, Consumer<Param> consumer)
4
5 例: or(i -> i.eq("name", "李白").ne("status", "活着"))--->or (name = '李白' and status <> '活着')

【and】

1 //AND 嵌套
2 and(Consumer<Param> consumer)
3 and(boolean condition, Consumer<Param> consumer)
4
5 例: and(i -> i.eq("name", "李白").ne("status", "活着"))--->and (name = '李白' and status <> '活着')

【nested】

1 //正常嵌套 不带 AND 或者 OR
2 nested(Consumer<Param> consumer)
3 nested(boolean condition, Consumer<Param> consumer)
4
5 例: nested(i -> i.eq("name", "李白").ne("status", "活着"))--->(name = '李白' and status <> '活着')

【apply】

1 //拼接 sql
2 apply(String applySql, Object... params)
3 apply(boolean condition, String applySql, Object... params)
4
5 例: apply("id = 1")--->id = 1
6 例: apply("date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
7 例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08")--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")

注意事项:该方法可用于数据库函数 动态入参的 params对应前面 applySql内部的{index}部分。这样是不会有 sql注入风险的,反之会有。

【last】

1 //无视优化规则直接拼接到 sql 的最后
2 last(String lastSql)
3 last(boolean condition, String lastSql)
4
5 例: last("limit 1")

注意事项:只能调用一次,多次调用以最后一次为准。有 sql注入的风险,请谨慎使用

【exists】

1 //拼接 EXISTS ( sql语句 )
2 exists(String existsSql)
3 exists(boolean condition, String existsSql)
4
5 例: exists("select id from table where age = 1")--->exists (select id from table where age = 1)

【notExists】

1 //拼接 NOT EXISTS ( sql语句 )
2 notExists(String notExistsSql)
3 notExists(boolean condition, String notExistsSql)
4
5 例: notExists("select id from table where age = 1")--->not exists (select id from table where age = 1)

【QueryWrapper】

说明:继承自 AbstractWrapper,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper,可以通过 new QueryWrapper().lambda() 方法获取。

【select】

 1 //设置查询字段
2 select(String... sqlSelect)
3 select(Predicate<TableFieldInfo> predicate)
4 select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)
5
6 //案例
7 //TestVO 查询的表对应的实体类
8 QueryWrapper<TestVO> wrapper = new QueryWrapper<>();
9 //data_type、value_code、column_a、column_b 均为数据库中的字段名,不是实体对象的属性
10 QueryWrapper<TestVO> queryWrapper = moduleInfoVOQueryWrapper.select("data_type", "value_code", "column_a", "column_b");
11 //我们将获取的值封装到 map 中传递
12 List<Map<String, Object>> maps = moduleInfoDAO.selectMaps(queryWrapper);

说明:过滤查询字段(主键除外),入参不包含 class 的调用前需要 wrapper内的 entity属性有值。这两类方法重复调用以最后一次为准

1 例: select("id", "name", "age")
2 例: select(i -> i.getProperty().startsWith("test"))

【UpdateWrapper】

说明:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper,可以通过 new UpdateWrapper().lambda() 方法获取。

【set】

1 //SQL SET 字段
2 set(String column, Object val)
3 set(boolean condition, String column, Object val)
4
5 例: set("name", "老李头")
6 例: set("name", "")--->数据库字段值变为空字符串
7 例: set("name", null)--->数据库字段值变为null

【setSql】

1 //设置 SET 部分 SQL
2 setSql(String sql)
3
4 例: setSql("name = '老李头'")

【lambda】

获取 LambdaWrapper,在 QueryWrapper中是获取 LambdaQueryWrapper在 UpdateWrapper中是获取 LambdaUpdateWrapper

MyBatisPlus 实战字典的更多相关文章

  1. Mybatis-Plus 实战完整学习笔记(一)------简介

    第一章    简介      1. 什么是MybatisPlus                MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只 ...

  2. Mybatis-Plus 实战完整学习笔记(九)------条件构造器核心用法大全(上)

    一.Mybatisplus通用(公共方法)CRUD,一共17种(3.0.3版),2.3系列也是这么多,这个新版本一定程度进行了改造和删减. 二.构造器UML图(3.0.3)-----实体包装器,主要用 ...

  3. Mybatis-Plus 实战完整学习笔记(四)------全局参数配置

    一.全局配置设置 (1)全局配置Id自动生成 <!--定义mybatisplus全局配置--> <bean id="globalConfig" class=&qu ...

  4. Mybatis-Plus 实战完整学习笔记(三)------导入MybatisPlus环境

    1.dao层接口引入 package com.baidu.www.mplus.mapper; import com.baidu.www.mplus.bean.Employee; import com. ...

  5. Mybatis-Plus 实战完整学习笔记(二)------环境搭建

     第二章    使用实例   1.搭建测试数据库 -- 创建库 CREATE DATABASE mp; -- 使用库 USE mp; -- 创建表 CREATE TABLE tbl_employee( ...

  6. Mybatis-Plus 实战完整学习笔记(十一)------条件构造器删除,修改,conditon

    1.修改功能--其他过滤方式跟select一样 /** * 修改条件构造器 * @throws SQLException */ @Test public void selectUpdate() thr ...

  7. Mybatis-Plus 实战完整学习笔记(十)------条件构造器核心用法大全(下)

    31.升序orderByAsc 31.升序orderByAsc List<Employee> employeeList = employeeMapper.selectList(new Qu ...

  8. Mybatis-Plus 实战完整学习笔记(八)------delete测试

    1.根据ID删除一个员工deleteById /** * 删除客户 * * @throws SQLException */ @Test public void deletedMethod() thro ...

  9. Mybatis-Plus 实战完整学习笔记(七)------select测试二

    1.查询selectOne  (3.0.3版) @Test public void selectMethod() throws SQLException { // 根据ID获取一个对象的数据 Empl ...

  10. Mybatis-Plus 实战完整学习笔记(六)------select测试一

    查询方法(3.0.3) 1.查询一个员工的数据 @Test public void selectMethod() throws SQLException { // 根据ID获取一个对象的数据 Empl ...

随机推荐

  1. 什么是压测,为什么要进行压力测试?Jmeter工具的使用

    1.背景介绍 什么是压测? 压力测试是通过不断向被测系统施加"压力",测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在,也就是我们可 ...

  2. idea中怎么安装使用翻译插件?

    1.打开File->Setting 2.plugins->Browse repositories 3.输入"translate",选择排序"Downloads ...

  3. jmeter将接口返回写入log

    1.添加BeanShell 后置处理程序 2. //拿到响应值 String json = prev.getResponseDataAsString(); log.info("Value为: ...

  4. CSS手册

    3. CSS背景 1. 颜色 body {background-color:#b0c4de;} 十六进制 - 如:"#ff0000" RGB - 如:"rgb(255,0 ...

  5. python音乐分类--knn

    1 #利用knn算法分类音乐,将音乐进行情绪分类 2 #将音乐分为兴奋的(excited), 愤怒的(angry),悲伤的(sorrowful),轻松的(relaxed) 3 4 #可分离因素 5 # ...

  6. 监控室NTP/GPS同步时钟解决方案

    深圳市立显电子有限公司,专业LED时钟生产厂家!--------[点击进入]  车站.机场.学校等场所监控室布置要求:   1.宜选择建筑物中环境噪声较小的声场所.如车站票务中心后台.机场保安值班室. ...

  7. torch直接更改参数

    使用model.layer1.weight.data.copy_(w1) 其中model是自定义的参数名字,layer1是某个具体的层,使用某个具体的w1来修改

  8. json中有List集合时,转换List集合内元素的时间格式

    1 public class User implements Serializable { 2 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ...

  9. 解决SVN不显示绿色小对勾

    https://blog.csdn.net/qq_34338527/article/details/108534652

  10. 如何跳出forEach循环

    for(let ii in this.listData){ console.log("提交前数据",ii) try{ this.listData[ii].forEach((el,i ...