返回顶部
首页 > 资讯 > 数据库 >MybatisPlus详细教程,看后不会你打我............
  • 367
分享到

MybatisPlus详细教程,看后不会你打我............

java数据库mysql数据库架构maya 2023-10-02 10:10:42 367人浏览 薄情痞子
摘要

目录 官网 创建第一个mybatisPlus项目-mapper层继承BaseMapper实现 通过MybatisPlus提供的Service实现增删改查 MybatisPlus的常用注解 关于Wrapper接口及其实现类的使用 通过wra

目录

官网

创建第一个mybatisPlus项目-mapper层继承BaseMapper实现

通过MybatisPlus提供的Service实现增删改查

MybatisPlus的常用注解

关于Wrapper接口及其实现类的使用

通过wrapper接口实现简单条件查询

通过wrapper接口实现排序

通过wrapper实现组合查询

SELECT方法 

子查询

UpdateWrapper 

动态sql 

分页查询 

配置MybatisX插件


官网

        个人感觉,mybatisplus是所有的技术中,通过官网学习起来无障碍的技术,纯中文的教程对我这种对技术英文懵的人简直就是福星,所以大家时间条件充足的话,还是推荐大家通过官网进行学习,官网地址:简介 | MyBatis-Plus

mybatisplus的优势在于:

        1. 将常用的CURD方法封装进mapper,使我们可以快速完成功能。

        2. 将常用的CURD方法封装进service,使我们无需编写一些固定场景的service代码。

        3. 可以不通过mapper.xml运行CURD功能。

        4. 通过可视化工具mybatisX,连接数据库的同时,实现代码的生成。

说这么多概念,可能大家还是很懵,下面我们通过案例对比一下吧:

传统SSM项目的开发步骤(以springboot为例)

创建controller。

2. 创建service,impl,编写代码调用mapper层。

创建mapper类和xml文件,编写代码。

当然在传统项目中也可以自动生成代码,这里你需要导入依赖,并修改generator.xml文件的内容用以生成代码。

SpringBoot+Mybatis:

创建controller

2. 创建service、impl,如果mybatisplus提供的方法足够实现你的功能的话,那么恭喜你,可以不用编写service调用mapper的代码。

3. 创建mapper接口,如果mybatisplus提供的方法足够用的话,那么恭喜你,可以不用在mapper接口中定义方法了,也可以不用定义mapper.xml。

4. 此外,我们还可以通过mybatisX插件,完成service、mapper、entity层代码的自动生成,如果你的功能只涉及单表,且业务逻辑不复杂,那么恭喜你,你完全可以在很短的时间内完成一套CURD功能。

5. 那有人会担心了,怕功能被封装太死,像hibernate一样太复杂了怎么办,告诉你,丝毫不用担心,我们还是可以像使用mybatis一样使用mybatisPlus的。

大家如果觉得写的还行,还请给个赞和关注吧....

废话少说了....直接上代码吧..................

源码下载地址:

链接:https://pan.baidu.com/s/1Zrlz97Z37R99uK9e0Ukg1w?pwd=34ts 提取码:34ts --来自百度网盘超级会员V3的分享

创建第一个mybatisPlus项目-mapper层继承BaseMapper实现

        下面我们来创建第一个mybatis项目,感受一下无需定义mybatis.xml,直接调用mapper接口的写法吧:

通过创建SpringBoot项目的形式,创建我们的工程:

  2. 创建项目完毕,我们来导入依赖吧:

    com.alibaba    druid-spring-boot-starter    1.2.6    com.baomidou    mybatis-plus-boot-starter    3.4.2

 3. 配置application.yml文件:

spring:  datasource:    driver-class-name: com.Mysql.cj.jdbc.Driver    username: root    passWord: 123456    url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true    type: com.alibaba.druid.pool.DruidDataSourcemybatis-plus:  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 4. 在启动类上增加MapperScan注解,扫描mapper类

@SpringBootApplicationpublic class Mybatis02Application {    public static void main(String[] args) {        LogFactory.useCustomLogging(StdOutImpl.class);        SpringApplication.run(Mybatis02Application.class, args);    }}

创建controller类、service接口、impl、mapper接口 :

controller代码如下:

