0
点赞
收藏
分享

微信扫一扫

MyBatis-plus 介绍及应用

鲤鱼打个滚 2024-03-13 阅读 27

一、简介

1、MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开  发、提高效率而生。可以节省大量时间,大部分的 CRUD (增查改删)代码都可以自动化完成。

2、其中封装了丰富的查询操作api,尤其是单表操作的API,相比于SpringJPA来说,好处多多。

二、应用

1、导入依赖(尽量不要同时导入mybatis 和 mybatis_plus,避免版本差异

<!--mybatis-plus依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>
<!--mybatis plus生成器依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>
<!--velocity模版依赖-->
<dependency>
    <artifactId>velocity</artifactId>
    <groupId>org.apache.velocity</groupId>
    <version>${velocity.version}</version>
</dependency>

2、配置

application.yml 文件:

mybatis-plus:
	#配置日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/${project.database}/**/*.xml,classpath:mapper/*.xml
  global-config:
    db-config:
      logic-delete-value: 0
      logic-not-delete-value: 1
      logic-delete-field: deleted

spring boot 启动类中添加 @MapperScan 注解,扫描Mapper文件夹:

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
@MapperScan("com.swimming.project.mapper")
public class ProjectApplication {

mapper 上面添加 @Mapper 注解,并继承 BaseMapper<> 类:

@Mapper
public interface UserMapper extends BaseMapper<User> {
	//所有的CRUD都已经完成
    //不需要像以前一样配置一大堆文件:pojo-dao
}

3、使用

@Service
@Slf4j
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;
    
    // 查询全部用户,参数是一个Wrapper,条件构造器,先不使用为null
    public void selectList(){
        List<User> userList = userMapper.selectList(null);
        userList.forEach(System.out::println);
    }
    
    // 通过 Id 查询用户:
    public void selectById(){
        User user = userMapper.selectById(1L);
        System.out.println(user);
    }

	// 通过 Id集合 查询用户:
	public void selectBatchIds(){
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        users.forEach(System.out::println);
    }

	// 自定义查询
	public void selectByMap(){
        HashMap<String,Object> map = new HashMap<>();
        map.put("name","张三");
        List<User> users = userMapper.selectByMap(map);
        users.forEach(System.out::println);
    }

	// 修改
	public void updateById(){
        User user = new User();
        //可以通过条件自动拼接动态SQL
        user.setId(5L);
        user.setName("李四");
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

	// 删除
    public void deleteById(){
        userMapper.deleteById(4L);
    }
    
    // 批量删除
    public void deleteBatchIds(){
        userMapper.deleteBatchIds(Arrays.asList(1L,2L));
    }

	// 根据 Map 删除
	public void deleteByMap(){
        Map<String, Object> map = new HashMap<>();
        map.put("name","李四");
        userMapper.deleteByMap(map);
    }


	//条件构造器Wrapper,可以构造复杂的SQL
    void WrapperTest(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.isNotNull("name") //指定字段不为空
                .ge("age",10);//指定字段值必须大于给定value     
        userMapper.selectList(wrapper).forEach(System.out::println);
    	
        //equals (查询一个数据出现多个结果就使用 List 或 Map 接收)
    	wrapper.eq("name","张三");    
        User user = userMapper.selectOne(wrapper); 
        System.out.println(user);
    
        wrapper.between("age", 19, 23);
        Long count = userMapper.selectCount(wrapper);//查询结果数
        System.out.println(count);
        
        // orderByAsc 通过ID进行排序
        wrapper.orderByAsc("id");   //通过id升序
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);

		// like(String columnName, value):模糊查询,like %value%
        // notLike():not like %value%
        // likeRight()、likeLeft():左、右代表 % 存在的位置。
        wrapper.notLike("name","a")    //查询姓名中不包含a的用户
            .likeRight("email","t");   //左和右是代表%的位置 两边都要匹配则为%e%,这里是email以t开头的 t%
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        maps.forEach(System.out::println);

		// 联表查询
		// inSql(String keyColumnName, String sql):
        // 联合查询,选择与主查询关联的字段,并设置 子表的 sql
		wrapper.inSql("id","select id from user where id < 4");
        List<Object> objects = userMapper.selectObjs(wrapper);
        objects.forEach(System.out::println);

    }

    

}




举报

相关推荐

0 条评论