- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习 Java Spring Boot。我来自 PHP Laravel,我对框架怀念的一件事是制作数据库播种机和工厂等是多么容易。我试图找出一种方法,我可以播种我的 h2 db,以便每次应用程序进行热重载,它将创建一些数据用于测试。到目前为止,在 SpringBootApplication 文件中我有这个
@Bean
CommandLineRunner commandLineRunner(){
return args -> {
Faker faker = new Faker(new Locale("en-US"));
Employee emp1 = new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress());
Employee emp2 = new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress());
Employee emp3 = new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress());
Employee emp4 = new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress());
Employee emp5 = new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress());
Project proj1 = new Project(faker.app().name(), faker.app().version() ,faker.lorem().sentence());
Project proj2 = new Project(faker.app().name(), faker.app().version() ,faker.lorem().sentence());
Project proj3 = new Project(faker.app().name(), faker.app().version() ,faker.lorem().sentence());
proj1.addEmployee(emp1);
proj2.addEmployee(emp2);
proj3.addEmployee(emp4);
proj3.addEmployee(emp3);
proj3.addEmployee(emp1);
proj3.addEmployee(emp4);
proj3.addEmployee(emp5);
emp1.setProjects(Arrays.asList(proj1, proj2, proj3));
emp2.setProjects(Arrays.asList(proj1));
emp3.setProjects(Arrays.asList(proj2));
emp4.setProjects(Arrays.asList(proj3));
emp5.setProjects(Arrays.asList(proj3));
employeeRepository.save(emp1);
employeeRepository.save(emp2);
employeeRepository.save(emp3);
employeeRepository.save(emp4);
employeeRepository.save(emp5);
projectRepository.save(proj1);
projectRepository.save(proj2);
projectRepository.save(proj3);
};
}
如您所见,它都是硬编码的,但我想知道是否有更好的方法来做到这一点。
例如我想到了这样的事情:
@Bean
CommandLineRunner commandLineRunner(){
return args -> {
int min = 0, max = 1000, rand = 0;
Faker faker = new Faker(new Locale("en-US"));
Employee[] emp = new Employee[max];
Project[] proj = new Project[max];
// Employee and Project are entities and I wanted to be able to iterate and
// have the object get incremented so it would be like emp1, emp2, emp3 etc.
for(int i = 0; i < max; i++)
{
emp[i] = new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress());
proj[i] = new Project(faker.app().name(), faker.app().version() ,faker.lorem().sentence());
}
Random random = new Random();
// here I'm trying to randomly pick from a range of numbers of the previous
// created objects just to make it seem more organic
for(int j = 0; j < max; j++)
{
rand = random.nextInt((max - min) + 1) + min;
proj[j].setEmployees(Arrays.asList(emp[rand]));
emp[j].setProjects(Arrays.asList(proj[rand]));
employeeRepository.save(emp[rand]);
projectRepository.save(proj[rand]);
}
};
以上并没有真正奏效。我想知道是否有人知道更好的解决方案。我什至不确定这是否是我应该播种数据库的地方,或者在架构/设计方面是否有更好的选择。例如,如果我需要使用用户在应用程序中可能具有的不同角色来为我的数据库提供种子,该怎么办。
例如,在 Laravel 中,我可以做这样的事情作为一个连接表(希望这能更多地说明这一点):
foreach($projects as $project)
foreach($employees as $employee)
Project_Employee::create([
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'employee_id' => $employee->id,
'project_id' => $project->id,
]);
感谢任何帮助,谢谢。
编辑:我终于得到了一些工作,但我有另一个问题,它创建空行并且总是在同一个位置,我不确定为什么。两个 map 都没有任何空数据。我不确定我在这里做错了什么,谢谢你的帮助。
这是我的代码:
@Bean
CommandLineRunner commandLineRunner(){
return args -> {
int min = 0, max = 10, rand = 0;
Faker faker = new Faker(new Locale("en-US"));
HashMap<Integer, Employee> mapEmployees = new HashMap<>();
HashMap<Integer, Project> mapProjects = new HashMap<>();
Random random = new Random();
Employee employee = new Employee();
Project project = new Project();
for(int i = 0; i < max; i++)
{
mapEmployees.put(i, new Employee(faker.name().firstName(), faker.name().lastName(), faker.internet().safeEmailAddress()));
mapProjects.put(i, new Project(faker.app().name(), faker.app().version() ,faker.lorem().sentence()));
}
for(int j = 0; j < max; j++)
{
rand = random.nextInt((max - min)) + min;
project.setEmployees(Collections.singletonList(mapEmployees.get(rand)));
employee.setProjects(Collections.singletonList(mapProjects.get(rand)));
employeeRepository.save(employee);
projectRepository.save(project);
}
};
另一个奇怪的事情是有时行数会关闭。每次应该是 10 行,但由于某些原因它可以关闭 1
上述结果中有 9 行。
上述结果中有 10 行。
最佳答案
根据 documentation , Spring Boot 允许您创建数据库模式并在引导时简单地使用两个文件填充它:schema.sql 和 data.sql。这些文件需要位于根类路径中,您可以使用标准 sql 来执行您需要的每个 DDL 或 DML 操作。
例如,我通常在运行单元测试之前使用data.sql 来初始化内存DB 中的H2。这样,我就知道在测试我的存储库时会发生什么。同样的方法也可以用来做你需要的事情
关于Java Spring Boot - 如何像在 PHP Laravel 中一样为数据库播种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69279535/
从 PHP7 开始,为 PRNG 引入了一个新函数:random_int ( http://php.net/manual/en/function.random-int.php ) PHP 手册中没有与
在 .net 核心项目中,我像这样在 Program.cs 文件中播种: var host = BuildWebHost(args); using (var scope = host.Services
我有一张谷歌地图,上面有大约 200 个标记。使用谷歌距离矩阵服务,我可以找到从一个地址到 map 上所有标记的行驶距离。由于 API 限制,我每次调用只能提交 25 个目的地,因此我必须将操作分解为
下面的脚本抛出错误(自定义字段未定义)。我需要以不同的方式传递元素 ID 吗? 我正在尝试使用我要计算的表单字段来为数组播种。它应该迭代数组中的每个表单字段,并用表单元素的值递增 sum 变量。 jQ
我正在学习“Laravel 5 Essentials”中的教程。当我尝试使用命令为我的数据库播种时 php artisan db:seed 我收到错误 [ReflectionException]
我正在关注 docs为 users 表设置种子,该表显示正在使用 User::create class UserTableSeeder extends Seeder { public func
让我首先说明我要完成的任务: 我需要在一定范围内随机生成一组数字 我希望这些数字稍微均匀分布 我需要能够为随机数生成播种,这样,给定一个种子,生成的随机数将始终相同。 在对 drand48()、ran
这个问题在这里已经有了答案: Recommended way to initialize srand? (15 个答案) 关闭 9 年前。 我学习的方法是最初使用 srand(time(NULL))
SQLite 是否支持播种 RANDOM() 的功能与 MySQL 对 RAND() 的处理方式相同? $query = "SELECT * FROM table ORDER BY RAND(" .
我正在使用不支持的 Visual Studio 2010 ,所以我必须播种 default_random_engine .因此,我决定用 rand 播种它如下 srand((unsigned int
在 google OR-tools 库中,“原始”CP-Solver(此处讨论: https://developers.google.com/optimization/cp/original_cp_s
我正在尝试为 AspNetRole 表设置初始系统角色。 播种扩展: public static void EnsureRolesAreCreated(this IApplicationBuilder
我似乎无法弄清楚如何使用 Sequelize 为 ARRAY(ENUM) 播种。当我通过我的应用程序注册用户时,我可以很好地创建一个新用户,但是当我在种子文件中使用 queryInterface.bu
以下代码应创建两个具有相同种子的 Random 对象: System.out.println("System time before: " + System.currentTimeMillis());
尝试从集合中选择伪随机元素时,我看到了非确定性行为,即使 RNG 已播种(示例代码如下所示)。为什么会发生这种情况,我是否应该期望其他 Python 数据类型表现出类似的行为? 注意:我只在 Pyth
关于在 openssl/bn.h 中使用 BN_generate_prime 生成质数的内容,我无法找到答案。另外,我将如何播种此函数使用的任何 PRNG? 单独的问题但与我的代码相关(我正在编写一个
所以,我是 MEAN 堆栈的新手,我在尝试播种 MongoDB 时碰壁了。我正在使用 Mongoose 与数据库进行通信,并且有一堆文档建议我应该能够使用填充的 JSON 文件进行播种。 我尝试过的:
我有一个非常简单的情况:我想使用 testcontainers 测试 AWS 中现有的 mysql 数据库。 我遵循了官方指南( https://www.testcontainers.org/modu
我有一个很长(500K+ 行)的两列电子表格,如下所示: Name Code 1234 A 1234 B 1456 C 4556 A 4556 B 4556
我有一个要播种的数据透视表。除了 PK 和 FK,该表还包含另外两列:Arrival & Departure(类型:时间戳)。我正在使用 Carbon 随机填充前面的列。这是我的代码: $faker
我是一名优秀的程序员,十分优秀!