MyBatisPlus(1)

目录

一:MyBatisPlus的快速入门

1.1:引入Mybatisplus的依赖

1.2:定义Mapper

1.3:UserMapper.xml中的配置 

二: 常见注解

2.1:常见的注解 

2.1.1:表中IdType的枚举

2.1.2:使用@TableField的常见场景

三:核心功能

3.1:条件构造器

3.1.1:基于QueryWrapper的查询 

 3.1.2:基于UpdateWrapper的更新

3.2:自定义SQL

3.2.1:利用MP构造where条件

3.2.2:自定义SQL方法调用

3.3:IService接口基本用法

1:创建一个service的接口继承IService接口

2:创建Iservice的实现类继承ServiceImpl接口

3:测试类来进行使用


MyBatisPlus是基于MyBatis的基础上增强的,简化单表的增删查改的代码。

一:MyBatisPlus的快速入门

1.1:引入Mybatisplus的依赖

  <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
  </dependency>

1.2:定义Mapper

自定义的Mapper接口继承BaseMapper<T>.T为操作的实体类的代码。

1.3:UserMapper.xml中的配置 

 不用写基础的增删改查代码。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">


</mapper>

二: 常见注解

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

2.1:常见的注解 

@TableName(value值)用来指定表名
@TableId(value值)用来指定表中的主键字段信息
@TableField(value值)用来指定表中的普通字段信息

 当表中的字段名或者表明与类名或者属性名不一致时,需要设置value属性,value属性为表名或者表的字段名。


2.1.1:表中IdType的枚举

AUTO数据库自增长
INPUT通过set方法自行注入
ASSIGN_ID分配ID,接口identifierGenerator的方法nextId来生成Id

当我们在数据库当中设置Id为自增长,但在类中的id未设置自增长时,默认的是ASSIGN_ID。 

2.1.2:使用@TableField的常见场景

1:成员变量与数据库字段名不一致

2:成员变量名以is开头,且是布尔值

3:成员变量名与数据库关键字冲突(@TableField("`order`")

4:成员变量不是数据库字段@TableField(exist=false),用来标记成员变量不是数据库字段

案例演示1: 当数据库表名和类名不一致时。在类的前面加上其底下的注解

@TableName("tb_user")

案例演示2:当我们设置数据库的id是自增的,此时,需要我们对于@TableId(type=IdType.Auto) 

  @TableId(type= IdType.AUTO)
    private Long id;

三:核心功能

3.1:条件构造器

条件构造器关系:

3.1.1:基于QueryWrapper的查询 

需求1:查询名字中带o的,存款大于等于1000的人的id,username,info,balance字段

SQL语句:select id ,username,info,balance from user where username like "%O%"and balance>1000;

需求2:更新用户为jack的用户的余额为2000

SQL语句:update  user set balance=2000 where username='jack'.

利用QueryWrapper进行实现需求1:

 void testQueryWrapper(){
       QueryWrapper<User> queryWrapper=new QueryWrapper<User>()
               .select("id","username","info","balance")
               .ge("balance",1000)
               .like("username","o");
       List<User> users = userMapper.selectList(queryWrapper);
       System.out.println(users);
   }

查询结果:

利用QueryWrapper查询需求2:

  @Test
    void testQueryWrapper1(){
        //更新查询的结果
       User user=new User();
       user.setBalance(2000);
       //更新的条件
       QueryWrapper<User> queryWrapper=new QueryWrapper<User>().eq("username","jack");
        //执行更新
       userMapper.update(user,queryWrapper);
                
   }

更新的结果:

 3.1.2:基于UpdateWrapper的更新

需求1:更新id为1,2,4的用户的余额,扣200

SQL语句:update user set balance=balance-200 where id in(1,2,4)

   @Test
    void testUpdateWrapper(){
        //由于是多个用户,所以我们不能使用上一个方式的更新,且balance-200,所以要使用UpdateWrapper
        List<Long> ids=List.of(1L,2L,4L);
       UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<User>()
               .setSql("balance=balance-200")
               .in("id",ids);
        userMapper.update(null,userUpdateWrapper);
   }

运行结果:

3.2:自定义SQL

我们可以利用Mybatis的wrapper来构造复杂的where条件,剩下的我们自己写。MybatisPlus适用于where条件的设置,剩下我们自己来写。

3.2.1:利用MP构造where条件

    //1:更新条件
       List<Long> ids=List.of(1l,2l,3l);
       int amout=200;
       QueryWrapper<User> queryWrapper=new QueryWrapper<User>().in("id",ids);

3.2.2:自定义SQL方法调用

  //调用自定义方法
       userMapper.updateBalanceByIds(queryWrapper,amout);

在mapper中的方法不要忘了对于QueryWrapper添加起别名@Param("ew") 

@Mapper
public interface UserMapper  extends BaseMapper<User> {


    void updateBalanceByIds(@Param("ew") QueryWrapper<User> queryWrapper,@Param("amout") int amout);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">


    <update id="updateBalanceByIds">
        update tb_user set balance=balance-#{amout} ${ew.customSqlSegment}
    </update>
</mapper>

3.3:IService接口基本用法

用法:自定义service接口继承Iservice接口,实现类继承ServiceImpl.

1:创建一个service的接口继承IService接口

public interface IUserService extends IService<User> {

}

2:创建Iservice的实现类继承ServiceImpl接口

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {


}

3:测试类来进行使用

@SpringBootTest
class UserServiceImplTest {

    @Autowired
    private IUserService iUserService;
    @Test
    void testSaverUser(){
        User user=new User();
        user.setUsername("李磊");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        iUserService.save(user);

    }
    @Test
    public void Query(){
        List<Long> ids=List.of(1l,2l,3l);
        List<User> users = iUserService.listByIds(ids);
        for (User user : users) {
            System.out.println(user);
        }

    }


}

未完待续..... 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DJ懒羊羊。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值