赞
踩
目录
在straw-api-user
的test
下,默认就已经存在StrawApiUserApplicationTests
测试类,并且测试类中已经存在contextLoads()
测试方法,先直接执行该方法的单元测试:
由于以上测试中没有任何代码,所以,执行单元测试是应该能通过测试的,如果没有通过测试,一定是开发环境出了问题,例如jar包文件是损坏的,正常的执行效果例如:
当以上测试通过后,自定义方法,执行“连接数据库”的测试:
如果在application.properties
中配置的登录数据库的用户名或密码错误,测试会失败,并且会出现提示:
以上错误的提示信息是:
java.sql.SQLException: Access denied for user 'root1234'@'localhost' (using password: YES)
其中,using password: YES
就表示已经配置了密码,'root1234'@'localhost'
表示使用root1234
作为用户名,登录到了localhost
这台数据库服务器,所以,可以通过以上信息来检查用户名和密码的配置是否正确。
如果数据库的服务没有开启,或者配置的主机信息有误(例如主机名或端口号错误),会出现如下错误:
错误信息是:
- com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
-
- The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
如果测试成功,结果是:
数据库连接池的种类较多,本项目中使用alibaba
的druid
,依赖的参考代码是:
- <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>1.1.23</version>
- </dependency>
先在straw
项目中管理以上依赖,并在straw-api-user
中添加应用依赖。
然后,在straw-api-user
的application.properties
中添加配置:
- spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
- spring.datasource.druid.initial-size=2
- spring.datasource.druid.max-active=10
- spring.datasource.druid.min-idle=2
从 https://robinliu.3322.org:8888/download/demo/straw_v20200904.zip 下载数据库的脚本文件压缩包,解压得到数据库脚本文件,是以.sql
为扩展名的文件。
得到.sql
文件后,为了便于导入,将该文件放到E盘的根目录下(放到其它盘也可以),名为1.sql
。
登录MySQL控制台,使用straw
数据库后,通过以下指令导入数据库脚本:
source e:\1.sql
注意:以上指令不要使用分号表示结束!
当导入成功后,可以看到,已经创建了多张数据表(其中,某些数据表中还有数据):
Mybatis Plus(偶尔简称为MP)是Mybatis的增强版,它不是Mybatis官方的框架,该框架已经定义好了常规的增删改查,例如插入数据、根据id删除数据、根据id修改数据、根据id查询数据、查询表中所有数据等功能,所以,在使用Mybatis Plus框架后,这些简单的数据操作都不需要自行编写代码,直接使用即可!
关于Mybatis Plus,依赖的参考代码是:
- <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.3.2</version>
- </dependency>
然后,和此前的操作步骤相同,先在straw
的pom.xml
中管理以上依赖,然后在straw-api-user
中应用以上依赖。
虽然Mybatis Plus已经极大程度的简化了持久层开发,但是,作者并满足于此,他认为每个项目中,针对每张数据表都需要创建Mapper接口文件,还需要创建配置SQL语句的XML文件,每张数据表还需要对应的实体类等等,这些操作是不具备技术含量的,所以,作者还开发了Mybatis Plus Generator(代码生成器)项目,它的作用就是“根据数据表结构”直接创建出所需要的所有基础文件,并存放在对应的包中,文件包括:
关于代码生成器,应该在一个专门的项目中来使用,所以,先在straw
下创建新的straw-generator
子模块项目,这个项目的作用并不参与实际的功能开发,就只是用于生成以上文件的。
在创建子模块项目时,依然使用SpringBoot的创建向导来创建项目:
在创建过程中,暂不勾选任何依赖。
然后,需要添加依赖,所需要的新的依赖的参考代码:
- <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-generator</artifactId>
- <version>3.3.2</version>
- </dependency>
- <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-extension -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-extension</artifactId>
- <version>3.3.2</version>
- </dependency>
- <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-freemarker -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-freemarker</artifactId>
- <version>2.3.3.RELEASE</version>
- </dependency>
- <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.12</version>
- <scope>provided</scope>
- </dependency>

