JAVA的日常小记录(MyBatis-Plus)
常用注解:
@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)相关推荐
- 日常bug记录——mybatis传值为null
在xml中传0为null的问题 今天在敲代码的时候,发现了一个很诡异的问题,在写xml的时候传入Long类型为0的值以后 这个if判断条件判断为空! <if test="params. ...
- 日常小记录json文件(json.load()、json.loads()、json.dump()、json.dumps())
使用模型预测图片文件时,为了加快速度,早点得到预测结果,可以将预测图片分成多份多开几个命令窗口进行预测. 具体的处理方法是: ①读取需预测图片文件列表, ②把列表分成多份写入多个json文件 ③预测时 ...
- 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw
计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 本源 ...
- java学习中,字符串使用(比较、构造方法)(java 学习中的小记录)
java学习中,字符串使用(比较.构造方法)(java 学习中的小记录)作者:王可利(Star·星星) String的使用 1.在内存中是如何保存字符串. == :比较的是地址(引用数据类型) equ ...
- java学习中,异常和错误的简介、捕获异常、抛出异常、自定义异常、finally关键字(java 学习中的小记录)
java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常.finally关键字(java 学习中的小记录) 参考文章: (1)java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常. ...
- java学习中,instanceof 关键字 和 final 关键字、值的传递(java 学习中的小记录)...
java学习中,instanceof 关键字 和 final 关键字.值的传递(java 学习中的小记录)作者:王可利(Star·星星) instanceof 关键字 作用: 1.用来判断某个对象是否 ...
- java学习中,DVD管理系统纯代码(java 学习中的小记录)
java学习中,DVD管理系统纯代码(java 学习中的小记录)作者:王可利(Star·星星) class DvdMain{public static void main (String[] args ...
- java毕业设计公司日常考勤系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计公司日常考勤系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计公司日常考勤系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...
- java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...
最新文章
- add nodes to the swarm
- 没办法,我必须干掉他们团队的 Leader
- FileStream 和StreamWriter 一起用时
- T-SQL编程基础之二:条件选择、循环编程
- ASP.NET几种安全验证方法(一)
- java中volatile_java中volatile关键字的含义
- RSS(Really Simple Syndication)简易信息聚合
- Spring Security HttpSecurity
- 设置element-iu中table滚动条位置
- 将WinServers2019打造成家用系统
- vscode 中的 Lammps Syntax Highlighting 插件
- 中国河流(水系)数据集
- 高效办公之高效文件管理极速检索:只需1秒找到所需文件
- Hacking Tools简介
- Postgresql通过docker进行高可用部署 pgpool-II
- 无符号数相减问题 C语言
- python 字符编码处理问题总结 彻底击碎乱码!
- lol最克制诺手的英雄_LOL:62个上单英雄,竟只有3个能克制诺手?第1名很多人想不到!...
- 串口调试助手 发送16进制与现实16进制数据
- 企业无线局域网,买AP一定需要买AC控制器吗?还有一定要买AP授权吗?