当前位置: 首页 > 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所示,表明已经成功地从数据库中查询到一个产品并且成功打印。其他的测试方法读者可自行尝试。

相关文章:

  • 网站建设如何测试免费seo网站诊断
  • 去黄山旅游攻略和费用是多少河北seo基础入门教程
  • 中国移动网站建设国内营销推广渠道
  • 17网做网站seo推广软件
  • 深圳市网站哪家做的好网络营销策划方案论文
  • 做网站需完成的软件产品免费推广网站有哪些
  • 局域网环境下浏览器安全限制的实用方法
  • 【2021 ICCV-Backbone 结构解析】Swin Transformer
  • 【python】http请求的默认超时时间设置
  • 智能体平台的商业前景与竞争格局分析:金融与企业市场的机遇与挑战
  • 深度解析Lucene IndexWriter 性能优化
  • GROUP BY、UNION和COALESCE协作
  • 【机器学习深度学习】张量基本操作
  • 无人机灯光驱动模块技术解析
  • Netty对象池ObjectPool源码解析
  • arthas助力Java程序Full GC频率大降!
  • NVIDIA A100 GPU的计算与内存层级结构
  • day042-负载均衡与web集群搭建
  • AR/VR 显示画质失真?OAS 体全息光栅案例来解决
  • Vue Devtools “Open in Editor” 配置教程(适用于 VSCode 等主流编辑器)
  • Codex+ 自建中转 API 部署教程(Windows 版)
  • 3 大语言模型预训练数据-3.2 数据处理-3.2.2 冗余去除——1.SimHash算法处理冗余信息的核心原理
  • react中使用3D折线图跟3D曲面图
  • 分布式环境下 Spring Boot 项目基于雪花算法的唯一 ID 生成方案
  • 【LLaMA-Factory 实战系列】四、API 篇 - 部署推理服务与批量调用实战
  • 国道观察者手记