zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

深入实践Spring Boot2.1.4 MySQL测试

2023-03-14 10:14:32 时间

2.1.4 MySQL测试

现在,为了验证上面设计的正确性,我们用一个实例来测试一下。

首先,增加一个使用JPA的配置类,如代码清单2-6所示。其中@EnableTransac-tionManagement启用了JPA的事务管理;@EnableJpaRepositories启用了JPA资源库并指定了上面定义的接口资源库的位置;@EntityScan指定了定义实体的位置,它将导入我们定义的实体。注意,在测试时使用的JPA配置类可能与这个配置略有不同,这个配置的一些配置参数是从配置文件中读取的,而测试时使用的配置类把一些配置参数都包含在类定义中了。

代码清单2-6 JPA配置类

@Order(Ordered.HIGHEST_PRECEDENCE)

@Configuration

@EnableTransactionManagement(proxyTargetClass = true)

@EnableJpaRepositories(basePackages = "dbdemo.**.repository")

@EntityScan(basePackages = "dbdemo.**.entity")

public class JpaConfiguration {

 

    @Bean

    PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){

        return new PersistenceExceptionTranslationPostProcessor();

    }

 

}

其次,在MySQL数据库服务器中创建一个数据库test,然后配置一个可以访问这个数据库的用户及其密码。数据库的表结构可以不用创建,在程序运行时将会按照实体的定义自动创建。如果还没有创建一个具有完全权限访问数据库test的用户,可以在连接MySQL服务器的查询窗口中执行下面指令,这个指令假设你将在本地中访问数据库。

grant all privileges on test.* to 'root'@'localhost' identified by '12345678';

然后,在Spring Boot的配置文件application.yml中使用如代码清单2-7所示的配置,用来设置数据源和JPA的工作模式。

代码清单2-7 数据源和JPA配置

spring:

    datasource:

        url: jdbc:mysql:// localhost:3306/test?characterEncoding=utf8

        username: root

        password: 12345678

    jpa:

        database: MYSQL

        show-sql: true

    #Hibernate ddl auto (validate|create|create-drop|update)

        hibernate:

            ddl-auto: update

            naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy

        properties:

            hibernate:

                dialect: org.hibernate.dialect.MySQL5Dialect

配置中将ddl-atuo设置为update,就是使用Hibernate来自动更新表结构的,即如果数据表不存在则创建,或者如果修改了表结构,在程序启动时则执行表结构的同步更新。

最后,编写一个测试程序,如代码清单2-8所示。测试程序首先初始化数据库,创建一个部门,命名为“开发部”,创建一个角色,命名为admin,创建一个用户,命名为user,同时将它的所属部门设定为上面创建的部门,并将现有的所有角色都分配给这个用户。然后使用分页的方式查询所有用户的列表,并从查到的用户列表中,打印出用户的名称、部门的名称和第一个角色的名称等信息。

代码清单2-8 MySQL测试程序

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = {JpaConfiguration.class})

public class MysqlTest {

    private static Logger logger = LoggerFactory.getLogger(MysqlTest.class);

 

    @Autowired

    UserRepository userRepository;

    @Autowired

    DepartmentRepository departmentRepository;

    @Autowired

    RoleRepository roleRepository;

 

    @Before

    public void initData(){

        userRepository.deleteAll();

        roleRepository.deleteAll();

        departmentRepository.deleteAll();

 

        Department department = new Department();

        department.setName("开发部");

        departmentRepository.save(department);

        Assert.notNull(department.getId());

 

        Role role = new Role();

        role.setName("admin");

        roleRepository.save(role);

        Assert.notNull(role.getId());

 

        User user = new User();

        user.setName("user");

        user.setCreatedate(new Date());

        user.setDeparment(department);

 

        List<Role> roles = roleRepository.findAll();

        Assert.notNull(roles);

        user.setRoles(roles);

 

        userRepository.save(user);

        Assert.notNull(user.getId());

    }

 

    @Test

    public void findPage(){

        Pageable pageable = new PageRequest(0, 10, new Sort(Sort.Direction.ASC,

"id"));

        Page<User> page = userRepository.findAll(pageable);

        Assert.notNull(page);

        for(User user : page.getContent()) {

            logger.info("====user==== user name:{}, department name:{}, role

name:{}",

                user.getName(), user.getDeparment().getName(), user.getRoles().

get(0).getName());

        }

    }

}

好了,现在可以使用JUnit来运行这个测试程序了,在IDEA的Run/Debug Conf?iguration配置中增加一个JUint配置项,模块选择mysql,工作目录选择模块所在的根目录,程序选择dbdemo.mysql.test.MysqlTest,并将配置项目名称保存为mysqltest,如图2-3所示。

用Debug方式运行测试配置项目mysqltest,可以在控制台中看到执行的过程和结果。如果状态栏中显示为绿色,并且提示“All Tests passed”,则表示测试全部通过。在控制台中也可以查到下列打印信息:

dbdemo.mysql.test.MysqlTest - ====user==== user name:user, department name:开发部, role name:admin

这时如果在MySQL服务器中查看数据库test,不但可以看到表结构都已经创建了,还可以看到上面测试生成的一些数据。

这是不是很激动人心?在Spring Boot使用数据库,就是可以如此简单和有趣。到目前为止,我们不仅没有写过一条查询语句,也没有实现一个访问数据库的方法,但是已经能对数据库执行所有的操作,包括一般的增删查改和分页查询。

 

图2-3 JUint测试配置