5.5. 整合mybatis
5.5.1. mybatis
1. SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官网自己实现了。在项目的 pom.xml 文件中加入如下依赖:
<!--mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency>
2. 配置 application.yml ,常用配置如下:
# mybatis配置 mybatis: # 实体类别名包路径 type-aliases-package: com.itterence.pojo # 映射文件路径 # mapper-locations: classpath:mappers/*.xml configuration: # 控制台输出执行sql log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3. 配置Mapper扫描
需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加 @Mapper 注解,才能被识别。
package com.itterence.mapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper { }
或者,我们也可以不加注解,而是在启动类上添加扫描包注解(推荐):
@SpringBootApplication @MapperScan("com.itterence.mapper") public class Application { public static void main(String[] args) { // 启动代码 SpringApplication.run(Application.class, args); } }
以下代码示例中,我们将采用@MapperScan扫描方式进行。
5.5.2. 通用mapper
1. 通用Mapper的作者也为自己的插件编写了启动器,我们直接引入即可。在项目的 pom.xml 文件中加入如下依赖:
<!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency>
注意:一旦引入了通用Mapper的启动器,会覆盖Mybatis官方启动器的功能,因此需要移除对官方Mybatis启动器的依赖。
2. 编写UserMapper 无需任何配置就可以使用了。如果有特殊需要,可以到通用mapper官网看:
https://github.com/abel533/Mapper/wiki/3.config
编写 springboot_demo\src\main\java\com\itterence\mapper\UserMapper.java 如下:
package com.itterence.mapper; import com.itterence.pojo.User; import tk.mybatis.mapper.common.Mapper; public interface UserMapper extends Mapper<User> { }
3. 把启动类上的@MapperScan注解修改为通用mapper中自带的:
4. 在User实体类上加JPA注解
修改 springboot_demo\src\main\java\com\itterence\pojo\User.java 如下:
5. 对 UserService 的代码进行简单改造
@Service public class UserService { @Autowired private UserMapper userMapper; public User queryById(Long id){ //根据id查询 return userMapper.selectByPrimaryKey(id); } @Transactional public void saveUser(User user){ System.out.println("新增用户..."); userMapper.insertSelective(user); } }
5.6. 启动测试
将 HelloController 进行简单改造
@Autowired private UserService userService; /** * 根据id获取用户 * @param id 用户id * @return 用户 */ @GetMapping("/user/{id}") public User queryById(@PathVariable Long id){ return userService.queryById(id); }
我们启动项目,查看:
5.7. Junit测试
1. 在springboot项目中如果要使用Junit进行单元测试,则需要添加如下的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>
2. 在测试包下编写测试类
在测试类上面必须要添加 @SpringBootTest 注解。
编写测试类 springboot_demo\src\test\java\com\itterence\service\UserServiceTest.java
package com.itterence.service; import com.itterence.pojo.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.Date; import static org.junit.Assert.*; @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @Test public void queryById() { User user = userService.queryById(1L); System.out.println("user = " + user); } @Test public void saveUser() { User user = new User(); user.setUserName("test"); user.setName("test"); user.setPassword("123456"); user.setSex(1); user.setAge(20); user.setCreated(new Date()); userService.saveUser(user); } }
测试代码结构如:
5.8. 整合Redis
在 pom.xml 文件中添加如下依赖;
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
配置 application.yml 文件;
spring: redis: host: 192.168.1.105 port: 6379
编写 src\test\java\com\itterence\redis\RedisTest.java 测试代码;
package com.itterence.service; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; import java.util.Set; @RunWith(SpringRunner.class) @SpringBootTest public class RedisTest { @Autowired private RedisTemplate redisTemplate; @Test public void test() { //string字符串 //redisTemplate.opsForValue().set("str", "heima"); redisTemplate.boundValueOps("str").set("heima"); System.out.println("str = " + redisTemplate.opsForValue().get("str")); //hash散列 redisTemplate.boundHashOps("h_key").put("name", "黑马"); redisTemplate.boundHashOps("h_key").put("age", 13); //获取所有域对应的值 Set set = redisTemplate.boundHashOps("h_key").keys(); System.out.println("hash散列所有的域:" + set); List list = redisTemplate.boundHashOps("h_key").values(); System.out.println("hash散列所有的域值:" + list); //list列表 redisTemplate.boundListOps("l_key").leftPush("c"); redisTemplate.boundListOps("l_key").leftPush("b"); redisTemplate.boundListOps("l_key").leftPush("a"); list = redisTemplate.boundListOps("l_key").range(0, -1); System.out.println("列表的值:" + list); //set集合 redisTemplate.boundSetOps("set_key").add("a", "b", "c"); set = redisTemplate.boundSetOps("set_key").members(); System.out.println("集合的元素:" + set); //sorted set有序集合 redisTemplate.boundZSetOps("z_key").add("a", 30); redisTemplate.boundZSetOps("z_key").add("b", 20); redisTemplate.boundZSetOps("z_key").add("c", 10); set = redisTemplate.boundZSetOps("z_key").range(0, -1); System.out.println("有序集合的元素:" + set); } }
运行上述代码测试
6. Spring Boot项目部署
6.1. 项目打包
1. 添加项目的pom.xml插件;在pom.xml要显式的加入插件spring-boot-maven-plugin,否则无法产生 jar 清单文件,导致打出来的 jar 无法使用命令运行;
<build> <plugins> <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.5.RELEASE</version> </plugin> </plugins> </build>
2. 使用maven的命令package打包;
之后在项目下的 target 目录中将有如下jar包:
【注意】在查看打出的 jar 的时候,将发现 jar 包里面包含 jar 包;这样的包称为 fatJar(肥包)
6.2. 运行
运行打出来的包;使用命令: java –jar 包全名 或者写一个 bat 文件,里面包含 java –jar 包全名;这样就可以双击启动应用。
如执行上述打出来的jar的命令为:
java -jar springboot_demo-1.0-SNAPSHOT.jar
测试则可使用浏览器访问:http://localhost/user/8
7. 附录—插件安装
在应用spring boot工程的时候;一般情况下都需要创建启动引导类Application.java和application.yml配置文件,而且内容都是一样的;为了便捷可以安装一个IDEA的插件 JBLSpringBootAppGen 在项目上右击之后可以自动生成启动引导类Application.java和application.yml配置文件。
7.1. 安装插件
打开IDEA的设置界面(按 ctrl+alt+S )之后在插件选项中搜索SpringBoot,安装JBLSpringBootAppGen
7.2. 应用插件
在IDEA中任意一个maven项目或src目录上 右击,选择 JBLSpringBootAppGen 即可。
在如下的界面中输入 启动引导类的名称并根据需要勾选是否要生成application.yml配置文件。
点击 OK 之后,在项目中将发现如下内容: