Spring 集成 mybatis plus

1,226 阅读2分钟

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 的用户信息, 任务完成.