【mybatis plus】mybatis plus的mapper和service的一站式开发教程
mybatis plus是一个很好用的对Mybatis增强的框架,可以通过这个框架,对于简单的SQL,可以直接通过mybatis plus提供的mapper和servcie构造出相同的效果,此外mybatis plus还支持lambda,减少了在Wrapper里直接写字符串常量可能会带来的bug。即使对于双表,三表联查,如果不是很复杂,阿里也建议使用mybatis plus,我个人理解是因为myb
mybatis plus是一个很好用的对Mybatis增强的框架,可以通过这个框架,对于简单的SQL,可以直接通过mybatis plus提供的mapper和servcie构造出相同的效果,此外mybatis plus还支持lambda,减少了在Wrapper里直接写字符串常量可能会带来的bug。即使对于双表,三表联查,如果不是很复杂,阿里也建议使用mybatis plus,我个人理解是因为mybatis的xml中的sql无法debug,也增加了代码维护的复杂性。
1,api
本文的目的就是教新手小白怎么去开发mybatis plus的mapper和service,两者的区别主要是后者提供的功能更加完善和复杂一些,mapper的api分别如下
service的api如下
都是很简单易懂的api,根据名字基本就知道是什么意思了。如果对api还有问题可以具体的去查一下,
2,依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
3,DO
DO需要在类名上映射表名,需要在类的字段上映射表字段名。
需注意的是,默认的,mybatis plus会对类的字段名和表的字段名进行驼峰和下划线之间的映射,形如updateTime自动映射为update_time。如果不满足这个,一定要加入@TableField(value = “xxx”)进行指定表的字段名,否则会报错。如果满足则可以不写。但是@TableId和@TableName不可以省略。
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@TableName("person")
public class PersonDO implements Serializable {
private static final long serialVersionUID = 2031518137680720100L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(value = "name")
private String name;
@TableField(value = "update_time")
private Date update_time;
}
驼峰的自动映射也可以在配置中关闭
mybatis-plus:
configuration:
#mybatis-plus配置控制台打印完整带参数SQL语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#关闭驼峰映射
map-underscore-to-camel-case: false
4,Mapper
声明一个接口,注入spring,即可使用mapper去调用数据库了
示例如下
@Mapper
@Component
public interface PersonMapper extends BaseMapper<PersonDO> {
}
5,service
servcie是mapper的升级版,可以支持更多更复杂的api。使用mybatis plus的servcie需要声明一个接口,一个实现类,当然了,都是不需要你去写代码实现具体方法的。
举例如下
接口
public interface PersonService extends IService<PersonDO> {
}
实现类
@Component
public class PersonServiceImpl extends ServiceImpl<PersonMapper, PersonDO> implements PersonService {
}
6,使用
使用的话,就是通过mapper或者service调用api,去增删改查了,查的话往mapper或者servcie里丢wrapper,这里我建议使用lambdawrapper,这样可以不用写字段名的字符串,在DO的字段名修改时,只用改DO中的字段名即可,而不用满项目的去找这个字段在哪里用过。更可以在写代码时,通过静态编译就找到错误,如类型传入错误,而普通wrapper则无法做到这一点,读者可以自己去试一下。
lambda wrapper使用如下
LambdaQueryWrapper<PersonDO> wrapper = Wrappers.lambdaQuery();
wrapper.eq(PersonDO::getName,"王小波");
PersonDO personDO = personService.getOne(wrapper);
普通wrapper举例
QueryWrapper<PersonDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("update_time",new Date());
personService.getOne(queryWrapper);
需要注意的是,Mybatis plus在分页查询时可能会遇到分页查询却查出全量数据的坑,解决办法可参考 【踩坑专栏】Mybatis plus分页查询查到了全量数据
这篇教程到这里就结束了,以后如果遇到好用的框架还会继续写文章的
更多推荐
所有评论(0)