常用注解:

@TableName:为了声明后端代码中的类是对应数据库中的哪张表,括号中填写上表的名字

@TableField: 指定当前属性映射数据库表哪一列 ,假如类中的字段表中不存在,则要在括号中写上exist = false,经常应用于多表查询中

@TableId:主键注解。

IdType.AUTO:数据库ID自增

IdType.NONE:无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

IdType.INPUT:insert前自行set主键值

IdType.ASSIGN_ID:分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

IdType.ASSIGN_UUID:分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)

@TableLogic一般加在entity中表示删除标志的字段属性上,表示逻辑删除。

@TableLogic(value="原值",delval="改值")

@TableName("employee")
@Data
public class Employee {@TableId(type = IdType.AUTO,value = "id")private Long id;@TableField(value = "name",exist = true)private String name;private String password;private String email;private int age;private int admin;
​private Long deptId;@TableField(exist = false)
private Department dept;
}
​
​
实体类:@TableLogicprivate Integer del;
​service层:调用BaseMapper的deleteById(id);
​执行是效果:
​加@TableLogic的情况下
​走 Update 表名 set 加注解的列=值 where del=值
​不加@TableLogic的情况下
​走 delete from 表名 where del=值
​

日志配置

第一种:
​
logging.level.cn.wolfcode.mp.mapper=debug
​
第二种:
​
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

通用mapper接口

insert

//往员工表中插入一条数据@Testpublic void insert(){Employee employee = new Employee();employee.setAge(20);employee.setAdmin(0);employee.setDeptId(1L);employee.setEmail("app@qq.com");employee.setName("小妹");employee.setPassword("123");employeeMapper.insert(employee);}

updateById(id) 要注意的是假如不是全字段更新,那么就要分两种情况考虑,一种是你没有修改的字段类型默认值为null,那么字段不会参与sql语句拼接,第二种是没有被修修改的字段的默认值为0(int,short

之类的),那么他们就会参与到sql语句的语句拼接,这时候数据库中的数据就会出现0值

//将id=1用户名字修改为jj@Test
​public void testUpdateById2(){
​Employee employee = employeeMapper.selectById(1L);
​employee.setName("jj");
​employeeMapper.updateById(employee);
​}

update(entity,wrapper)

//把年龄为20的小明姓名改为小法
@Test
publc void update(){Employee employee=new Employee();employee.setAge(20);UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();wrapper.eq("name", "小法");employeeMapper.update(employee,wrapper);
}

deleteById(id)

//删除id=1的员工信息
​@Test
​public void testDeleteById(){
​employeeMapper.deleteById(1L);
​}

deleteBatchIds(idList)

//需求:删除id=1, id=2的员工信息@Test
​public void testDeleteBatchIds(){
​employeeMapper.deleteBatchIds(Arrays.asList(1L,2L));
​}

deleteByMap(map)

//删除name=jji并且age=18的员工信息
​@Test
​public void testDeleteByMap(){
​Map<String, Object> map = new HashMap<>();
​map.put("name", "jj");
​map.put("age", 18);
​employeeMapper.deleteByMap(map);
​}

delete(wrapper)

//删除name=jj并且age=18的员工信息
​@Test
​public void testDeleteWrapper(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();
​wrapper.eq("name", "jj").eq("age", 18);
​employeeMapper.delete(wrapper);
​}

selectById(id)

//查询id=1的员工信息
​@Test
​public void testSelectById(){
​System.out.println(employeeMapper.selectById(1L));
​}

selectBatchIds(idList)

//查询id=1,id=2的员工信息
​@Test
​public void testSelectBatchIds(){
​System.out.println(employeeMapper.selectBatchIds(Arrays.asList(1L, 2L)));
​}

selectByMap(map)

 //查询name=dd, age=18的员工信息
​@Test
​public void testSelectByMap(){
​Map<String, Object> map = new HashMap<>();
​map.put("name", "dd");
​map.put("age", 18);
​System.out.println(employeeMapper.selectByMap(map));
​}

selectCount(wrapper)

