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