spring 集成 mybatis plus
gradle 依赖
compile group: 'org.springframework', name: 'spring-context', version: '5.2.1.RELEASE'
compile group: 'org.springframework', name: 'spring-jdbc', version: '5.2.1.RELEASE'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.18'
compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.7.0'
compile group: 'com.baomidou', name: 'mybatis-plus', version: '3.2.0'
起步
用 java config 的方式启动 spring:
AppConfig.java
@Configuration
@ComponentScan(basePackages = "com.codve")
@EnableTransactionManagement
@MapperScan("com.codve.dao")
public class AppConfig {
}
@MapperScan 用于扫描 Mapper 接口.
配置 mybatis
在 resources 目录下添加 mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="SLF4J"/>
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
配置数据库:
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/pro_spring");
dataSource.setUsername("root");
dataSource.setPassword("");
dataSource.setInitialSize(5);
return dataSource;
}
配置事务管理:
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
配置 mybatis plus
@Bean
public MybatisSqlSessionFactoryBean sqlSessionFactory() throws IOException {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setTypeAliasesPackage("com.codve.model");
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:mapper/*.xml");
factoryBean.setMapperLocations(resources);
factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
return factoryBean;
}
setTypeAliasesPackage() 设置模型的包名
setMapperLocations() 设置包含SQL的 xml 文件, 如果没有的话, 可以省略这一步.
配置完成, 开始编写业务代码
创建表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`(
`user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(64) NOT NULL DEFAULT '',
`user_birthday` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`user_id`)
) AUTO_INCREMENT=1;
初始化数据
INSERT INTO `user` VALUES (1, 'Jimmy', 807724800000);
INSERT INTO `user` VALUES (2, 'Alice', 901900800000);
INSERT INTO `user` VALUES (3, 'James', 844099200000);
创建 model 层
User.java
@Data
@TableName("user")
public class User {
@TableId(value="user_id", type= IdType.AUTO)
private Long id;
@TableField(value = "user_name", insertStrategy = NOT_EMPTY)
private String name;
@TableField(value = "user_birthday", insertStrategy = NOT_NULL)
private Long birthday;
}
@TableName("user") 表示表名.
@TableId 表示主键, value 表示数据库中字段的名字, 如果与属性名一致, 可以省略. type 表示主键生成方式, 这里选择自动生成主键
@TableField 表示列, insertStrategy 表示插入策略, 这里选择只有 name 不为空时, 才插入.
创建 dao 层
UserMapper.java
public interface UserMapper extends BaseMapper<User> {
}
这一层与 jpa repository 非常相似, 继承了 BaseMapper, 就有了很多 CRUD 方法.
创建 service 层
UserService.java
public interface UserService {
User selectById(Long id);
}
创建 service.impl 层
UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
private UserMapper userMapper;
@Autowired
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public User selectById(Long id) {
return userMapper.selectById(id);
}
}
测试
使用 junit5 测试
UserServiceImplTest.java
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfig.class)
class UserServiceImplTest {
@Autowired
private UserService userService;
@Test
public void selectByIdTest() {
User user = userService.selectById(1L);
assertNotNull(user);
System.out.println(user.toString());
}
}
最后测试通过, 并输出了 id = 1 的用户信息, 任务完成.