当前位置: 首页 > 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.lqws.cn/news/513559.html

相关文章:

  • 从零开始的云计算生活——第二十三天,稍作休息,Tomcat
  • pycharm基础操作备忘记录
  • 国芯思辰|同步降压转换器CN2020A替换LMR33620应用于分布式电源系统
  • Jenkins X + AI:重塑云原生时代的持续交付范式
  • Docker部署Flask应用
  • Android14音频子系统-Linux音频子系统ALSA
  • 微信小程序 / UNIAPP --- 阻止小程序返回(顶部导航栏返回、左 / 右滑手势、安卓物理返回键和调用 navigateBack 接口)
  • 服务器性能优化通用方案
  • 文档处理控件Aspose.Words教程:在.NET中将多页文档转换为单个图像
  • 【开源解析】基于PyQt5的智能费用报销管理系统开发全解:附完整源码
  • Golang单例实现
  • LVS-NAT负载均衡群集实战:原理、部署与问题排查
  • 小程序快速获取url link方法,短信里面快速打开链接
  • Spark Streaming 与 Flink 实时数据处理方案对比与选型指南
  • Flink2.0 配置 historyserver
  • 15个AI模拟面试平台 和 简历修改 / 真人面试平台
  • 云计算产业链
  • 用wordpress建日语外贸网站的优势
  • C# Avalonia 绑定模式 Mode 的区别,它们的应用场景
  • spring中的@Cacheable缓存
  • MicroPython网络编程:AP模式与STA模式详解
  • 【笔记——李沐动手学深度学习】2.3 线性代数
  • 【Python练习】012. 使用字符串的upper()方法将字符串转换为大写
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的美食菜单社交化营销创新研究
  • 音频转换芯片DP7344兼容CS4344双通道24位DA转换器技术资料
  • 宠物养成小游戏流量主微信小程序开源
  • 小米互联应用曝高危漏洞,攻击者可绕过认证获取设备完全控制权
  • 使用GithubActions和腾讯CloudBase自动发布静态网页
  • 暴雨信创电脑代理商成功中标长沙市中医康复医院
  • 019 高校心理教育辅导系统技术解析:构建心理健康守护平台