深入实践Spring Boot2.1.4 MySQL测试

    xiaoxiao2024-05-12  98

    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测试配置

    最新回复(0)