MyBatis-plus讲解

本文介绍了MyBatis-Plus的快速创建与使用,包括依赖引入、Mapper接口与实体类配置、启动类与测试类的编写。详细讲解了CRUD操作,如插入、查询、删除和更新,并展示了分页查询的实现。同时,讨论了Wrapper的使用,用于构建复杂的查询条件。最后提到了服务层的封装和逆向工程的应用。

一.快速创建

1.mybatis-plus依赖

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

2.mapper的编写(user是实体类对象)

/**
 * 使用mp定义Mapper,需要让Mapper接口继承 BaseMapper接口。
 */

public interface UserMapper extends BaseMapper<User> {
}

3.实体类
3.1 @TableName(“tb_user”) // 指定表名,进行数据库表的映射,如果前缀统一可以直接在全局中进行配置,这个注解可以不写
3.2 @TableField(“user_name”) 指定映射关系
实体类的属性名和数据库的字段名自动映射:
* 名称一样
* 数据库字段使用_分割,实体类属性名使用驼峰名称
否则需要使用 @TableField(“user_name”) 指定映射关系
3.3 忽略某个字段的查询和 插入
@TableField(exist = false)
3.4 设置id生成策略:AUTO 数据库自增
@TableId(type = IdType.AUTO)
3.5 yam中的全局配置

  mybatis-plus:
   global-config:
    db-config:
      # 表名前缀
      table-prefix: tb_
      # id生成策略 数据库自增
      id-type: auto  
@TableName("tb_user")  // 指定表名,进行数据库表的映射,如果前缀统一可以直接在全局中进行配置,这个注解可以不写
@Data
public class User {
    private Long id;
    @@TableField("user_name")
    private String userName;
    private String password; 

4.启动类

@MapperScan("com.xxxx.xx.mapper")
@SpringBootApplication
public class MybatisPlusSpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusSpringbootApplication.class, args);
    }
}

5.测试类

@SpringBootTest
@RunWith(SpringRunner.class)
class UserMapperTest {
    @Autowired
    private UserMapper userMapper;
    /**
     * 根据id查询
     */
    @Test
    public void testSelectById() {

        User user = userMapper.selectById(1L);
        System.out.println(user);

    }
}

CRUD


@SpringBootTest
@RunWith(SpringRunner.class)
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;


    /**
     * 根据id查询
     */
    @Test
    public void testSelectById() {

        User user = userMapper.selectById(1L);
        System.out.println(user);


    }



    /**
     * 添加
     */
    @Test
    public void testInsert() {

        User user = new User();

        //user.setId(6L);
        user.setUserName("1111");
        user.setPassword("1111");

        int i= userMapper.insert(user);
        System.out.println(i);


    }
    /**
     * 删除
     */
    @Test
    public void testDelete() {

/*

        //1. 根据id删除
        int count = userMapper.deleteById(8L);

*/
/*
        //2. 根据id集合批量删除
        List ids = new ArrayList();
        ids.add(6);
        ids.add(7);
        userMapper.deleteBatchIds(ids);
*/
        //3. 根据map构造条件,删除

        Map<String, Object> map = new HashMap<>();

        //delete from tb_user where user_name = ? and age = ?
        map.put("user_name","zhangsan");
        map.put("age","18");
        userMapper.deleteByMap(map);




    }


    /**
     * 修改
     */
    @Test
    public void testUpdateById() {

        User user = new User();
        user.setId(2L);
        user.setPassword("1111111");

        int count = userMapper.updateById(user);
    }


    /**
     * 分页查询:
     *  1. 当前页码:currentPage
     *  2. 每页显示条数:size
     *
     *  注意:使用mp的分页要设置一个拦截器!!!   分页查询在下边的查询中写着
            */
    @Test
    public void testSelectPage() {
        int current = 1;//当前页码
        int size = 2;//每页显示条数
        IPage<User> page = new Page(current,size);
        userMapper.selectPage(page,null);


        List<User> records = page.getRecords();//当前页的数据
        long pages = page.getPages();//总页数 2
        long total = page.getTotal();//总记录数 4

        System.out.println(records);
        System.out.println(pages);
        System.out.println(total);
    }






}

查询

1.分页查询的拦截器,,,,因为我们都使用的mybatis-puls是3.4.0的所以得使用下面的拦截器,上面的会显示过时


@Configuration
public class PageConfig {

    /**
     * 3.4.0之前的版本用这个
     * @return
     */
   /* @Bean
    public PaginationInterceptor paginationInterceptor(){
        return  new PaginationInterceptor();
    }*/

    /**
     * 3.4.0之后提供的拦截器的配置方式
     * @return
     */
   @Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor(){
       MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
       mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
       return mybatisPlusInterceptor;
   }
}

2.Wrapper的讲解

2.1因为Wrapper是一个抽象类,所以在使用的使用查询和更新用属于自己的专用的对象
2.2 Wrapper的作用就是在书写mysql,通过点对象的形式在进行的书写,关于点对象,我将图贴在下面

           查询:      QueryWrapper、LambdaQueryWrapper
            //1.创建查询条件构建器
       QueryWrapper<User> wrapper = new QueryWrapper<>();
       LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
           更新:      UpdateWrapper、LambdaUpdateWrapper
        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
           

在这里插入图片描述
在这里插入图片描述
模糊查询
在这里插入图片描述
在这里插入图片描述
select这个就是,你可以定义你自己查询的字段,提高数据库的查询效率
在这里插入图片描述

    wrapper.eq("user_name","lisi")
                .or()
                .lt("age",23)
                .in("name","李四","王五")
                //.orderBy(true,true,"age")
                .orderByDesc("age")
                .select("id","user_name");

分页查询

@Test
    public void testWrapper6(){

        int current = 1;//当前页码
        int size = 2;//每页显示条数
        //1. 构建分页对象
        Page<User> page = new Page<>(current,size);
        //2. 构建条件对象
        QueryWrapper<User> wrapper = new QueryWrapper();
        wrapper.lt("age",23);
        userMapper.selectPage(page,wrapper);
        List<User> records = page.getRecords();
        long total = page.getTotal();
        long pages = page.getPages();
        System.out.println(records);
        System.out.println(total);//2
        System.out.println(pages);//1

    }

== LambdaQueryWrapper:消除代码中的硬编码 ==

@Test
    public void testWrapper7(){
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUserName,"zhangsan");
        userMapper.selectOne(wrapper);
    }

service 封装

在这里插入图片描述

逆向工程

这个看官网就行了

关于MyBatis-Plus有如下详细讲解内容: - **SQL打印配置**:若要在控制台查看执行的SQL,需在`application.properties`进行配置,配置语句为`mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl` [^1]。 - **代码示例获取**:完整的代码示例可移步至https://github.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-quickstart [^2]。 - **分页查询插件配置**:使用分页查询需先配置分页查询的插件,要在MyBatis-Plus的配置类中先注册。示例代码如下: ```java import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusConfig { /** * 添加分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //如果配置多个插件,切记分页最后添加 //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType return interceptor; } } ``` 同时,存在分页查询方法`<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);` [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值