MyBatisPlus通用的CRUD

一、创建具体的Mapper接口

让需要编写的mapper接口继承于BaseMapper接口

public interface EmployeeMapper extends BaseMapper<Employee>{

}

继承BaseMapper<T>接口以后,无需编写mapper.xml映射文件就可以CRUD功能

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T var1);

    int deleteById(Serializable var1);

    int deleteByMap(@Param("cm") Map<String, Object> var1);

    int delete(@Param("ew") Wrapper<T> var1);

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> var1);

    int updateById(@Param("et") T var1);

    int update(@Param("et") T var1, @Param("ew") Wrapper<T> var2);

    T selectById(Serializable var1);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> var1);

    List<T> selectByMap(@Param("cm") Map<String, Object> var1);

    T selectOne(@Param("ew") Wrapper<T> var1);

    Integer selectCount(@Param("ew") Wrapper<T> var1);

    List<T> selectList(@Param("ew") Wrapper<T> var1);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> var1);

    List<Object> selectObjs(@Param("ew") Wrapper<T> var1);

    <E extends IPage<T>> E selectPage(E var1, @Param("ew") Wrapper<T> var2);

    <E extends IPage<Map<String, Object>>> E selectMapsPage(E var1, @Param("ew") Wrapper<T> var2);
}

二、insert方法

/*
	MyBatisPlus会使用实体类的类名到数据库中找对应的表
	使用@TableName注解实现类名与数据库表名的映射关系
*/
@TableName(value = "tbl_employee")
public class Employee {
	
	/*需要使用@TableId注解指定主键策略
		value:指定表中主键列的列名
		type:指定主键策略
	*/
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String lastName;
    private String email;
    private Integer gender;
    private Integer age;
}
    @Test
    public void testInsert(){
        Employee employee = new Employee();
        employee.setLastName("mpTestInsert");
        employee.setAge(23);
        employee.setEmail("111@qq.com");
        employee.setGender(1);
        int result = employeeMapper.insert(employee);
        System.out.println("result:" + result);

    }

数据库中成功插入一条记录
在这里插入图片描述

三、MyBatisPlus全局策略配置

配置全局策略

    <!--定义MyBatisPlus全局策略配置-->
    <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        <property name="dbConfig">
            <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig">
                <!--实现属性名与数据库表的列名的映射-->
                <property name="tableUnderline" value="true"></property>
                <!--全局的主键策略-->
                <property name="idType" value="AUTO"></property>
                <!--全局的表前缀策略配置-->
                <property name="tablePrefix" value="tbl_"></property>
            </bean>
        </property>
    </bean>

还需要将MyBatisPlus全局策略配置注入sqlSessionFactoryBean

    <bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
        <!-- 数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <!-- 别名处理 -->
        <property name="typeAliasesPackage" value="testMP.bean"></property>

        <!--注入MyBatisPlus全局策略配置-->
        <property name="globalConfig" ref="globalConfig"></property>
    </bean>

四、@TableFiled注解

    //value对应数据库表列名,exist为true代表数据库表该字段存在
    @TableField(value = "last_name", exist = true)

在这里插入图片描述

五、插入数据获取主键值

MyBatis需要通过userGeneratedKeys以及keyProperty来设置获取插入数据的主键值,而MyBatisPlus会自动将主键值写回到实体类中。

    @Test
    public void testInsert(){
        Employee employee = new Employee();
        employee.setLastName("mpTestInsert");
        employee.setAge(23);
        employee.setEmail("111@qq.com");
        employee.setGender(1);
        Integer result = employeeMapper.insert(employee);
        System.out.println("result:" + result);

        //获取当前数据在数据库中的主键值
        Integer key = employee.getId();
        System.out.println(key);

    }

输出结果:
在这里插入图片描述
在这里插入图片描述

六、更新方法updateById

updateById方法

    @Test
    public void testUpdateById(){
        Employee employee = new Employee();
        employee.setId(5);
        employee.setLastName("bbaaaaaaa");
        employee.setEmail("bbaaa@qq.com");
        employee.setAge(53);
        employee.setGender(1);

        int result = employeeMapper.updateById(employee);


    }

打印日志
在这里插入图片描述
在这里插入图片描述

当不是全字段修改时,未修改的字段保留之前的值

    @Test
    public void testUpdateById(){
        Employee employee = new Employee();
        employee.setId(5);
        employee.setLastName("ssss");
        //employee.setEmail("bbaaa@qq.com");
        //employee.setAge(53);
        employee.setGender(0);

        int result = employeeMapper.updateById(employee);


    }

打印日志
在这里插入图片描述
在这里插入图片描述

