Mybatis-plus学习(2)

本文详细介绍了如何在Spring环境中整合Mybatis-Plus,包括添加依赖、配置、日志设置,以及如何使用CRUD接口。重点讲解了Service和Mapper接口中的查询、更新、删除和插入操作,提供具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis-plus

Spring整合Mybatis-Plus

  • 上面的快速开始我们介绍了通过SpringBoot整合MyBatis-Plus
添加依赖

加入Spring依赖和数据库JDBC依赖后还需要加入Mybatis-Plus的依赖

引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题。

      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.22</version>
      </dependency>

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.3.15</version>
      </dependency>

      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus</artifactId>
          <version>3.5.0</version>
      </dependency>

      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.28</version>
      </dependency>

	 <dependency>
     	<groupId>com.alibaba</groupId>
     	<artifactId>druid</artifactId>
     	<version>1.0.11</version>
     </dependency>

配置

MyBatis-Plus 的配置异常的简单,我们仅需要一些简单的配置即可使用 MyBatis-Plus 的强大功能!

配置 MapperScan spring.xml

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.dyw.mapper"/>
</bean>

日志

要想使用mybatis-plus的日志功能 需要在application.yml中添加如下语句

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

CRUD接口

Service CRUD 接口

说明:

  • 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,

  • 泛型 T 为任意实体对象

  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类

  • 对象 Wrapper条件构造器

  • @SuppressWarnings("all")
    public interface BookService extends IService<Book> {
        //boolean save(Book book);
        //boolean update(Book book);
        //boolean delete(Integer id);
        //Book getById(Integer id);
        List<Book> getAll();
    }
    
    
  • 可以追加自定义操作 需要自己编写方法实体 模板如下

  • @Service
    @SuppressWarnings("all")
    public class BookServiceImpl extends ServiceImpl<BookMapper,Book> implements BookService{
        @Autowired
        private BookMapper mapper;
    
    @Override
    public List<Book> getAll() {
        return null;
    }
    

    }

    
    

Mapper CRUD 接口

说明:

  • 通用 CRUD 封装BaseMapper (opens new window)接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
  • 泛型 T 为任意实体对象
  • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
  • 对象 Wrapper条件构造器

以下是Mapper接口中的CRUD方法介绍

一:查询
  1. selectById() 通过单个主键值查询 只需要传入主键值即可 SELECT id,name FROM people WHERE id=?
/**
 * selectById 根据单个主键值查询
 * 参数:主键值
 * 返回值:实体对象
 */
People people1 = peopleMapper.selectById(1);
System.out.println(people1);

如果id值对应的行不存在 会返回空 所以一般使用会判断是否为空 再做其他操作

  1. selectBatchIds() 批处理查询 通过多个主键值的一个集合 来查询满足条件的数据 返回值是一个集合 如果没有满足条件的数据 则返回null SELECT id,name FROM people WHERE id IN ( ? , ? , ? )
        /**
         * selectBatchIds 批处理查询 根据多个主键值查询
         * 参数:id的集合
         * 返回值:集合List<T>
         */
        List<Integer> collect = Stream.of(1, 2, 7).collect(Collectors.toList());
        List<People> people1 = peopleMapper.selectBatchIds(collect);
        System.out.println(people1);
        for (People people2 : people1) {
            System.out.println(people2);
        }
  1. selectByMap() 通过将多条件字段字段封装到map中 通过读取map中的值来拼接条件 来实现 SELECT id,name FROM people WHERE name = ? AND id = ?
       /**
         * selectMap 使用map封装多条件字段查询
         * 参数:Map<String,Object>
         * 返回值:集合List<T>
         */
        HashMap<String, Object> map = new HashMap<>();
        map.put("id",1);
        map.put("name","易顺坤");
        List<People> people1 = peopleMapper.selectByMap(map);

        for (People people2 : people1) {
            System.out.println(people2);
        }

4.selectList() 通过传入实体类 更具实体类中的字段值解析为条件 查询

注意: 当select操作条件为null时默认查询表中全部数据

二:更新
  1. updateById(实体类对象);

通过传入实体类对象根据实体类对象中的声明主键的值, 自动生成where条件 where id=? , 然后以实体类中的其他非null属性的值对表中的数据进行修改(注意:包装类的默认值是null 而基本数据类型默认值不一定是null 如int类型默认值是0)

/**
     * 更新操作(update)
     * 通过对象的形式传入要修改的数据 默认修改传入对象中非null属性的值
     */
    @Test
    public void contextLoads1(){
        People people = new People();
        people.setId(2);
        people.setName("易顺坤");
        /**
         * updateById()顾名思义就是条件是根据id的
         */
        int i = peopleMapper.updateById(people);
        System.out.println(i>0?"cg":"sb");

        List<People> people1 = peopleMapper.selectList(null);
        for (People people2 : people1) {
            System.out.println(people2);
        }
    }
三:删除
  1. deleteById 通过传入的实体类中声明的主键值 来生成where条件 delete from tablename where id = ? 也可以直接传入一个id值
int i = peopleMapper.deleteById(3);
/**************************************************/

People people = new People();
people.setId(2);
/**
* deleteById()顾名思义就是条件是根据id的
*/
int i = peopleMapper.deleteById(people);
  1. deleteByMap 将字段条件通过键值对的方式封装到map中 再调用deleteByMap方法 将map中的值读取填入where之后 多个字段以and方式连接 DELETE FROM people WHERE name = ? AND id = ?
/**
 * deleteByMap()通过map存储条件字段键值对 多个字段 在where条件后用and连接
 *
 * DELETE FROM people WHERE name = ? AND id = ?
 */
HashMap<String, Object> map = new HashMap<>();
map.put("id",1);
map.put("name","丁杨维");
int i = peopleMapper.deleteByMap(map);
  1. deleteBatchIds 通过id批量删除 是通过in关键字 填入where条件关键字之后 DELETE FROM people WHERE id IN ( ? , ? )
  • deleteBatchIds() 批处理方式:使用多个主键值,删除数据

  • 参数:Collection<? extends Serializable>

  • 返回值删除的记录数


/**
         * deleteBatchIds() 批处理方式:使用多个主键值,删除数据
         * 参数:Collection<? extends Serializable>
         * 返回值删除的记录数
         */
        ArrayList<Integer> list = new ArrayList<>();
        list.add(4);
        list.add(6);
        int i = peopleMapper.deleteBatchIds(list);

新知识:可以通过Stream.Of().collect(Collectors.toList())的方式创建List集合

List<?> list = Stream.of(Object,Object....).collect(Collectors.toList());
四:插入
  • insert() 通过创建一个实体对象 再调用mapper的insert方法即可完成插入 INSERT INTO people ( name ) VALUES ( ? )
People people1 = new People(null, "fan");
int row = peopleMapper.insert(people1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值