//查询满足条件的所有的员工个数
​@Test
​public void testSelectCount(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();//假如要满足年龄为18wrapper.eq("age",18)
​System.out.println(employeeMapper.selectCount(wrapper));
​//没有指定条件, 等价于传入null
​//System.out.println(employeeMapper.selectCount(null));​}

selectList(wrapper)

 查询满足条件的所有的员工信息, 返回List<Employee>
​@Test
​public void testSelectList(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();//假如要满足年龄为18wrapper.eq("age",18)
​List<Employee> list = employeeMapper.selectList(wrapper);
​list.forEach(System.out::println);
​//没有指定条件, 等价于传入null
​//List<Employee> list2 = employeeMapper.selectList(null);
​//list2.forEach(System.out::println);
​}

selectMaps(wrapper) 这种方法多用于返回集合中的字段数据库列中没有的

 查询满足条件的所有的员工信息, 返回List<Map<String, Object>>  底层将每条数据封装成HashMap
​@Test
​public void testSelectMap(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();
​List<Map<String, Object>> map = employeeMapper.selectMaps(wrapper);
​map.forEach(System.out::println);
​//没有指定条件, 等价于传入null
​//List<Map<String, Object>> map2= employeeMapper.selectMaps(null);
​//map2.forEach(System.out::println);
​}

selectPage(page,wrapper)

 @Test
//设置好分页查询条件(另外设置)
//查询第一页的三条数据public void testSelectPage(){QueryWrapper<Employee> wrapper = new QueryWrapper<>();Page<Employee> page = new Page<>(1, 3);employeeMapper.selectPage(page,wrapper);System.out.println("当前页:" + page.getCurrent());
​System.out.println("每页显示条数:" + page.getSize());
​System.out.println("总页数:" + page.getPages());
​System.out.println("总数:" + page.getTotal());
​System.out.println("当前页数据:" + page.getRecords());​}

selectOne(wrapper)

@Test
//查找名字为jj,年龄为18的一条数据public void testSelectOne(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();wrapper.eq("name","jj").eq("age",18)
​Employee employee = employeeMapper.selectOne(wrapper);
​System.out.println(employee);
​}

selectObjects(wrapper)

@Test
//返回name那一列的数据public void testSelectObjs(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();
​//wrapper.select("name");  //挑选返回的列
​List<Object> list = employeeMapper.selectObjs(wrapper);
​list.forEach(System.out::println);
​}

selectMapsPage(page,wrapper)

//查找第一页的三条数据,并且年龄为18@Test
​public void testSelectMapsPage(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();wrapper.eq("age",18)
​//参数1:当前页, 参数2:每页显示条数
​IPage<Map<String, Object>> page = new Page<>(1, 3);
​employeeMapper.selectMapsPage(page, wrapper);
​//  System.out.println("当前页:" + page.getCurrent());
​//   System.out.println("每页显示条数:" + page.getSize());
​//  System.out.println("总页数:" + page.getPages());
​// System.out.println("总数:" + page.getTotal());
​//System.out.println("当前页数据:" + page.getRecords());
​}

条件构造器

查询子类

QueryWrapper

需求:查询name=dafei, age=18的用户
​@Test
​public void testQuery2(){
​QueryWrapper<Employee> wrapper = new QueryWrapper<>();
​wrapper.eq("name", "dafei").eq("age", 18);
​System.out.println(employeeMapper.selectList(wrapper));
​}

LambdaQueryWrapper

将id=1的用户name改为dafei @Test
​public void testUpdate4(){
​LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
​wrapper.eq(Employee::getId, 1L);
​wrapper.set(Employee::getName, "dafei");
​employeeMapper.update(null, wrapper);
​}

更新子类

UpdateWrapper

将id=1的员工name改为dafei
​@Test
​public void testUpdate2(){
​UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();
​wrapper.eq("id", 1L);
​wrapper.set("name", "dafei");
​employeeMapper.update(null, wrapper);
​}
​
​

LambdaUpdateWrapper

将id=1的用户name改为dafei @Test
​public void testUpdate4(){
​LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
​wrapper.eq(Employee::getId, 1L);
​wrapper.set(Employee::getName, "dafei");
​employeeMapper.update(null, wrapper);
​}

注:普通的Wrapper可以转换为流,wrapper.lambda();

高级查询

Service

IEmployeeService接口

public interface IEmployeeService  extends IService<Employee> {}

