Mybatis-Plus的应用及思考

一. 背景和理念

国产最受欢迎的开源框架
mybatis的增强框架,不影响mybatis的原始使用

二. 作用

简化mybatis的开发
简单数据库操作可以不用写mapper.xml

三. 阅读本文希望达到的目的

只花一个小时(可能更短)就简化你的项目开发的一大块时间。

四. 使用方法

4-1. pom.xml增加maven引用

现在一般都用springboot,就直接写和springboot结合的写法:

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1</version>
    </dependency>
4-2. mapper接口继承BaseMapper接口

用过springdata-jpa的应该比较熟悉这种接口写法,如下所示:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zyxk.uetplatform.pojo.po.DemoPo;

@Repository
public interface DemoMapper extends BaseMapper<DemoPo> {

}

4-3. Entity加上注解

用@TableName,@TableId,@TableField等字段和数据库产生关联,例如:

import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@TableName("t_test")//mybatis plus注解:对应的表名。类名和数据库名一致,可以不写
@NoArgsConstructor @AllArgsConstructor//lombok注解:添加无参构造函数、添加全参构造函数
@Getter @Setter//lombok注解:添加get、set方法
public class DemoPo {

	@TableId(type=IdType.ASSIGN_UUID)//mybatis plus注解:表主键
	private String id;
	
	private Integer age;
	
	private String name;
	
	@TableField("createtime")//字段名称和数据库字段不一致时需要使用TableField注解
	private Date createTime;
	
	@TableField(exist=false)//mybatis plus注解:该字段在数据表中没有对应字段
	private String className;
}
4-4. service层直接使用内置方法
import com.zyxk.uetplatform.mapper.DemoMapper;
import com.zyxk.uetplatform.pojo.dto.DemoDto;
import com.zyxk.uetplatform.pojo.po.DemoPo;
import com.zyxk.uetplatform.pojo.po.User;
import lombok.extern.log4j.Log4j2;

@Log4j2
@Service
public class DemoService {
	
	@Autowired
	private DemoMapper demoMapper;

	public List<DemoPo> test() {
		//直接使用mybatis plus提供的常用简单方法
		return demoMapper.selectList(null);
	}
	
	@Transactional
	public int save() {
		log.info("插入测试数据");
		DemoPo ds = new DemoPo(null, 13, "王五", new Date(), null);
		return demoMapper.insert(ds);
		
	}
	
}

五. 常用方法

5-1. 增

这个用法比较单一,需要注意的是主键可以用mybatis自动生成的uuid(上面的Entity中的@TableId(type=IdType.ASSIGN_UUID)在起作用)

  • demoMapper.insert(NewEntity)

删除、更新用法也比较简单

5-2. 删
  • mapper.deleteById(id)
  • mapper.delete(QueryWrapper)
    例如
//1. 封装where条件
DemoPo demo_where = new DemoPo();
demo_where.setName("王五");
//2. 按条件删除
mapper.delete(new QueryWrapper<DemoPo>(demo_where))
5-3. 改
  • mapper.updateById(SetEntity)
  • mapper.update(SetEntity, QueryWrapper)
    例如
//1. 封装where条件
DemoPo demo_where = new DemoPo();
demo_where.setName("王五");
//2. 封装set语句
DemoPo demo_set = new DemoPo();
demo_set.setAge(22);
//3. 根据where条件更新set语句(不set的字段不更新,而不是set成null)
mapper.update(demo_set, new QueryWrapper<DemoPo>(demo_where))
5-4. 查

加粗的是最常用的三个,都比较简单就不写示例了

  • mapper.selectById(id)
  • mapper.selectBatchIds(idList)
  • mapper.selectList(QueryWrapper)
  • mapper.selectCount(QueryWrapper)
  • mapper.selectOne(QueryWrapper)

六. 在项目中的注意事项

除了前面提到的常用方法,其他方法不建议使用,例如
mapper.selectList(new QueryWrapper().eq(column, val))
mapper.delete(new QueryWrapper().eq(column, val))
mapper.update(new QueryWrapper().eq(column, val))

原因

  1. 上面这些方法中的出现的column不容易暴露错误(都是字符串,只要程序不执行到这一步,就发现不了错误)
  2. Mybatis虽然不是完全的orm框架(相比较hibernate),但如果我们不在代码里出现数据库字段,在一定程度上还算是面向对象开发的,所以上面这种直接在代码里写数据库字段的情况尽量不要出现。
  3. 不利于迁移数据库(很多人说基本没遇到过数据库迁移,那只是很幸运,我就遇到过两次数据库迁移,极为痛苦的经历)。
  4. 看过Mybatis-plus的应该知道,Mybatis-plus远不止上面示例的这些简单用法(上面介绍的这些用法几乎不用任何教程,看api就大概知道怎么用),为什么我不推荐其他很多高级用法呢,原因很简单:学习成本大(很多时候我们就是为了学一个“简化开发”的东西,结果学习的过程却极为“不简化”,也是讽刺的很)。所以我采用了一个简单的策略:只吃尖端最甜的那一口,而Mybatis-plus作为一个Mybatis增强工具正好也允许我们这么干,而不带来额外的风险。
  5. 那你可能会问了,那大部分稍微复杂一点查询的怎么办。原生Mybatis怎么写就怎么写咯~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值