MybatisPlus

MybatisPlus:可以跟Mybatis一起使用而不互相影响,而且与之相较更为简单,使用时

1》引入MyBatis Plus依赖,替代MyBatis。
2》定义Mapper接口并继承baseMapper(继承时要指定泛行为是实体类的类型)
3》使用时直接调用增删改查即可

实体类中注解规则


要与表中实际名称相同
@TableName指定表名
主键字段
@TableId(value=“id”,type=IdType.AUTO)除AUTO【自增】还有INPUT【键入】、ASSIGN_ID【分配ID,默认为雪花算法(不添加注解默认分配,默认可以在application.yaml中更改MybatisPlus配置)】
普通字段
@TableField
要与表中实际名称相同,
关键字为名称的要转译注解,
字段前是is要加注解
字段不是表内容@TableField(exist=false)注解


MybatisPlus配置

在application.yaml中更改
MybatisPlus配置项可在官网查询,如别名扫描包、xml文件地址、下划线驼峰映射的开启、id自动更新的方式、更新策略等


条件构造器Wrapper

基于QueryWraaper构建查询条件
 

    @Test
    void  testQueryWraaper(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.select("id","username","info","balance");
        wrapper.like("username","o");
        wrapper.ge("balance",1000);
        List<User> users=userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
    @Test
    void testUpdateByQueryWraaper(){
        //要更新的数据
        User user = new User();
        user.setBalance(2000);
        //更新条件
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("username","jack");
        //执行更新
        userMapper.update(user,wrapper);
    }

set语句特殊的情况

使用UpdateWraaper<User>可以UpdateWraaper<User> user=UpdateWraaper<User>().select(”baln=baln+200“)使用sql语句

    @Test
    void testUpdateWraaper(){
        List<Long> ids = List.of(1L, 2L, 3L);
        UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
                .setSql("balance = balance+200")
                .in("id",ids);
        userMapper.update(null,wrapper);
    }

避免硬编码 

使用LambdaQueryWraaper<User>将.select(" id ","  ","  ")  变成 .select(User::getId,"  ","  ")形式

    @Test
    void  testlambdaQueryWraaper(){
        //构造查询条件
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
                .select(User::getId,User::getUsername,User::getInfo,User::getBalance)
                .like(User::getUsername,"o")
                .ge(User::getBalance,1000);
        //查询
        List<User> users=userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

 

尽量使用LambdaQueryWraaper<User>、LambdaUpdateWraaper<User>避免硬编码

 

自定义SQL

利用MyBatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL剩下的部分

 

    @Test
    void testCustomSqlUpdate(){
        //更新条件
        List<Long> ids = List.of(1L, 2L, 3L);
        int amount=200;
        //定义条件
        QueryWrapper<User> wrapper = new QueryWrapper<User>().in("id",ids);
        //调用自定义sql方法
        userMapper.updateBalanceByIds(wrapper,amount);
    }

接口层声明参数@Param注解声明wraaper变量必须是@Param(Constants.WRAPPER)   ”ew“

void updateBalanceByIds(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper, @Param("amount") int amount);

//void updateBalanceByIds(@Param("ew") QueryWraaper<User> wraaper,int amount);

在其xml实现类中插入用于代替的where操作
     $(ew.customSqlSegment)替代where
 

    <update id="updateBalanceByIds">
        UPDATE user SET balance = balance - #{amount} ${ew.customSqlSegment}
    </update>

IService接口

 


本地接口继承IService接口+本地方法继承ServiceImpl方法
三步走


1>建立接口继承
public interface UserIService extends IService<User> {}
2>建立方法继承
@Service
public class IUserIServiceImpl extends ServiceImpl<UserMapper,User> implements UserIService {
}
3>方法实现
@SpringBootTest
class UserIServiceTest {
    @Autowired
    private UserIService userIService;
    @Test
    void testInsert() {
        User user = new User();
        user.setId(5L);
        user.setUsername("Lucy");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        userIService.save(user);
    }

基于Restful风格实现下面的接口

  • 33
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值