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表:
注意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;
}
}
点击这里获取示例源码