ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

curd(spring boot框架)

2026/9/11 18:47:38 拓冰建站 浏览量
curd(spring boot框架) curd就是“增加删除修改查询”的缩写当然是对数据库的修改从前端到数据库有4层从上到下分别是control - service - mapper - pojo一般是control调用 service接口后用serviceimpl中方法serviceimpl调用mappercontrol是1.接收前端传过来的参数RequestParam、PathVariable、RequestBody2.调用 Service 执行业务3.封装返回结果Result返回给前端4.参数非空的校验service是写业务逻辑和处理业务规则调用 mapper。1.业务判断检查数据本身合不合法业务规则判断2.组装实体对象把control传来的数据打包成mapper层看的懂的形式3. mapper 完成数据库操作4.事务控制一些安全的注解如Transactionalmapper是专门操作数据库写 SQL和数据库打交道。1.定义接口方法配合 xml / 注解写 SQL。Pojo 也叫 Entity对应数据库表数据库一行记录就是一个对象。1.封装数据库的数据用来存数据、传数据。一般要简单的对数据库操作用mybatis-plus mp依赖自带的方法mavendependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-generator/artifactId version3.5.3.1/version /dependency要使用mp就在Mapper层继承BaseMapper类名如Mapper public interface CategoryMapper extends BaseMapperCategory { }后在serviceimpl中声明就可以使用了如Autowired private SetmealDishMapper setmealDishMapper;mp常用的方法新增实体对象mapper.insert(实体对象))如Dish dish new Dish()dish.setName(番茄炒蛋);dishMapper.insert(dish);删除有三种deleteById根据iddeleteBatchIds根据id集合deleteByMap按map条件删除如dishMapper.deleteById(1L)dishMapper.deleteBatchIds(List.of(1L,2L));MapString,Object map new HashMap();map.put(dish_id, 10L);int count dishFlavorMapper.deleteByMap(map);修改updateById//根据id更新只更新实体中非null字段Dish dish new Dish();dish.setId(5L);dish.setStatus(0);dishMapper.updateById(dish);//只更新status其他字段不会被覆盖还有种条件修改用UpdateWrapper是mp中自带的条件构造器先建造一个再写条件UpdateWrapperUser wrapper new UpdateWrapper();wrapper.eq(id, 1).set(name, 张三); // set name 张三userMapper.update(null, wrapper);查询(分两种 1.直接查询 2. 分页查询)//分页查询不细说具体看我的分页博客查询单条用selectById(用id来查询)T selectById(Serializable id);查询多条selectBatchIds// 根据id批量查询ListT selectBatchIds(Collection idList);条件查询QueryWrapperqueryWrapper是mp中自带的条件构造器先建造一个再写条件如QueryWrapperDish wrapper new QueryWrapper();//建造wrapper.eq(category_id, 2)//满足category_id为2.like(name,土豆)//满足name 为土豆ListDish list dishMapper.selectList(wrapper);//自动查找满足的对象一般在项目中在control用PostMapping 接收新增请求用GetMapping接收查询请求用PutMapping接收修改请求用DeleteMapping接收删除请求后定义一个函数来链接service一个简单的例子模板control层(代码改数据库)RestControllerpublic class DishController {Autowired private DishService dishService;PostMapping(status/{status})public Result updateStatus(PathVariable Integer status,RequestParam Long id){ dishService.updateStatus(status,id);return Result.success(); }}serviceService public interface DishService { void updateStatus(Integer status, Long id); }serviceImplServicepublic class DishServiceImpl implements DishService { Autowired private DishMapper dishMapper; Override public void updateStatus(Integer status, Long id) { Dish dish new Dish(); dish.setStatus(status); dish.setId(id); dishMapper.updateById(dish); } }mapperMapper public interface DishMapper extends BaseMapperDish { }poorData Builder NoArgsConstructor AllArgsConstructor public class Dish implements Serializable { private static final long serialVersionUID 1L; TableId(type IdType.AUTO) private Long id; private String name; private Long categoryId; private BigDecimal price; private String image; private String description; private Integer status; private LocalDateTime createTime; private LocalDateTime updateTime; private Long createUser; private Long updateUser; }在代码用mp时调用的id对不上数据库中的id发现是精度问题雪花 ID 数值超过这个上限前端拿到后端返回的数字 ID自动丢失精度、末尾数字被篡改最终解决方案自定义 Jackson 消息转换器将所有 Long 序列化为字符串返回前端Configurationpublic class JacksonConfig {Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder - {// 将 Long / long 类型序列化输出为字符串防止前端JS丢失精度builder.serializerByType(Long.class, ToStringSerializer.instance);builder.serializerByType(Long.TYPE, ToStringSerializer.instance);};}}//还有啥之后想到再加