七、查询操作

selectById()方法

    @Test
    public void testSelect(){
        Employee employee = employeeMapper.selectById(1);
        System.out.println(employee);

    }

打印结果:
在这里插入图片描述

selectOne()方法

多个条件组合查询

    @Test
    public void testSelectOne(){

        Employee employee = new Employee();
        employee.setId(3);
        employee.setLastName("Black");

        //封装需要查询的对象
        QueryWrapper<Employee> employeeQueryWrapper = new QueryWrapper<Employee>(employee);
        //按照多个列进行查询,
        Employee selectOne = employeeMapper.selectOne(employeeQueryWrapper);
        System.out.println(selectOne);
    }

打印日志
在这里插入图片描述

selectBatchIds()方法

通过多个id值,查询多条记录

    @Test
    public void testSelectBatchIds(){
        List<Integer> idList = new ArrayList<Integer>();
        idList.add(1);
        idList.add(3);
        idList.add(4);
        idList.add(7);

        List<Employee> employees = employeeMapper.selectBatchIds(idList);

        for (Employee employee : employees){
            System.out.println(employee);
        }
    }

打印日志:
在这里插入图片描述

selectByMap()方法

    @Test
    public void testSelectByMap(){
        //通过Map封装查询条件
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("last_name","White");
        map.put("age",35);

        List<Employee> employees = employeeMapper.selectByMap(map);
        for (Employee employee : employees){
            System.out.println(employee);
        }

    }

打印日志:
在这里插入图片描述

selectPage()方法

分页查询

    @Test
    public void testSelectPage(){

        Page<Employee> employeePage = employeeMapper.selectPage(new Page<Employee>(2, 3), null);

        Object[] records = employeePage.getRecords().toArray();
        int start = (int) ((employeePage.getCurrent() - 1) * employeePage.getSize());
        int end = (int) (start + employeePage.getSize());
        for (int i = start; i < end; i++){
            System.out.println(records[i]);
        }
    }

打印日志:
在这里插入图片描述

在这里插入图片描述

八、删除操作

deleteById()方法

    @Test
    public void testDeleteById(){
        int result = employeeMapper.deleteById(17);
        System.out.println("result:" + result);
    }

deleteByMap()方法

根据条件删除

    @Test
    public void testDeleteByMap(){
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("last_name","ssss");
        map.put("email","bbaaa@qq.com");
        int result = employeeMapper.deleteByMap(map);
        System.out.println("result:" + result);
    }

deleteBatchIds()方法

根据id值删除多条记录

    @Test
    public void testDeleteIds(){
        List<Integer> idList = new ArrayList<Integer>();
        idList.add(7);
        idList.add(9);
        idList.add(11);
        int result = employeeMapper.deleteBatchIds(idList);
        System.out.println("result:" + result);
    }

九、MP启动注入SQL原理分析

employeeMapper本质上是MybatisMapperProxy

在这里插入图片描述
MybatisMapperProxy中一个sqlSession属性
在这里插入图片描述
通过sqlSession属性可以获取configuration配置对象,配置对象包含全局配置信息
在这里插入图片描述
configuration配置对象里面有一个mappedStatements属性,里面的每一个MappedStatement都表示Mapper接口中的一个方法Mapper映射文件中的SQL语句,即接口中的哪个方法要执行哪个SQL语句。
在这里插入图片描述
sqlSource里面封装了底层真正要执行的SQL语句
在这里插入图片描述
所以,MyBatisPlus在启动的时候就会挨个分析Mapper接口中的方法,并且将对应的SQL语句保存到configuration中的mapperStatement中。在调用每个方法时,就会从configuration中找到对应的mapperStatement,根据调用方法的名字找到对应的SQL语句执行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MybatisPlus是一个能够帮助我们简化CRUD操作的框架。通过使用MybatisPlus,我们可以实现无需编写繁琐的XML文件,快速进行数据库操作。在使用MybatisPlus时,我们需要添加一些必要的依赖,如MySQL、Lombok和Mybatis-plus等。在项目的pom.xml文件中添加这些依赖,然后就可以使用MybatisPlus提供的通用CRUD方法进行数据库操作了。其中,MybatisPlus会自动解析实体表关系映射,并将其转换为Mybatis内部对象,从而简化了我们的开发工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MybatisPlus,无XML分分钟实现CRUD操作](https://download.csdn.net/download/weixin_38560107/12742363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Mybatis-plus基础(附实现CRUD详细步骤)](https://blog.csdn.net/qq_42538317/article/details/108589426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [MyBatisPlus——CRUD](https://blog.csdn.net/weixin_52467834/article/details/122647960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值