数据库假数据插入 template-db-faker

项目简介

一个向db中插入假数据的模板,基于 springboot + mybatis 构建。

github地址:https://github.com/chy1984/template-db-faker

随机数据生成组件:使用国人开源的 common-random

 

效果

在这里插入图片描述
在这里插入图片描述
 

使用示例

我提供了2个示例:t_user、t_student,可按照以下步骤使用

1、执行 resources/sql脚本/DDL_user.sql 建表

2、修改 yml 中的数据库连接配置

3、执行 com.chy.template.db.faker.service 下对应的单元测试,往db中插入假数据

 

向自定义的数据表中插入假数据

1、创建数据表,并在entity包下创建对应的实体类

2、在mapper包下创建对应的mapper接口,并在 resources/mapper 下编写对应的xml映射文件

//继承DbFakerMapper,泛型指定对应的实体类,无需定义方法
public interface UserMapper extends DbFakerMapper<User> {

}
<!-- 需要实现 DbFakerMapper 的2个方法:①批量插入,②清空表 -->

<?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="com.chy.template.db.faker.mapper.UserMapper">

    <insert id="batchInsert">
        insert ignore into t_user (`username`, `tel`, `address`, `birthday`) values
        <foreach collection="list" item="user" separator=",">
            (#{user.username}, #{user.tel}, #{user.address}, #{user.birthday})
        </foreach>
    </insert>

    <delete id="truncateTable">
        truncate table t_user
    </delete>

</mapper>

3、在 service.impl 包下编写对应的service

/**
 * 继承 AbstractDbFakerService,泛型指定对应的实体类
 * 实现 getMapper()、generateFaker() 2个方法,根据需要选择重写 getBatchCount() 方法
 */
@Slf4j
@Service
public class UserDbFakerService extends AbstractDbFakerService<User> {

    @Resource
    private UserMapper userMapper;

    @Override
    protected DbFakerMapper<User> getMapper() {
        return userMapper;
    }

    @Override
    public int getBatchCount() {
        return 2000;
    }

    @Override
    public User generateFaker() {
        //随机中文用户名,最大长度8个汉字
        String username = PersonInfoSource.getInstance().randomChineseNickName(8);
        String tel = PersonInfoSource.getInstance().randomChineseMobile();
        String address = AreaSource.getInstance().randomAddress();
        //2000年往前30年内的一个随机日期
        Date birthday = DateTimeSource.getInstance().randomPastDate(LocalDate.of(2000, 1, 1), 365 * 30L);

        return User.builder()
                .username(username)
                .tel(tel)
                .address(address)
                .birthday(birthday)
                .build();
    }

}

4、编写对应的单元测试,往db插入假数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class UserDbFakerServiceTest {

    @Resource
    private UserDbFakerService userDbFakerService;

    @Test
    public void test() {
        //清空已有数据
        userDbFakerService.cleanAllFaker();
        //插入新数据
        userDbFakerService.batchInsertFaker(1000000);
    }

}

 

说明

  • 插入使用的是insert ignore into,先检查主键和唯一键是否已存在,已存在则略过,不存在才插入。
  • 单元测试中,可根据需要选择是否先清空表数据再插入。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值