@RestControllerpublic class UserController {    @Autowired    UserService userService;        @RequestMapping("getUserList")    public List getUserList(){        return userService.getUserList();    }        @RequestMapping("getUserByid")    public User getUserByid(@RequestParam long id){        return userService.getUserByid(id);    }        @RequestMapping("insertUser")    public Map insertUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setId(id);        user.setName(name);        user.setAge(age);        user.setEmail(email);        int i = userService.insertUser(user);        String msg = i>0 ? "success" : "error" ;        Map resultMap = new HashMap<>();        resultMap.put("msg",msg);        return resultMap;    }        @RequestMapping("delUser")    public Map delUser(@RequestParam long id){        int i = userService.delUser(id);        String msg = i>0 ? "success" : "error" ;        Map resultMap = new HashMap<>();        resultMap.put("msg",msg);        return resultMap;    }        @RequestMapping("updUser")    public Map updUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setId(id);        user.setName(name);        user.setAge(age);        user.setEmail(email);        int i = userService.updUser(user);        String msg = i>0 ? "success" : "error" ;        Map resultMap = new HashMap<>();        resultMap.put("msg",msg);        return resultMap;    }        @RequestMapping("getUserListByCondition")    public List getUserListByCondition(@RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setName(name);        user.setAge(age);        user.setEmail(email);        return userService.getUserListByCondition(user);    }}

Service接口的代码:

public interface UserService {    List getUserList();    int insertUser(User user);    int delUser(long id);    int updUser(User user);    User getUserByid(Long id);    List getUserListByCondition(User user);}

ServiceImpl的代码:

@Servicepublic class UserServiceImpl implements UserService {    @Autowired    UserMapper userMapper;        @Override    public List getUserList() {        return userMapper.selectList(null);    }        @Override    public int insertUser(User user) {        return userMapper.insert(user);    }        @Override    public int delUser(long id) {        return userMapper.deleteById(id);    }        @Override    public int updUser(User user) {        return userMapper.updateById(user);    }    //按id查询    @Override    public User getUserByid(Long id) {        return userMapper.selectById(id);    }}

Mapper的代码:

@Repositorypublic interface UserMapper extends BaseMapper {}

下面可以直接在浏览器中调用接口试试看了。 

通过MybatisPlus提供的Service实现增删改查

        通过上面的代码我们可以发现,如果功能只是一套简单的CURD,在service代码中没有复杂的计算,那么我们重复的去写service是一件很痛苦的事情,没关系,mybatisplus帮我们解决,你需要这么做:

controller层代码中,直接调用service中的CURD方法即可:

@RestControllerpublic class MyUserController {    @Autowired    MyUserService myUserService;        @RequestMapping("getAllUser")    public List getAllUser(){        return myUserService.list();    }        @RequestMapping("getUserById")    public User getUserById(Long id){        return myUserService.getById(id);    }        @RequestMapping("delById")    public boolean delById(Long id){        User user = new User();        user.setId(id);        return myUserService.removeById(user);    }        @RequestMapping("saveUser")    public boolean saveUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setId(id);        user.setName(name);        user.setAge(age);        user.setEmail(email);        return myUserService.save(user);    }        @RequestMapping("updateUser")    public boolean updateUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setId(id);        user.setName(name);        user.setAge(age);        user.setEmail(email);        return myUserService.updateById(user);    }}

Service接口代码,继承IService接口

public interface MyUserService extends IService {}

 service实现类代码,继承ServiceImpl实现类,实现Service接口:

@Servicepublic class MyUserServiceImpl extends ServiceImpl implements MyUserService {}

 mapper接口在哪?哈哈。。。不用定义,是不是很爽

MybatisPlus的常用注解

@TableName(value=”数据库表名称”):加在实体类上,表示实体类映射的数据库表名称

        配置在yml中,代表映射的数据库前缀,是以什么开头的,在yml中配置后,在实体类上可以少配置前缀和后缀

mybatis-plus:  global-config:    db-config:      table-prefix: t_

@TableId(value=”uid” type= IdType.ASSIGN_ID)

        配置在实体类,指的是实体类中的字段映射到数据库的哪个id字段,字段类型也可统一配置在yml中,在yml中进行全局配置,配置后表示数据库的字段类型是自增。

mybatis-plus:  global-config:    db-config:      id-type: auto

@TableField(“表中的字段名称”)  :

        如果表中字段以下划线为命名,实体类中字段已经以驼峰式命名,无需使用此注解 ;如果表中字段以下划线为命名,实体类中字段不按照驼峰式命名规则,需要使用此注解。

@TableLogic(value=”0”,delval=”1”)

        实现逻辑删除(0代表原来的值正常,1代表删除) 在实体类的字段上配置

也可在全局的配置文件中配置逻辑删除属性:

mybatis-plus:  global-config:    db-config:      logic-delete-field: is_deleted      logic-delete-value: 1      logic-not-delete-value: 0

关于Wrapper接口及其实现类的使用

什么是wrapper接口呢?有什么用呢?这个接口的实现类是用来拼接动态sql的,举例说明一下:

