MyBatis是一个持久层框架,简单来说 MyBatis是更简单的操作和读取数据库⼯具。
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.4
mysql
mysql-connector-java
5.1.38
runtime
如果是SpringBoot项目可以直接在创建项目的时候进行勾选
配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件 application.yml
#连接数据库
spring:
datasource:
url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
username: root
password: ""
driver-class-name: com.mysql.cj.jdbc.Driver
#配置mybatis
mybatis:
mapper-locations: classpath:mybatis/**Mapper.xml
属性名称要和数据库的字段名称对应
@Data
public class User {
private Integer id;
private String username;
private String password;
private String photo;
private Date createTime;
private Date updateTime;
}
@Mapper
public interface UserMapper {
public List getAll();
}
//curd
namespace指的就是接口类的位置
@Service
public class UserService {
@Resource
private UserMapper userMapper;
public List getAll() {
return userMapper.getAll();
}
}
@RestController
@RequestMapping("/u")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/getall")
public List getAll(){
return userService.getAll();
}
}
简单Mybatis使用已经完成
insert into userinfo(username,password,photo,state)
values(#{username},#{password},#{photo},1)
返回字典映射:resultMap
column是数据字段,property是类属性名
${}有可能会引发sql注入问题,能用#{}则用#{}
insert into user(
username,
password,
nickname,
sex,
birthday,
head
) values (
#{username},
#{password},
#{nickname},
#{sex},
#{birthday},
#{head}
)
前端传来的对象有可能有些属性为null,如果还是照常进行插入,将可能不会触发数据库字段的default属性。
if如果会真则会保留值,否则删除
之前的插⼊⽤户功能,只是有⼀个 sex 字段可能是选填项,如果所有字段都是⾮必填项,就考虑使⽤
标签结合 标签,对多个字段都采取动态⽣成的⽅式。
标签中有如下属性:
样例:
在上面的示例中,如果传入的参数中name不为null,则查询条件中会包含AND name = #{name};如果age不为null,则查询条件中会包含AND age = #{age};如果email不为null,则查询条件中会包含AND email = #{email}。这样就可以根据输入参数灵活地构建查询条件,避免了硬编码的弊端。
类似
对集合进⾏遍历时可以使⽤该标签。标签有如下属性:
示例
delete from article
where id in
#{item}