则straw
的pom.xml
文件需要调整为:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.3.3.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>cn.tedu</groupId>
- <artifactId>straw</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>straw</name>
- <description>Demo project for Spring Boot</description>
-
- <packaging>pom</packaging>
-
- <properties>
- <java.version>1.8</java.version>
- <spring-boot.version>2.3.3.RELEASE</spring-boot.version>
- <mybatis.version>2.1.3</mybatis.version>
- <mysql.version>8.0.21</mysql.version>
- <druid.version>1.1.23</druid.version>
- <mybatis-plus.version>3.3.2</mybatis-plus.version>
- <lombok.version>1.18.12</lombok.version>
- </properties>
-
- <!-- 管理依赖 -->
- <dependencyManagement>
- <dependencies>
- <!-- Mybatis Plus Generator:代码生成器 -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-generator</artifactId>
- <version>${mybatis-plus.version}</version>
- </dependency>
- <!-- Mybatis Plus扩展:用于代码生成器 -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-extension</artifactId>
- <version>${mybatis-plus.version}</version>
- </dependency>
- <!-- SpringBoot FreeMarker:用于代码生成器 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-freemarker</artifactId>
- <version>${spring-boot.version}</version>
- </dependency>
- <!-- Lombok:通过注解简化开发 -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>${lombok.version}</version>
- <scope>provided</scope>
- </dependency>
- <!-- Mybatis Plus:简化Mybatis开发 -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>${mybatis-plus.version}</version>
- </dependency>
- <!-- druid:alibaba的数据库连接池 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>${druid.version}</version>
- </dependency>
- <!-- Mybatis -->
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>${mybatis.version}</version>
- </dependency>
- <!-- MySQL -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <scope>runtime</scope>
- <version>${mysql.version}</version>
- </dependency>
- <!-- web:允许项目启动在Tomcat -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- <version>${spring-boot.version}</version>
- </dependency>
- <!-- 单元测试 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <version>${spring-boot.version}</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.junit.vintage</groupId>
- <artifactId>junit-vintage-engine</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>

然后,调整straw-generator
的pom.xml
文件,先设置父级项目:
该项目需要添加的依赖有:
mysql
:需要连接到数据库,分析数据表结构,才可以生成相关的文件;mybatis-plus
系列;spring-boot-starter-freemarker
;lombok
:可以不添加,生成的代码会自动添加lombok
的注解,如果不添加,则生成代码后straw-generator
项目会报错,但是,这些生成的文件也会被移动到实际使用的项目中,所以不添加也不会影响。关于straw-generator
的pom.xml
的代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>cn.tedu</groupId>
- <artifactId>straw</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>cn.tedu</groupId>
- <artifactId>straw-generator</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>straw-generator</name>
-
- <dependencies>
- <!-- MySQL -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <scope>runtime</scope>
- </dependency>
- <!-- Mybatis Plus:简化Mybatis开发 -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- </dependency>
- <!-- Mybatis Plus Generator:代码生成器 -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-generator</artifactId>
- </dependency>
- <!-- Mybatis Plus扩展:用于代码生成器 -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-extension</artifactId>
- </dependency>
- <!-- SpringBoot FreeMarker:用于代码生成器 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-freemarker</artifactId>
- </dependency>
- <!-- Lombok:通过注解简化开发 -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
- </project>

由于straw-generator
并不用于开发实际的功能,所以启动类、单元测试等文件或文件夹都可以直接删除:
然后,将代码生成器的2个文件添加到项目中:
在CodeGenerator.java
文件中,检查顶部的全局属性的值,可能需要修改为自定义的配置值(例如连接数据库的用户名、密码等)。
然后,点击Build
菜单中的Rebuild
选项,如果提示警告是正常的(因为在CodeGenerator.java
中使用了已过期的方法)。
最后,运行CodeGenerator.java
的main()
方法,会出现提示,输入user
表示将生成user
数据表相关的文件:
生成成功时,控制台的输出例如:
并且,在项目的结构中,可以看到生成的文件:
注意:生成的文件中,在mapper
包下的xml
包下的文件是多余的,应该将这个xml
文件夹删掉:
然后,将剩余的生成的文件复制到straw-api-user
项目的对应位置:
最后,把straw-generator
项目中生成的文件全部删除,仅保留用于生成文件的2个文件,以备下次使用:
另外,还需要在straw-api-user
项目中添加Mybaits Plus
相关的依赖:
在straw-api-user
中测试Mybatis Plus的使用,先在StrawApiUserApplication
类的声明之前添加@MapperScan
注解,以指定接口文件的包:
并在
application.properties
中配置XML文件的位置:
在test
的cn.tedu.straw.api.user
包下创建mapper.UserMapperTests
测试类:
然后,在测试类中添加测试方法,以测试Mybatis Plus的insert()
方法:
另外,还可以测试更多Mybatis Plus定义的功能:
- package cn.tedu.straw.api.user.mapper;
-
- import cn.tedu.straw.api.user.model.User;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- @SpringBootTest
- public class UserMapperTests {
-
- @Autowired
- UserMapper mapper;
-
- @Test
- void insert() {
- User user = new User();
- user.setUsername("旺财");
- user.setPassword("1234");
- user.setPhone("13800138002");
- int rows = mapper.insert(user);
- System.out.println("rows=" + rows);
- }
-
- @Test
- void deleteById() {
- Integer id = 1;
- int rows = mapper.deleteById(id);
- System.out.println("rows=" + rows);
- }
-
- @Test
- void updateById() {
- User user = new User();
- user.setId(4);
- user.setPassword("123456");
- user.setGender(1);
- user.setClassId(998);
- int rows = mapper.updateById(user);
- System.out.println("rows=" + rows);
- }
-
- @Test
- void selectById() {
- Integer id = 4;
- User user = mapper.selectById(id);
- System.out.println("user=" + user);
- }
-
- }

