spring boot整合mybatis+mybatis plus
创建项目
使用idea创建spring boot项目
项目结构如下图所示
项目基本依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
可以在项目创建过程中选择必须的依赖,项目创建完成后,所选择的依赖如下:
在application.yml文件配置数据源
spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://localhost:3306/feeling?serverTimezone=Asia/Shanghai
username: root
password: root
dbcp2:
# 当这个池被启动时初始化的创建的连接个数,起始生效版本:1.2
initial-size: 10
# 可以在这个池中同时被分配的有效连接数的最大值,如设置为负数,则不限制
max-total: 5
# 可以在池中保持空闲的最大连接数,超出设置值之外的空闲连接将被回收,如设置为负数,则不限制
max-idle: 5
# (如果没有可用连接)池在抛出异常前等待的一个连接被归还的最大毫秒数,设置为-1则等待时间不确定
max-wait-millis: 5000
# 可以在池中保持空闲的最小连接数,超出设置值之外的空闲连接将被创建,如设置为0,则不创建
min-idle: 2
整合mybatis-plus
添加依赖
<!--mybatis-puls-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
配置
在spring boot项目启动类(或者其它项目配置类中)中添加mapper包扫描@MapperScan("com.zcc.feeling.mapper")
@SpringBootApplication
@MapperScan("com.zcc.feeling.mapper")
public class FeelingApplication {
public static void main(String[] args) {
SpringApplication.run(FeelingApplication.class, args);
}
}
使用示例
创建实体类
此处创建实体类借助了lombok插件
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long userId;
private String username;
private String password;
private Gender gender;
private Date createDate;
}
创建mapper
public interface UserMapper extends BaseMapper<User> {
}
测试
测试基类
@SpringBootTest
public class FeelingApplicationTests {
@Autowired
protected UserMapper userMapper;
}
测试类
此处,测试类继承测试基类,依赖注入在测试基类中实现.
public class UserMapperTest extends FeelingApplicationTests {
private static final Logger log= LoggerFactory.getLogger(UserMapperTest.class);
@Test
public void testSelectById(){
User user = userMapper.selectById(1L);
System.out.println(user);
}
@Test
public void testInsertUser(){
User user=new User();
user.setUsername("rose");
user.setPassword("123456");
user.setGender(Gender.FEMALE);
user.setCreateDate(new Date());
userMapper.insert(user);
}
}
枚举处理
枚举类如下:
public enum Gender {
MALE(0,"男"),FEMALE(1,"女");
@EnumValue
private Integer code;
private String desc;
private Gender(Integer code,String desc){
this.code=code;
this.desc=desc;
}
@Override
public String toString() {
return this.desc;
}
}
在application.yml文件中配置枚举转换
mybatis-plus:
type-enums-package: com.zcc.feeling.domain.enums
此处只展示一种处理方式,其它处理方式详见mybatis-plus官网文档.
mybatis-plus枚举处理
整合mybatis
添加依赖
需要特别注意的是,如果已经添加了mybatis-plus的依赖,则此处不用再添加mybatis依赖
和mybatis与spring 整合依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--mybatis与spring 整合依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
配置
在application.yml文件中添加别名配置
mybatis-plus:
type-aliases-package: com.zcc.feeling.domain
注意:如果在测试过程中出现mapper.xml文件无法映射的问题,再排除其他可能之后,可以在application.yml文件中配置mapper文件映射.
mybatis-plus:
#加载mapper映射文件
mapper-locations: classpath:mapper/*Mapper.xml
使用示例
实体类
由于是在mybatis plus的基础上使用mybatis,所以此处实体类仍然使用之前的User
实体类.
mapper
我们可以直接在mapper中添加自定义的方法接口(以下代码只是示例,此方法完全可以依靠mybatis plus自带方法实现).
public interface UserMapper extends BaseMapper<User> {
User selectUserByNameAndPwd(@Param("name") String username, @Param("pwd") String password);
}
mapper.xml
在spring boot项目中,我们建议是将mapper映射文件放到resources文件夹下,便于管理.
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用
namespace为接口路径
-->
<mapper namespace="com.zcc.feeling.mapper.UserMapper">
<select id="selectUserByNameAndPwd" resultType="user">
select *from user where username=#{name} and password=#{pwd};
</select>
</mapper>
测试
@Test
public void testSelectUserByNameAndPwd(){
User user = userMapper.selectUserByNameAndPwd("rose", "123456");
System.out.println(user);
}
其它额外配置
添加日志
引入依赖
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
添加日志记录文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
# 设置日志输出级别DEBUG,INFO,WARN,ERROR,FATAL
# 把日志输出在控制台上
log4j.rootLogger=warn, stdout
添加p6spy
引入依赖
<!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.5</version>
</dependency>
添加spy.properties文件
#p6spy\u7528\u6765\u63A2\u6D4B\u751F\u6210\u7684SQL\u8BED\u53E5\u4E2D\u7684?\u7684\u771F\u5B9E\u503C
driverlist=com.mysql.cj.jdbc.Driver
#在控制台多行打印
logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
#在控制台单行打印
#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss
appender=com.p6spy.engine.spy.appender.StdoutLogger
修改数据源配置
spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://localhost:3306/feeling?serverTimezone=Asia/Shanghai
username: root
password: root