当前位置: 首页 > news >正文

Mybatis进阶详细用法

目录

条件构造器

案例

自定义SQL

案例

Service接口

案例

综合案例


条件构造器

案例

    @Testvoid testQueryMapper() {// 创建 QueryWrapper 实例QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("id," + "username," + "info," + "balance ");// 添加条件:用户名包含 "o",余额大于等于 1000queryWrapper.like("username", "o").ge("balance", 1000);// 使用 MyBatis-Plus 的方法执行查询List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}
    @Testvoid testUpdateWapper() {UpdateWrapper<User> wrapper = new UpdateWrapper<>();// 使用实体的函数式方式指定要更新的字段wrapper.set("balance", 5000).eq("username", "jack");// 执行更新操作int updated = userMapper.update(null, wrapper);if (updated == 1) {// 更新成功System.out.println("更新成功");} else {// 更新失败或无记录被更新System.out.println("更新失败");}}

    @Testvoid testUpdateWapper1(){UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.in("id", Arrays.asList(1, 2, 4));updateWrapper.setSql("balance = balance-200");userMapper.update(null,updateWrapper);}

自定义SQL

案例

Service接口

案例

  @Testvoid testSaveUser() {User user = new User();
//        user.setId(5L);user.setUsername("马超");user.setPassword("123");user.setPhone("18688990011");user.setBalance(200);user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());userService.save(user);}@Testvoid testQuery() {List<User> users = userService.listByIds(Arrays.asList(1L, 2l, 3l));users.forEach(System.out::println);}

综合案例

@RequestMapping("/users")
@RestController
@Api(tags = "用户管理接口")
//配合final 完成构造函数注入
@RequiredArgsConstructor
public class UserController {private final IUserService iUserService;@ApiOperation("新增用户管理接口")@PostMappingpublic void saveUser(@RequestBody UserFormDTO userFormDTO) {User user = new User();
//        1.把Dto拷贝到PoBeanUtil.copyProperties(userFormDTO, user);iUserService.save(user);}@ApiOperation("删除用户管理接口")@DeleteMapping("{id}")public void deleteUserById(@ApiParam("用户id") @PathVariable("id") long id) {iUserService.removeById(id);}@ApiOperation("根据id查询用户接口")@GetMapping("{id}")public UserVO queryUserById(@ApiParam("用户id") @PathVariable("id") long id) {User user = iUserService.getById(id);
//        拷贝;return  BeanUtil.copyProperties(user,UserVO.class) ;}@ApiOperation("根据id批量查询用户接口")@GetMappingpublic List<UserVO> queryUserByIds(@ApiParam("用户集合ids集合") @RequestParam("ids") List<Long> ids) {
//       根据ids集合查询用户集合List<User> users = iUserService.listByIds(ids);
//        拷贝return BeanUtil.copyToList(users, UserVO.class);}@ApiOperation("根据id扣减用户余额")@PutMapping("/{id}/deduction/{money}")public void deductMoneyById(@ApiParam("用户id") @PathVariable("id") Long id, @ApiParam("扣减的金额") @PathVariable("money") Integer money) {iUserService.deductMoneyById(id, money);}}
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {private final UserMapper userMapper;@Overridepublic void deductMoneyById(Long id, Integer money) {
//        查询用用户余额是否支持扣减
//        已经注入mapper了
//        User user1 = baseMapper.selectById(id);User user = this.getById(id);if (user == null || user.getStatus() == 2) {throw new RuntimeException("用户状态异常");}//        校验用户余额是否支持扣减if (user.getBalance() - money < 0) {throw new RuntimeException("用户余额不足");}UpdateWrapper<User> wrapper = new UpdateWrapper<>();wrapper.eq("id",id);
//        完成扣减baseMapper.deductMoneyById(wrapper,money);}
}
 void deductMoneyById(@Param("ew") UpdateWrapper<User> eq, @Param("money")Integer money);
  <update id="deductMoneyById">UPDATE user SET balance = balance-#{money}  ${ew.customSqlSegment}</update>

http://www.lryc.cn/news/347907.html

相关文章:

  • Android 系统省电软件分析
  • 了解什么是Docker
  • ChatGPT开源的whisper音频生成字幕
  • 融知财经:期货和现货的区别是什么?哪个风险大?
  • Android Studio开发之路(十)app中使用aar以及报错记录
  • sql-行转列3(转置)
  • MATLAB | 最新版MATLAB绘图速查表来啦!!
  • web安全之登录框渗透骚姿势,新思路
  • 无人机+自组网:空地点对点无人机通信解决方案
  • android TV app适配遥控器思路,recycleview选中放大
  • python篇-cmd 执行pip命令失败,但执行pyhon命令正常
  • Redis系列-3 Redis缓存问题
  • 【数据结构】堆(Heap)
  • vue cli 自定义项目架子,vue自定义项目架子,超详细
  • flink cdc,读取datetime类型
  • Kotlin 编译器和工具链:深入解析与实践案例
  • kettle
  • Maven 自动化构建
  • Unicode字符集和UTF编码
  • echarts默认图例(横线+圈圈)
  • Shell脚本的基础和变量
  • VRRP协议-负载分担配置【分别在路由器与交换机上配置】
  • 商务分析方法与工具(十):Python的趣味快捷-公司财务数据最炫酷可视化
  • 思源笔记如何结合群晖WebDav实现云同步数据
  • Electron Forge | 跨平台实战详解(中)
  • stable diffusion教程
  • 音频文件分析-- whisper(python 文档解析提取)
  • Python深度学习基于Tensorflow(3)Tensorflow 构建模型
  • 火爆多年的抖音小店,2024年想要入驻需要什么条件呢?
  • STM32G030C8T6:EEPROM读写实验(I2C通信)