Mybatis Plus虽然提供了大量的增删改查方法,使得开发人员不必自行定义增删改查,但是,有些操作使用时也并不方便,例如:
- @Test
- void selectByUsername() {
- QueryWrapper<User> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("username", "大强"); // username='小强'
- User user = mapper.selectOne(queryWrapper);
- System.out.println("user=" + user);
- }
如果查询的条件更加复杂,还要配置排序规则,或者还要配置Limit子句,使用就会更加麻烦,如果还涉及关联表查询,其实,还不如自行配置SQL语句来定义查询的功能!
即使使用了Mybatis Plus,也不影响自行定义数据访问的功能,例如,在UserMapper.java
中添加:
- @Repository
- public interface UserMapper extends BaseMapper<User> {
-
- /**
- * 根据用户名查询用户数据
- * @param username 用户名
- * @return 匹配的用户数据,如果没有匹配的数据则返回null
- */
- User findByUsername(String username);
-
- }
然后,在UserMapper.xml
中配置以上抽象方法映射的SQL语句:
- <select id="findByUsername" resultMap="BaseResultMap">
- SELECT * FROM user WHERE username=#{username}
- </select>
最后,每次定义了新的方法,或修改了任何内容,都应该执行单元测试:
- @Test
- void findByUsername() {
- String username = "小黄";
- User user = mapper.findByUsername(username);
- System.out.println("user=" + user);
- }
业务(Service)是调用持久层,且被外部(例如控制器等其它组件)调用的组件,在大多数据情况下,数据的访问流程是:
业务层主要负责的任务是:确定业务流程(先干什么,后干什么)、业务逻辑(什么情况下能干什么),以保证数据的完整性和安全性!
数据的安全性:数据是否根据所设定的规则而产生或发生变化。
为了实现解耦(通过接口来编程),业务层通常由业务接口(例如IUserService
)和业务实现类(例如UserServiceImpl
)组成,所以,在其它组件中调用业务层时,都会通过接口来声明业务对象!
可以在IUserService
中添加“学生注册”的业务方法:
void registStudent(User user);
然后,在UserServiceImpl
类中实现该方法:
- @Autowired
- UserMapper userMapper;
-
- public void registStudent(User user) {
- // 规则:手机号/用户名必须是唯一的
- // 通过参数user.getUsername()获取注册的用户名
- // 调用User result = userMapper.findByUsername(String username)查询用户信息
- // 判断查询结果result是否为null
- // 是:根据用户名没有找到用户数据,则用户名没有被注册,则允许注册
- // // 调用int rows = userMapper.insert(user)插入用户数据
- // 否:根据用户名找到了用户数据,则用户名已经被注册,则不允许注册
- // // 暂时通过System.out.println()提示错误信息
- }
在test
的cn.tedu.straw.api.user
下创建service.UserServiceTests
测试类,测试业务方法:
- @SpringBootTest
- public class UserServiceTests {
-
- @Autowired
- IUserService service;
-
- @Test
- void registStudent() {
- // 调用注册方法,观察运行结果
- }
-
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。