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;
    }
相关推荐
鱼跃鹰飞1 分钟前
面试题:说一说redis和Memcached的区别
数据库·redis·memcached
哲-哲11 分钟前
WVP+ZLM搭建碰到问题
java
编程彩机13 分钟前
互联网大厂Java面试:从Spring Cloud到分布式事务的技术场景解析
java·spring cloud·微服务·消息队列·分布式事务
深念Y15 分钟前
中兴微随身WiFi 板号UZ901_v1.6 影腾Y1新版本 增加SIM卡槽 开启ADB 去云控 改串号教程 下
数据库·adb
黎雁·泠崖15 分钟前
Java内部类与匿名内部类:定义+类型+实战应用
java·开发语言
顾西爵霞16 分钟前
远程访问centos7并连接Mariadb
数据库·centos·mariadb
m0_7482299920 分钟前
Laravel7.x核心特性全解析
c语言·数据库·c#
weixin_4365250721 分钟前
若依多租户版: 页面新增菜单, 执行菜单SQL
前端·数据库·sql
青槿吖21 分钟前
第二篇:JDBC进阶骚操作:防注入、事务回滚、连接池优化,一篇封神
java·开发语言·jvm·算法·自动化
青&棠24 分钟前
JDK 多版本管理工具 jvms
java