SpringBoot-集成MyBatis

ORM框架发展至今,基本上就剩两家了,一个是宣称可以不用写一句 Sql 的 Hibernate,一个是可以灵活调试动态 Sql 的 Mybatis ,两者各有特点,在企业级系统开发中可以根据需求灵活使用。

注解版集成

快速构建一个SpringBoot项目,并添加如下依赖:

>
	>org.mybatis.spring.boot>
	>mybatis-spring-boot-starter>
	>2.1.0>
>
>
	>mysql>
	>mysql-connector-java>
	>runtime>
>

application.properties添加配置信息:

mybatis.type-aliases-package=com.example.model

spring.datasource.url=jdbc:mysql://192.168.145.165:3306/chapter05?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中。

在启动类中添加对 mapper 包扫描 @MapperScan

@SpringBootApplication
@MapperScan("com.example.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

做完以上操作后,我们就已经集成了mybatis,下面我们写一个注解版的UserMapper来操作表中的数据。

创建tb_user表:
SpringBoot-集成MyBatis_第1张图片
注意pass_word和user_name这两个字段我们模仿实际的生产环境,用了下划线分割。

创建建UserEntity实体类:

@Data
public class UserEntity {
    private String id;
    private String userName;
    private String passWord;
    private String address;
    private String email;
    private Integer level;
}

创建UserMapper接口:

public interface UserMapper {
    @Select("SELECT id,user_name,pass_word,address,email,level FROM tb_user")
    @Results({
        @Result(property = "userName",column = "user_name"),
        @Result(property = "passWord",column = "pass_word")
    })
    List<UserEntity> getAll();

    @Select("SELECT id,user_name,pass_word,address,email,level FROM tb_user WHERE id=#{id}")
    @Results({
        @Result(property = "userName",column = "user_name"),
        @Result(property = "passWord",column = "pass_word")
    })
    UserEntity getOne(String id);

    @Insert("INSERT INTO tb_user(id,user_name,pass_word,address,email,level) VALUES(#{id},#{userName},#{passWord},#{address},#{email},#{level})")
    void insertUser(UserEntity userEntity);

    @Update("UPDATE tb_user SET user_name = #{userName},pass_word = #{passWord} WHERE id = #{id}")
    void updateUser(UserEntity userEntity);

    @Delete("DELETE FROM tb_user WHERE id = #{id}")
    void deleteUser(UserEntity userEntity);

}

@Select:主要在查询的时候使用,查询类的注解,所有的查询均使用这个
@Insert:插入数据库时使用,直接传入实体类会自动解析属性到对应的值
@Update:所有的更新操作 SQL 都可以使用 @Update
@Delete:处理数据删除

@Results@Result 注解
这两个注解配合来使用,主要作用是将数据库中查询到的数值转化为具体的字段,修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。

更多注解属性点击这里查看

接着编写Controller类,写几个api接口,调用测试mapper中的方法:

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    UserMapper userMapper;

    @PostMapping("getAll")
    public List<UserEntity> getAll(){
        return userMapper.getAll();
    }

    @PostMapping("getOne")
    public UserEntity getOne(@RequestBody UserEntity userEntity){
        return userMapper.getOne(userEntity.getId());
    }

    @PostMapping("insertUser")
    public UserEntity insertUser(@RequestBody UserEntity userEntity){
        userMapper.insertUser(userEntity);
        return userEntity;
    }

    @PostMapping("updateUser")
    public UserEntity updateUser(@RequestBody UserEntity userEntity){
        userMapper.updateUser(userEntity);
        return userEntity;
    }

    @PostMapping("deleteUser")
    public UserEntity deleteUser(@RequestBody UserEntity userEntity){
        userMapper.deleteUser(userEntity);
        return userEntity;
    }
}

点击这里获取示例源码

你可能感兴趣的:(Spring,Boot学习记录)