比如我们经常使用的动态sql:

    usrLoginNm = #{usrloginnm,jdbcType=VARCHAR},

        简而言之,wrapper接口的作用就是,以代码的形式,将上面的if判断中的拼接sql和塞值操作传入到mybatisp定义好的方法中,完成条件查询和过滤操作。

通过wrapper接口实现简单条件查询

    @RequestMapping("selectUserByCond")    public List selectUserByCond(@RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setName(name);        user.setAge(age);        user.setEmail(email);        QueryWrapper userQueryWrapper = new QueryWrapper<>();        userQueryWrapper.like("name",name).                lt("age",age).eq("email",email);        return myUserService.list(userQueryWrapper);    }

通过wrapper接口实现排序

    @RequestMapping("selectByOrder")    public List selectByOrder(@RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setName(name);        user.setAge(age);        user.setEmail(email);        QueryWrapper userQueryWrapper = new QueryWrapper<>();        userQueryWrapper.orderByAsc("age").orderByDesc("id");        return myUserService.list(userQueryWrapper);    }

通过wrapper实现组合查询

     @RequestMapping("selectByOrders")    public List selectByOrders(@RequestParam String name, @RequestParam int age, @RequestParam String email){        User user = new User();        user.setName(name);        user.setAge(age);        user.setEmail(email);        QueryWrapper userQueryWrapper = new QueryWrapper<>();        userQueryWrapper.like("name",name).gt("age",age).or().isNotNull("email");        return myUserService.list(userQueryWrapper);    }

SELECT方法 

@RequestMapping("selectAsMap")public Map selectAsMap(@RequestParam String name, @RequestParam int age, @RequestParam String email){    User user = new User();    user.setName(name);    user.setAge(age);    user.setEmail(email);    QueryWrapper userQueryWrapper = new QueryWrapper<>();    userQueryWrapper.like("name",name).            gt("age",age).or().            isNotNull("email").select("id","name","age");    return myUserService.getMap(userQueryWrapper);}

子查询

@RequestMapping("selectByIn")public Map selectByIn(@RequestParam String name, @RequestParam int age, @RequestParam String email){    User user = new User();    user.setName(name);    user.setAge(age);    user.setEmail(email);    QueryWrapper userQueryWrapper = new QueryWrapper<>();    userQueryWrapper.inSql("id","select uid from user where id<4");    return myUserService.getMap(userQueryWrapper);}

UpdateWrapper 

@RequestMapping("updateUser")public boolean updateUser(@RequestParam Long id,@RequestParam String name, @RequestParam int age, @RequestParam String email){    User user = new User();    user.setName(name);    user.setAge(age);    user.setEmail(email);    UpdateWrapper userQueryWrapper = new UpdateWrapper<>();    userQueryWrapper.set("name",name).set("email",email).eq("id",id);    return myUserService.update(null,userQueryWrapper);}

动态sql 

@RequestMapping("selectByDtSql")public List selectByDtSql(@RequestParam String name, @RequestParam int age, @RequestParam String email){    User user = new User();    user.setName(name);    user.setAge(age);    user.setEmail(email);    QueryWrapper userQueryWrapper = new QueryWrapper<>();    userQueryWrapper.eq(StringUtils.isBlank(name),"name",name).            gt("age",age).eq(StringUtils.isBlank(email),"email",email);    return myUserService.list(userQueryWrapper);}

分页查询 

1. 需要在项目中新增mybatis的分页配置类,新增confog包,路径和controller同级。

@Configuration@MapperScan("com.mybatis02.mapper")public class MybatisPlusConfig {        @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));        return interceptor;    }    @Bean    public ConfigurationCustomizer configurationCustomizer() {        return configuration -> configuration.setUseDeprecatedExecutor(false);    }}

使用方式

@RequestMapping("selectByPage")public Page selectByPage(@RequestParam String name, @RequestParam int age, @RequestParam String email){    User user = new User();    user.setName(name);    user.setAge(age);    user.setEmail(email);    Page userPage = new Page<>();    QueryWrapper userQueryWrapper = new QueryWrapper<>();    userQueryWrapper.eq(StringUtils.isBlank(name),"name",name).            gt("age",age).eq(StringUtils.isBlank(email),"email",email);    return myUserService.page(userPage,userQueryWrapper);}

配置MybatisX插件

在ida中下载插件,file-settings-plugins-marketplace-输入:mybatisX:

2. 配置mybatisX插件:

 

 选择完毕即可生成代码

来源地址:https://blog.csdn.net/weixin_43195884/article/details/128422789

您可能感兴趣的文档:

--结束END--

本文标题: MybatisPlus详细教程,看后不会你打我............

本文链接: https://www.lsjlt.com/news/422601.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作