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

SpringBoot项目快速开发框架JeecgBoot——数据访问!

数据访问

eecg Boot项目使用MyBatis作为ORM框架访问数据库,同时项目中集成了MyBatisPlus作为ORM的补充。每个数据库的接口都继承自BaseMapper,并复用其方法,以实现数据库的增、删、改、查功能。下面新建一个产品表,并对其进行CRUD的操作演示。

创建持久化实体类

创建一个产品表,并在项目中完成对该表的增、删、改、查。创建表的

SQL语句如下:

CREATE TABLE `cc_product` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT

'产品名称',

`descp` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT

'产品描述',

`price` decimal(10,2) DEFAULT NULL COMMENT '产品价格',

`create_time` datetime DEFAULT NULL COMMENT '创建时间',

`create_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL

COMMENT

'创建人',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

创建该表对应的实体类Product,代码如下:

package org.jeecg.modules.system.entity;

import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.annotation.TableName;

import lombok.Builder;

import lombok.Data;

import java.io.Serializable;

import java.util.Date;

/**

* 产品的实体类

*/

@Builder

@Data

@TableName("cc_product")

public class Product implements Serializable {

private static final long serialVersionUID = 1L;

/**

* id

*/

@TableId(type = IdType.AUTO)

private Long id;

/**

* 名称

*/

private String name;

/**

* 描述

*/

private String descp;

/**

* 价格

*/

private Double price;

/**

* 创建时间

*/

private Date createTime;

/**

* 创建人

*/ private String createBy;

}

在实体类中标记@Data注解,不需要再手动生成get和set方法。

初始化数据库

执行以下SQL语句来初始化表的数据,插入后表的数据如图8.2所示。

INSERT INTO `jeecg-boot`.`cc_product` ( `name`, `descp`, `price`,

`create_

time`, `create_by` )

VALUES

( '大西瓜0', '超级甜的大西瓜', 0.20, '2021-07-15 21:08:25', 'cc' );

INSERT INTO `jeecg-boot`.`cc_product` ( `name`, `descp`, `price`,

`create_

time`, `create_by` )

VALUES

( '大西瓜1', '超级甜的大西瓜', 0.20, '2021-07-15 21:08:25', 'cc' );

INSERT INTO `jeecg-boot`.`cc_product` ( `name`, `descp`, `price`,

`create_

time`, `create_by` )

VALUES

( '大西瓜2', '超级甜的大西瓜', 0.20, '2021-07-15 21:08:25', 'cc' );

定义Repository接口实现Repository持久层

创建cc_product表对应的数据库接口和xml文件,代码如下:

package org.jeecg.modules.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import org.jeecg.modules.system.entity.Product;

/**

* 产品的实体接口类

*/

public interface ProductMapper extends BaseMapper<Product> {

}

创建一个空的xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://

mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.jeecg.modules.system.mapper.ProductMapper">

</mapper>

新建一个Test测试类,以测试对数据库中的数据表进行增、删、改、查操作,代码如下:

package org.jeecg.modules.system.mapper;

import

com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import lombok.extern.slf4j.Slf4j;

import org.checkerframework.checker.index.qual.SameLenBottom;

import org.jeecg.JeecgSystemApplication;

import org.jeecg.modules.system.entity.Product;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import java.util.Date;

import java.util.List;

/**

* cc_product表的测试类

*/

@Slf4j

@RunWith(SpringRunner.class)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_

PORT, classes = JeecgSystemApplication.class)

public class ProductMapperTest {

@Autowired

private ProductMapper productMapper;

/**

* 测试插入方法

*/

@Test

public void insert() {

for (int i = 0; i < 3; i++) {

Product product = Product.builder().name("大西瓜" +

i).descp("超级甜的大西瓜").price(0.2D)

.createBy("cc").createTime(new Date()).build();

int insert = productMapper.insert(product);

log.info("结果是:{}", insert);

}

}

/**

* 测试删除方法

*/ @Test

public void delete() {

int i = productMapper.deleteById(2L);

log.info("删除的id是:{}",i);

}

/**

* 测试查询一个产品

*/

@Test

public void queryOne() {

LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>

();

wrapper.eq(Product::getName,"大西瓜1");

Product product = productMapper.selectOne(wrapper);

log.info("结果是:{}", product);

}

/**

* 测试查询多个产品

*/

@Test

public void queryList() {

LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>

();

wrapper.eq(Product::getCreateBy,"cc");

List<Product> products = productMapper.selectList(wrapper);

log.info("结果是:{}", products);

}

}

执行queryOne()方法,得到的结果如图8.3所示,表明已经成功地从数据库中查询到一个产品并且成功打印。其他的测试方法读者可自行尝试。

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

相关文章:

  • ros (二) 使用消息传递点云+rviz显示
  • Happy-LLM-Task06 :3.1 Encoder-only PLM
  • C++设计模式(GOF-23)——04 C++装饰器模式(Decorator)(一个类同时继承和组合另一个类)解决类爆炸问题、模板装饰器
  • python3文件操作
  • Node.js特训专栏-实战进阶:8. Express RESTful API设计规范与实现
  • python的智慧养老院管理系统
  • klayout db::edge 里的 crossed_by_point 的坑点
  • mbedtls ssl handshake error,res:-0x2700
  • 从零开始的云计算生活——第二十三天,稍作休息,Tomcat
  • Excel数据转SQL语句(增删改查)
  • 阿里云Web应用防火墙3.0使用CNAME接入传统负载均衡CLB
  • DDNS-GO 使用教程:快速搭建属于自己的动态域名解析服务(Windows 版)
  • 大语言模型的通用局限性与全球技术演进
  • React Native【实战范例】账号管理(含转换分组列表数据的封装,分组折叠的实现,账号的增删改查,表单校验等)
  • 【版本控制教程】如何使用Unreal Engine 5 + UE源代码控制(Perforce P4)
  • 【GPU RAM】实时监控GPU内存分配(一)
  • 微信小程序中scss、ts、wxml
  • 如何在 Manjaro Linux 上安装 Docker 容器
  • 云计算-Azure Functions :构建事件驱动的云原生应用报告
  • 《Effective Python》第十章 健壮性——警惕异常变量消失的问题
  • Encoder-only PLM RoBERTa ALBERT (BERT的变体)
  • 【大模型学习 | 量化】pytorch量化基础知识(1)
  • webpack5 css-loader 配置项中的modules
  • 华为云Flexus+DeepSeek征文|基于Dify+ModelArts打造智能客服工单处理系统
  • 设计模式精讲 Day 13:责任链模式(Chain of Responsibility Pattern)
  • 告别Excel地狱!用 PostgreSQL + ServBay 搭建跨境电商WMS数据中枢
  • 华为运维工程师面试题(英语试题,内部资料)
  • 数据库系统总结
  • AI+智慧高校数字化校园解决方案PPT(34页)
  • 【开源解析】基于PyQt5的智能费用报销管理系统开发全解:附完整源码