Java服务端——数据库操作

数据库操作

niucloud 常规数据库操作采用 MyBatis-PlusMyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。针对联表查询使用 MyBatis-Plus-Join,MyBatis-Plus-Join 是一个基于 MyBatis-Plus 的多表查询扩展库。它通过提供简洁的 API 和强大的查询建构器,极大地简化了多表关联查询的复杂性。无论是简单的连表查询还是复杂是一对一、一对多查询,MyBatis-Plus-Join 都能提供优雅的解决方案。本节重点讲解基本数据库增删改查操作,然后下一节数据库查询,单独讲解查询方法。

MyBatis-Plus 与 MyBatis-Plus-Join 介绍

关于 MyBatis-Plus 的优势以及常用方法可以查看 MyBatis-Plus 手册。下面针对 niucloud 中常用数据的增删改查进行讲解。

Mapper层设计

数据库 mapper 继承 Mybatis-Plus 的 BaseMapper,也可以继承 Mybatis-Plus-Join 的 MPJBaseMapper,一般为了后期联表查询方便使用 MPJBaseMapper

例如:

复制代码
package com.niu.shop.mapper.goods;

import com.github.yulichang.base.MPJBaseMapper;
import com.niu.shop.entity.goods.ShopGoodsBrand;
import org.apache.ibatis.annotations.Mapper;

/**
 * 商品品牌 Mapper
 */
@Mapper
public interface ShopGoodsBrandMapper extends MPJBaseMapper<ShopGoodsBrand> {
}

基本增删改查操作

数据添加

数据添加使用 insert 方法,注意 saas 系统站点 id 不是实际参数传入的,而是通过 RequestUtil 获取 siteld

例如下面商品品牌添加:

复制代码
 /**
     * 商品品牌添加
     *
     * @param addParam 参数
     */
    @Override
    public void add(ShopGoodsBrandParam addParam) {
        Long count = shopGoodsBrandMapper.selectCount(new QueryWrapper<ShopGoodsBrand>()
                .eq("brand_name", addParam.getBrandName())
                .eq("site_id", RequestUtils.siteId()));
        if (count > 0) throw new CommonException("品牌已存在");

        ShopGoodsBrand model = new ShopGoodsBrand();

        model.setSiteId(RequestUtils.siteId());
        model.setBrandName(addParam.getBrandName());
        model.setLogo(addParam.getLogo());
        model.setDesc(addParam.getDesc());
        model.setSort(ObjectUtil.isNotEmpty(addParam.getSort()) ? Integer.parseInt(addParam.getSort()) : 0);
        model.setCreateTime(System.currentTimeMillis() / 1000);

        shopGoodsBrandMapper.insert(model);
    }

数据编辑

数据编辑使用 update 方法,如果传入主键 id 编辑使用 updateByld 方法

例如商品品牌编辑部分:

复制代码
  public void edit(Integer id, ShopGoodsBrandParam editParam) {

        ShopGoodsBrand model = shopGoodsBrandMapper.selectOne(
                new QueryWrapper<ShopGoodsBrand>()
                    .eq("brand_id",  id)
                    .eq("site_id", RequestUtils.siteId()));

        Assert.notNull(model, "品牌不存在!");

        model.setBrandName(editParam.getBrandName());
        model.setLogo(editParam.getLogo());
        model.setDesc(editParam.getDesc());
        model.setSort(ObjectUtil.isNotEmpty(editParam.getSort()) ? Integer.parseInt(editParam.getSort()) : 0);
        model.setUpdateTime(System.currentTimeMillis() / 1000);

        shopGoodsBrandMapper.updateById(model);
    }

数据删除

数据删除使用 delete 方法,一般单条删除,传入主键,或者对应条件

例如商品品牌删除:

复制代码
  public void del(Integer id) {
        shopGoodsBrandMapper.delete(new QueryWrapper<ShopGoodsBrand>().eq("brand_id", id).eq("site_id", RequestUtils.siteId()));
    }

数据查询

数据列表分为分页列表查询以及常规列表查询,注意分页列表返回数据结构 PageResult,常规列表直接使用查询的列表即可

关于连表 查询以及查询构造器下节讲解,下面是商品品牌分页列表以及常规列表代码:

复制代码
   /**
     * 商品品牌分页列表
     *
     * @param pageParam 分页参数
     * @param searchParam 搜索参数
     * @return PageResult<ShopGoodsBrandListVo>
     */
    @Override
    public PageResult<ShopGoodsBrandListVo> page(PageParam pageParam, ShopGoodsBrandSearchParam searchParam) {
        Integer page  = pageParam.getPage();
        Integer limit =pageParam.getLimit();

        QueryWrapper<ShopGoodsBrand> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("site_id", RequestUtils.siteId());
        if (ObjectUtil.isNotEmpty(searchParam.getBrandName())) queryWrapper.like("brand_name", searchParam.getBrandName());
        queryWrapper.orderByDesc("brand_id");

        IPage<ShopGoodsBrand> iPage = shopGoodsBrandMapper.selectPage(new Page<>(page, limit), queryWrapper);
        List<ShopGoodsBrandListVo> list = new LinkedList<>();
        for (ShopGoodsBrand item : iPage.getRecords()) {
            ShopGoodsBrandListVo vo = new ShopGoodsBrandListVo();
            BeanUtils.copyProperties(item, vo);
            list.add(vo);
        }
        return PageResult.build(page, limit, iPage.getTotal()).setData(list);
    }

    /**
     * 商品品牌列表
     *
     * @param searchParam 搜索参数
     * @return PageResult<ShopGoodsBrandListVo>
     */
    @Override
    public List<ShopGoodsBrandListVo> list(ShopGoodsBrandSearchParam searchParam) {
        QueryWrapper<ShopGoodsBrand> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("site_id", RequestUtils.siteId());
        if (ObjectUtil.isNotEmpty(searchParam.getBrandName())) queryWrapper.like("brand_name", searchParam.getBrandName());
        queryWrapper.orderByDesc("brand_id");

        List<ShopGoodsBrand> record = shopGoodsBrandMapper.selectList(queryWrapper);
        List<ShopGoodsBrandListVo> list = new LinkedList<>();
        for (ShopGoodsBrand item : record) {
            ShopGoodsBrandListVo vo = new ShopGoodsBrandListVo();
            BeanUtils.copyProperties(item, vo);
            list.add(vo);
        }
        return list;
    }
相关推荐
邵伯12 小时前
为什么你的 SELECT 有时会阻塞?
数据库·后端
洛小豆12 小时前
代码修仙录 · 第1期:宗门大阵崩了?只因少了毫秒三魂!
数据库·后端·mysql
她说..12 小时前
Spring 核心工具类 AopUtils 超详细全解
java·后端·spring·springboot·spring aop
TH_112 小时前
33、IDEA无法获取最新分支
java·ide·intellij-idea
极客先躯13 小时前
Java Agent 技术全解析:从基础框架到落地实践
java·开发语言
yaso_zhang13 小时前
linux 下sudo运行程序,链接找不到问题处理
java·linux·服务器
2501_9418868613 小时前
基于法兰克福金融系统实践的高可靠消息队列设计与多语言实现经验总结分享
服务器·前端·数据库
ANnianStriver13 小时前
redis安装包方式下载安装
数据库·redis·缓存
帅气的你13 小时前
终于解决了!Spring Boot 启动慢的 5 个优化点
java
云和恩墨13 小时前
表空间、巡检、建库:DBA最熟悉的3个场景,正在被zCloud开放运维中心重新定义
运维·数据库·表空间·dba·巡检·建库