提升开发效率的一款mybatis开发神器(中)

简介: 提升开发效率的一款mybatis开发神器(中)

1.提前定义好的插入功能:


BaseMapper里面封装了已经定义好的insert语句,能够方便我们直接调用,无须自己手动编写sql


@GetMapping(value = "/insert")
    public void insert(){
        Teacher  teacher=new Teacher();
        teacher.setTeacherName(createRandomStr(6));
        teacher.setTeacherPwd(createRandomStr(6));
        teacherMapper.insert(teacher);
    }
    /**
     * 生成随机字符串
     *
     * @return
     */
    private static String createRandomStr(int length){
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<length;i++){
            int number=random.nextInt(str.length());
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }


生成的sql语句:


INSERT INTO teacher ( id, teacher_name, teacher_pwd ) VALUES ( 0, 'mNJXIf', 'LKTnam' );


2.提前定义好的删除功能


BaseMapper里面提供有已经定义好的delete功能,


@GetMapping(value = "/delete")
    public void delete(){
        Teacher  teacher=new Teacher();
        teacher.setId(11);
        EntityWrapper entityWrapper=new EntityWrapper(teacher);
        teacherMapper.delete(entityWrapper);
    }


生成的sql语句:


DELETE FROM teacher WHERE id=11;


3.提前定义好的更新功能


BaseMapper里面定义了相关的update功能,但是在进行update的时候有个地方需要注意,来看看下边这段代码先


@GetMapping(value = "/update")
    public void update(){
        //update的判断条件
        EntityWrapper entityWrapper=new EntityWrapper(new Teacher(1));
        //更新之后的对象
        Teacher teacher=new Teacher();
        teacher.setTeacherPwd("new-pwd");
        teacherMapper.update(teacher,entityWrapper);
    }


生成的sql语句:


UPDATE teacher SET teacher_pwd='new-pwd'  WHERE id=1;


mybatis-plus里面提供了一个叫做EntityWrapper的对象封装操作类,通过传入相关的Entity来判断传入的查询参数,这里的使用让我回想起了以前用hibernate的那种味道,不得不说这种功能的设计确实帮开发者的开发效率提升了很多。


以前写更新语句的时候,经常是需要在xml里面进行非常多繁琐耗时的sql拼接工作,现在mybatis-plus通过EntityWrapper这个封装类,大大节省了相应时间。


4.根据指定id进行查询


mybatis-plus也默认提供了关键字查询的功能,可以将查询参数通过对象Entity的形式注入,非常方便。


ps:mybatis-plus已经默认带有了sql注入的预防功能,因此这点可以放心使用。


@GetMapping(value = "/selectAllById")
    public Teacher selectByTeacherName(int id){
        return teacherMapper.selectOne(new Teacher(id));
    }


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
 FROM teacher
 WHERE id=0;


5.使用Map来进行多关键字的查询


有些时候,除了使用查询时候使用Entity关键字来进行查询之外,还可以通过使用Map的形式来进行多关键字的搜索实现,相关代码如下所示:


@GetMapping(value = "/selectAllByMap")
    public List<Teacher> selectAllByEntity(String name){
        Map<String,Object> hashMap=new HashMap<>();
        hashMap.put("teacher_name",name);
        return teacherMapper.selectByMap(hashMap);
    }


注意,这里的map放入的key值需要和表里面的字段命名一致。


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
 FROM teacher
 WHERE teacher_name = 'qwe';


6.统计查询


@GetMapping(value = "/selectCountByEntity")
    public int selectCount(String name){
        Teacher teacher=new Teacher();
        teacher.setId(1);
        teacher.setTeacherName(name);
        EntityWrapper<Teacher> entityWrapper=new EntityWrapper<>(teacher);
        return teacherMapper.selectCount(entityWrapper);
    }


生成的sql语句:


SELECT COUNT(1)  FROM teacher  WHERE id=1 AND teacher_name='qwe';


7.分页查询


在实际开发中,分页查询功能一直是非常普遍需要运用到的一点,在mybatis-plus里面,他提供了一个叫做Page的类供我们使用,相应的代码如下所示:


@GetMapping(value = "/selectAllInPage")
    public List<Teacher> selectAllInPage(int pageNumber,int pageSize){
        Page<Teacher> page =new Page<>(pageNumber,pageSize);
        EntityWrapper<Teacher> entityWrapper = new EntityWrapper<>();
        entityWrapper.ge("id", 1);
        return teacherMapper.selectPage(page,entityWrapper);
    }


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd  FROM teacher  WHERE (id >= 1) LIMIT 0,1;


mybatis-plus使用的分页技术是传统的 limit 物理分页方式。


8. in 查询


查询的时候,如果需要使用in查询的话,可以使用selectBatchIds这个api功能:



@GetMapping(value = "/selectInIdArr")
    public List<Teacher> selectInIdArr(){
        List<Integer> idList=new ArrayList<>();
        idList.add(1);
        idList.add(10);
        idList.add(11);
        return teacherMapper.selectBatchIds(idList);
    }


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd FROM teacher WHERE id IN ( 1 , 10 , 11 );


9.复杂条件查询


针对于比较复杂的多条件查询,mybatis-plus内部提供的EntityWrapper支持有许多丰富的查询api功能供我们使用。


为了方便理解,下边通过实际的代码案例来进行解释


allEq查询(相当于条件全部都要求满足的情况)


@GetMapping(value = "/selectAllByWrapper1")
    public  List<Teacher> selectAllByWrapper1(){
        Map<String,Object> map=new HashMap<>();
        map.put("teacher_name","name");
        map.put("teacher_pwd","pwd");
        EntityWrapper entity=new EntityWrapper();
        entity.allEq(map);
        return teacherMapper.selectList(entity);
    }


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
 FROM teacher
 WHERE (teacher_pwd = 'pwd' AND teacher_name = 'name');


ne查询


@GetMapping(value = "/selectAllByWrapper3")
    public List<Teacher> selectAllByWrapper3(){
        EntityWrapper entity=new EntityWrapper();
        entity.ne("teacher_name","name");
        return teacherMapper.selectList(entity);
    }


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
 FROM teacher
 WHERE (teacher_name <> 'name');



eq查询


@GetMapping(value = "/selectAllByWrapper2")
    public List<Teacher> selectAllByWrapper2(){
        EntityWrapper entity=new EntityWrapper();
        entity.eq("teacher_name","name");
        return teacherMapper.selectList(entity);
    }


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
 FROM teacher
 WHERE (teacher_name = 'name');


复杂的多条件查询:


@GetMapping(value = "/selectAllByWrapper4")
    public  List<Teacher> selectAllByWrapper4(){
        EntityWrapper entity=new EntityWrapper();
        entity.gt("id","0");
        entity.le("id",11);
        entity.ne("teacher_name","null_name");
        entity.like("teacher_name","tt");
        entity.notLike("teacher_pwd","sadas");
        entity.orderBy("id");
        return teacherMapper.selectList(entity);
    }


生成的sql语句:


image.png



组合的and和or条件查询:


image.png


生成的sql语句:


SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
 FROM teacher
 WHERE (id>1) OR (id=0 AND teacher_name='name' AND teacher_pwd IS NULL);


having和groupby查询:


image.png


相关文章
|
2月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
57 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
3月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
4月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
203 0
|
4月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
74 3
|
6月前
|
SQL Java 数据库连接
Mybatis如何使用mapper代理开发
Mybatis如何使用mapper代理开发
|
6月前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
38 0
|
2月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
119 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
58 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
358 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个