EmployeeServiceImpl

@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper,Employee> implements  IEmployeeService{@Overridepublic IPage<Employee> query(EmployeeQueryObject qo) {IPage<Employee> page = new Page<> (qo.getCurrentPage(),qo.getPageSize()); LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>(); wrapper.like(StringUtils.hasText(qo.getKeyword()),Employee::getName,qo.getKeyword()); return super.page(page,wrapper); }
}

JAVA的日常小记录(MyBatis-Plus)相关推荐

  1. 日常bug记录——mybatis传值为null

    在xml中传0为null的问题 今天在敲代码的时候,发现了一个很诡异的问题,在写xml的时候传入Long类型为0的值以后 这个if判断条件判断为空! <if test="params. ...

  2. 日常小记录json文件(json.load()、json.loads()、json.dump()、json.dumps())

    使用模型预测图片文件时,为了加快速度,早点得到预测结果,可以将预测图片分成多份多开几个命令窗口进行预测. 具体的处理方法是: ①读取需预测图片文件列表, ②把列表分成多份写入多个json文件 ③预测时 ...

  3. 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 本源 ...

  4. java学习中,字符串使用(比较、构造方法)(java 学习中的小记录)

    java学习中,字符串使用(比较.构造方法)(java 学习中的小记录)作者:王可利(Star·星星) String的使用 1.在内存中是如何保存字符串. == :比较的是地址(引用数据类型) equ ...

  5. java学习中,异常和错误的简介、捕获异常、抛出异常、自定义异常、finally关键字(java 学习中的小记录)

    java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常.finally关键字(java 学习中的小记录) 参考文章: (1)java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常. ...

  6. java学习中,instanceof 关键字 和 final 关键字、值的传递(java 学习中的小记录)...

    java学习中,instanceof 关键字 和 final 关键字.值的传递(java 学习中的小记录)作者:王可利(Star·星星) instanceof 关键字 作用: 1.用来判断某个对象是否 ...

  7. java学习中,DVD管理系统纯代码(java 学习中的小记录)

    java学习中,DVD管理系统纯代码(java 学习中的小记录)作者:王可利(Star·星星) class DvdMain{public static void main (String[] args ...

  8. java毕业设计公司日常考勤系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计公司日常考勤系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计公司日常考勤系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  9. java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...

最新文章

  1. add nodes to the swarm
  2. 没办法,我必须干掉他们团队的 Leader
  3. FileStream 和StreamWriter 一起用时
  4. T-SQL编程基础之二:条件选择、循环编程
  5. ASP.NET几种安全验证方法(一)
  6. java中volatile_java中volatile关键字的含义
  7. RSS(Really Simple Syndication)简易信息聚合
  8. Spring Security HttpSecurity
  9. 设置element-iu中table滚动条位置
  10. 将WinServers2019打造成家用系统
  11. vscode 中的 Lammps Syntax Highlighting 插件
  12. 中国河流(水系)数据集
  13. 高效办公之高效文件管理极速检索:只需1秒找到所需文件
  14. Hacking Tools简介
  15. Postgresql通过docker进行高可用部署 pgpool-II
  16. 无符号数相减问题 C语言
  17. python 字符编码处理问题总结 彻底击碎乱码!
  18. lol最克制诺手的英雄_LOL:62个上单英雄,竟只有3个能克制诺手?第1名很多人想不到!...
  19. 串口调试助手 发送16进制与现实16进制数据
  20. 企业无线局域网,买AP一定需要买AC控制器吗?还有一定要买AP授权吗?

热门文章

  1. EditText输入中文时出现下划线拼音处理
  2. 一款简易低成本智能割草机制作——嵌入式功能实现篇
  3. SCRM成功案例-知名奶粉品牌,构建营销数据中台,实现高效会员经营
  4. 2020-12-20 数学基础(集合、映射、函数)
  5. 浅谈如何正确选择及使用电流互感器
  6. python植物大战僵尸(1)
  7. php构建soap_使用PHP构建Web服务
  8. php7 class template,templateclass type是什么意思
  9. css教程之简写与手写应该什么时候使用
  10. 【Goby】自动化漏洞扫描工具介绍、下载、使用、功能