mybaits-plus总结
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.enums.SqlLike;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.ebc.numen.Application;
import com.ebc.numen.entity.SysUser;
import com.ebc.numen.service.SysUserService;
/**
* 单表操作例子
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@Slf4j
public class TestSingle {
@Resource
private SysUserService sysUserService;
/**
* 添加
* <pre>
* 1.不需要手工设置id
* 2.不需要手工设置version、create_datetime、update_datetime(因为已自动填充)
* 3.delete不填,数据库允许空
* </pre>
*/
@Test
public void insert() {
for (int i = 0; i < 30; i++) {
SysUser user = new SysUser();
user.setOrgId(1L);
user.setAge(10);
user.setName("遥远"+i);
user.setScope(BigDecimal.valueOf(1.23));
boolean isSucc = sysUserService.insert(user);
log.info("{},主键id:{}",isSucc,user.getId());
}
}
/**
* 修改~不获取对象
* <pre>
* 1.没设置version,导致数据库version值不变,乐观锁没生效。
* 如果知道当前version值,也可以手工设置.
* 2.update_datetime自动填充
* </pre>
*/
@Test
public void update1() {
SysUser user = new SysUser();
user.setId(1024613506376708097L);
user.setName("www");
//user.setVersion(7);
boolean isSucc = sysUserService.updateById(user);
log.info("{}",isSucc);
}
/**
* 修改~获取对象
* <pre>
* 乐观锁生效。而且不需要自行+1,数据库当前值即可。
* </pre>
*/
@Test
public void update2() {
SysUser user = sysUserService.selectById(1024613506376708097L);
user.setName("eee"); boolean isSucc = sysUserService.updateById(user);
if (isSucc) {
log.info("修改成功");
} else {
log.info("修改失败,由于乐观锁,可能已被别人修改过了。如果想在修改,请重新获取该条记录后修改。");
}
}
/**
* <pre>
* 如果将某个字段置空,用updateAllColumnById方法
* 如果部分字段修改,用updateById方法
* </pre>
*/
@Test
public void update3() {
SysUser user = sysUserService.selectById(1024613506376708097L);
user.setName(null); boolean isSucc = sysUserService.updateAllColumnById(user);
if (isSucc) {
log.info("修改成功");
} else {
log.info("修改失败,由于乐观锁,可能已被别人修改过了。如果想在修改,请重新获取该条记录后修改。");
}
}
/**
* 物理删除
* <pre>
* DELETE FROM t_sys_user WHERE id=?
* </pre>
*/
@Test
public void delete() {
boolean isSucc = sysUserService.deleteById(1024613254420688898L);
log.info("{}",isSucc);
}
/**
* 逻辑删除
* <pre>
* 需在SysUser类中的deleted上边的注解放开
* 即:<code>@TableLogic</code>
*
* 执行后结果:
* UPDATE t_sys_user SET deleted=1 WHERE id=?
* </pre>
*/
@Test
public void deleteLogic() {
boolean isSucc = sysUserService.deleteById(1024839982808219649L);
log.info("{}",isSucc);
}
/**
* 指定条件删除
* <pre>
* 执行sql:
* DELETE FROM t_sys_user WHERE (age = ? AND create_datetime >= ? AND name LIKE ?)
* 10(Integer), 2018-08-02 09:37:06.0(Timestamp), 遥远%(String)
* </pre>
*/
@Test
public void deleteByWrapper() {
String dateStr = "2018-08-02 09:37:06";
Date date = DateUtil.parse(dateStr);
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.eq("age", 10);
ew.ge("create_datetime", date);//字符串日期也可。
ew.like("name", "遥远", SqlLike.RIGHT);
boolean isSucc = sysUserService.delete(ew);//ew为null,则全部删除
log.info("{}",isSucc);
}
/**
* 分页查询
* <pre>
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE (age = ? AND create_datetime >= ? AND update_datetime NOT BETWEEN ? AND ? AND name LIKE ?) LIMIT 0,10
* Parameters: 10(Integer), 2018-08-02 09:37:06(String), 2018-08-01 19:11:10(String), 2018-08-02 09:37:06(String), 遥远%(String)
* </pre>
*/
@Test
public void selectPage() {
Page<SysUser> page = new Page<SysUser>(1,10);
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.eq("age", 10);
ew.ge("create_datetime", "2018-08-02 09:37:06");//Date类型 也可以。
ew.notBetween("update_datetime", "2018-08-01 19:11:10","2018-08-02 09:37:06");
ew.like("name", "遥远", SqlLike.RIGHT);
Page<SysUser> p = sysUserService.selectPage(page,ew);
log.info("{}",p);
log.info("{}",p.getRecords());
}
/**
* <pre>
* 查询多个id的对象集合
* 执行sql:
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE id IN ( ? , ? )
* Parameters: 1024839982728527874(Long), 1024831423877894145(Long)
* </pre>
*/
@Test
public void selectBatchIds() {
List<Long> ids = Arrays.asList(1024839982728527874L, 1024831423877894145L);
List<SysUser> list = sysUserService.selectBatchIds(ids);
list.stream().forEach(s -> System.out.println(s));
}
/**
* 获取符合条件的第1条
* <pre>
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE (name LIKE ?)
* Parameters: 遥远%(String)
* </pre>
*/
@Test
public void selectOne() {
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.like("name", "遥远", SqlLike.RIGHT);
SysUser user = sysUserService.selectOne(ew);
log.info("{}",user);
}
/**
* 获取符合条件的所有记录
* <pre>
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE (name LIKE ?)
* Parameters: 遥远%(String)
* </pre>
*/
@Test
public void selectList() {
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.like("name", "遥远", SqlLike.RIGHT);
List<SysUser> list = sysUserService.selectList(ew);
list.stream().forEach(s -> System.out.println(s));
}
/**
* 操作符:in
* <pre>
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE (name IN (?,?,?) AND org_id NOT IN (?,?))
* Parameters: 遥远0(String), 遥远2(String), 遥远3(String), 2(String), 3(String)
* </pre>
*/
@Test
public void operate_in() {
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.in("name", "遥远0,遥远2,遥远3");//字符串
ew.notIn("org_id", "2,3");//整数
List<SysUser> list = sysUserService.selectList(ew);
list.stream().forEach(s -> System.out.println(s));
}
/**
* 操作符:between
* <pre>
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE (create_datetime BETWEEN ? AND ?)
* Parameters: 2018-08-01 19:11:10(String), 2018-08-02 09:37:06(String)
* </pre>
*/
@Test
public void operate_between() {
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.between("create_datetime", "2018-08-01 19:11:10","2018-08-02 09:37:06");//字符串或者Date均可
List<SysUser> list = sysUserService.selectList(ew);
list.stream().forEach(s -> System.out.println(s));
}
/**
* 将查询结果封装到Map<String, Object>
* <pre>
* Preparing: SELECT id AS id,org_id AS orgId,`name`,age,`scope`,create_datetime AS createDatetime,update_datetime AS updateDatetime,deleted,version FROM t_sys_user WHERE (create_datetime BETWEEN ? AND ?)
* Parameters: 2018-08-01 19:11:10(String), 2018-08-02 09:37:06(String)
*
* </pre>
*/
@Test
public void selectMaps() {
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.between("create_datetime", "2018-08-01 19:11:10","2018-08-02 09:37:06");//字符串或者Date均可
List<Map<String, Object>> list = sysUserService.selectMaps(ew);
//打印如下:
//{createDatetime=2018-08-01 19:11:10.0, updateDatetime=2018-08-01 19:11:10.0, scope=1.23, name=22, id=1024613506376708097, version=0, orgId=1, age=10}
//{createDatetime=2018-08-02 09:37:06.0, updateDatetime=2018-08-02 09:37:06.0, scope=1.23, name=11, id=1024831423877894145, version=0, orgId=1, age=10}
list.stream().forEach(s -> System.out.println(s));
}
/**
* 只返回第一个字段值
* <pre>
* Preparing: SELECT id AS id FROM t_sys_user WHERE (create_datetime BETWEEN ? AND ?)
* Parameters: 2018-08-01 19:11:10(String), 2018-08-02 09:37:06(String)
* </pre>
*/
@Test
public void selectObjs() {
EntityWrapper<SysUser> ew = new EntityWrapper<SysUser>();
ew.between("create_datetime", "2018-08-01 19:11:10","2018-08-02 09:37:06");//字符串或者Date均可
List<Object> list = sysUserService.selectObjs(ew);
//打印如下:
//1024613506376708097
//
list.stream().forEach(s -> System.out.println(s));
}
}
mybaits-plus总结的更多相关文章
- MyBaits使用小结
Mybatis用like进行模糊查询的时候,配置与所用的数据库有关系,总结了下,具体如下: 1.MySQL :LIKE CONCAT('%',#{empname},'%' ) 或者 LIKE CO ...
- MyBaits学习
一:配置MyBaits的开发环境 1.1.核心配置文件 正如hibernate一样,MyBaits也有一个核心的配置文件,它包含着数据源地址,用户名,密码等,还有着各个实体类的配置文件,配置文件是xm ...
- MyBaits一对一的查询方法
MyBaits一对一的查询方法 一:表数据与表结构 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CRE ...
- (原创)mybaits学习三,springMVC和mybatis融合
上一节,总计了spring和mybaits的融合,这一节,我们来学习springmvc和mybatis融合 最近在弄一个SSM的项目,然后在网上找资料,将资料总结如下 一,开发环境的配置 MyEcli ...
- mybaits入门
1.回顾jdbc开发 orm概述 orm是一种解决持久层对象关系映射的规则,而不是一种具体技术.jdbc/dbutils/springdao,hibernate/springorm,mybaits同属 ...
- Mybaits学习总结2
http://www.cnblogs.com/xdp-gacl/p/4262895.html 继续参考这篇文章写Mybaits学习总结 上一章,我修改了编码,统一为UTF8之后,便没有编码错误 < ...
- Mybaits学习总结1
http://www.cnblogs.com/xdp-gacl/p/4261895.html 参考了这篇文章搭建了Mybaits环境,原作者有些地方没有标注使用某种编码,我是自学SQL的,所以深知编码 ...
- mybaits 学习
mybaits 学习(一) 注意:如果建的是web项目,run as java application 参考http://www.cnblogs.com/xdp-gacl/p/4261895.htm ...
- Mybaits入门之起航
前言 Mybaits技术现在很多公司都在使用,它提供了简单的API可以快速进行数据库操作,所以不管是自己做系统还是找工作都有必要了解一下. 学习一门技术如果是入门的话要么买书要么就是阅读官方的文档,而 ...
- mybaits使用存储过程
如何使用Mybaits调用数据库存储过程,按以下顺序Oracle案例库: 1.在数据库中创建以下存储过程: create or replace procedure pro_hello(p_result ...
随机推荐
- Windows驱动开发-IRP超时处理
IRP被送到底层驱动程序以后,由于硬件设备的问题,IRP不能得到及时处理,甚至有可能永远不会被处理,这时候需要对IRP超时情况进行处理,一旦在规定时间内,IRP没有被处理,操作系统就会进入到IRP的处 ...
- linux面试经验
互联网面试想必是每个学计算机的学生必不可少的环节,无论你的项目经验再多,你不准备基础知识,也还是无济于事.首先来说说关于工作的事情. 三年前,那时候我还是刚刚快要大四毕业的小鲜肉,那时候有个超大的招聘 ...
- c数据结构链式存储
#include "stdafx.h" #include "stdio.h" #include "string.h" #include &q ...
- Linux命令:iostat命令
Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同 ...
- C/C++ - CallBack
这是实验楼上一个callback debug例子,我没有提交结果,但在本地上运行没有任何问题,也无警告: #include <stdio.h> #define MAX 3 typedef ...
- 119、Java中String类之通过isEmpty判断是否为空字符串
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 工具 - brackets
常用插件 blueprint beta file tree view indent guidelines
- BZOJ 4166: 月宫的符卡序列
如果使用回文树,节点 \(u\) 的回文串和 \(fail_u\) 的回文串中心不一样,因为回文树的 \(fail\) 指针指向的是最长回文后缀,没法快速解决异或和 考虑魔改回文树,用马拉车来解决,扩 ...
- C# 中的委托和事件 转载张子阳的
C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人 ...
- 【剑指Offer面试编程题】题目1390:矩形覆盖--九度OJ
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入 ...