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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值