zoukankan      html  css  js  c++  java
  • SpringBoot整合MyBatis

    什么是mybaties

    • ​ MyBatis是一款优秀的支持自定义SQL查询、存储过程和高级映射的持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。MyBatis可以使用XML或注解进行配置和映射,MyBatis通过将参数映射到配置的SQL形成最终执行的SQL语句,最后将执行SQL的结果映射成Java对象返回

    为什么MyBatis却越来越受欢迎呢?

    • 1.不方便的全表映射,比如更新时需要发送所有的字段
    • 2.无法根据不同的条件组装不同sql
    • 3.对多表关联和复制sql查询支持较差
    • 4.有HQL但性能较差,做不到sql优化
    • 5.不能有效支持存储过程

    MyBatis-Plus 插件(一个Mybatis框架的增强插件)

    • 1.只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
    • 2.只需简单配置,即可快速进行 CRUD 操作,从而节省大量时间
    • 3.热加载、代码生成、分页、性能分析等功能一应俱全
    • 4.3.X系列支持lambda语法,让我在写条件构造的时候少了很多的"魔法值",从代码结构上更简洁

    引入依赖

            <!-- mybatisPlus 核心库 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.1.0</version>
            </dependency>
    

    配置

    # 配置端口
    server:
      port: 8888
    spring:
      # 配置数据源
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mp_student?useUnicode=true&characterEncoding=utf-8
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
    # mybatis-plus相关配置
    mybatis-plus:
      # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
      mapper-locations: classpath:mapper/*.xml
      # 以下配置均有默认值,可以不设置
      global-config:
        db-config:
          #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
          id-type: auto
          #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
          field-strategy: NOT_EMPTY
          #数据库类型
          db-type: MYSQL
      configuration:
        # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
        map-underscore-to-camel-case: true
        # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
        call-setters-on-nulls: true
        # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    

    基础类

    启动类增加扫描包注解

    @MapperScan(basePackages = {"com.mp.demo.dao"}) //扫描DAO
    

    Config配置类(配置分页插件)

    /**
     * @Description MybatisPlus配置类
     */
    @Configuration
    public class MybatisPlusConfig {
        /**
         * mybatis-plus SQL执行效率插件
         */
        @Bean
        public PerformanceInterceptor performanceInterceptor() {
            return new PerformanceInterceptor();
        }
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }
    

    Dao类

    /**
     * @Description 用户信息DAO
     */
    public interface UserInfoDao extends BaseMapper<UserInfoEntity> {
    }
    
    

    Service类

    /**
     * @Description 用户业务接口
     */
    public interface UserInfoService extends IService<UserInfoEntity> {
    }
    

    ServiceImpl类

    /**
     * @Description 用户业务实现
     */
    @Service
    @Transactional
    public class UserInfoSerivceImpl extends ServiceImpl<UserInfoDao, UserInfoEntity> implements UserInfoService {
    }
    
    

    MyBatis-Plus基础使用

    根据ID获取用户信息

        @GetMapping("/getInfo/{userId}")
        public UserInfoEntity getInfo(@PathVariable("userId") String userId) {
            UserInfoEntity userInfoEntity = userInfoService.getById(userId);
            return userInfoEntity;
        }
    

    查询全部信息

    @GetMapping("/getList")
        public List<UserInfoEntity> getList() {
            List<UserInfoEntity> userInfoEntityList = userInfoService.list();
            return userInfoEntityList;
        }
    

    分页查询全部数据

        @GetMapping("/getInfoListPage")
        public IPage<UserInfoEntity> getInfoListPage() {  //IPage<UserInfoEntity> 分页数据
            //需要在Config配置类中配置分页插件
            IPage<UserInfoEntity> page = new Page<>();
            page.setCurrent(1); //页数
            page.setSize(3);    //每页条数
            //条件构造
            QueryWrapper queryWrapper =new QueryWrapper();
            queryWrapper.ge("age", 22);
    
            page = userInfoService.page(page,queryWrapper);
            return page;
        }
    

    指定字段查询用户信息

    @GetMapping("/getList")
        public Collection<UserInfoEntity> getListMap() {
            Map<String, Object> map = new HashMap<>();
            //key:字段名 value:值
            map.put("name", "小赵");
            Collection<UserInfoEntity> userInfoList = userInfoService.listByMap(map);
            return userInfoList;
        }
    

    新增

        @GetMapping("/saveInfo")
        public void saveInfo() {
            UserInfoEntity userInfoEntity = new UserInfoEntity();
            userInfoEntity.setName("小赵");
            userInfoEntity.setAge(18);
            userInfoService.save(userInfoEntity);
        }
    

    批量新增

        @GetMapping("/saveInfoList")
        public void saveInfoList() {
            //创建对象
            UserInfoEntity xiaoli = new UserInfoEntity();
            sans.setName("小李");
            sans.setAge(18);
            UserInfoEntity xiaozhao = new UserInfoEntity();
            papyrus.setName("小赵");
            papyrus.setAge(18);
            //批量保存
            List<UserInfoEntity> list = new ArrayList<>();
            list.add(xiaoli);
            list.add(xiaozhao);
            userInfoService.saveBatch(list);
        }
    
    

    更新

        @GetMapping("/updateInfo")
        public void updateInfo() {
            //根据实体中的ID去更新,其他字段如果值为null则不会更新该字段,参考yml配置文件
            UserInfoEntity userInfoEntity = new UserInfoEntity();
            userInfoEntity.setId(1);
            userInfoEntity.setAge(19);
            userInfoService.updateById(userInfoEntity);
        }
    

    新增或者更新

        @GetMapping("/saveOrUpdate")
        public void saveOrUpdate() {
            //实体类ID值存在,如果数据库存在ID就会更新,如果不存在就会新增
            UserInfoEntity userInfoEntity = new UserInfoEntity();
            userInfoEntity.setId(1);
            userInfoEntity.setAge(20);
            userInfoService.saveOrUpdate(userInfoEntity);
        }
    

    根据ID删除

        @DeleteMapping("/deleteInfo/{userId}")
        public void deleteInfo(@PathVariable("userId") String userId) {
            userInfoService.removeById(userId);
        }
    

    根据ID批量删除

        @GetMapping("/deleteList")
        public void deleteInfoList() {
            List<String> userIdlist = new ArrayList<>();
            userIdlist.add("1");
            userIdlist.add("2");
            userInfoService.removeByIds(userIdlist);
        }
    

    根据指定字段删除

        @GetMapping("/deleteInfo")
        public void deleteInfoMap() {
            //key:字段名 value:值
            Map<String, Object> map = new HashMap<>();
            map.put("name", "小李");
            map.put("age", 10);
            userInfoService.removeByMap(map);
        }
    

    条件构造器(QueryWrapper)

    查询 说明
    setSqlSelect 设置 SELECT 查询字段
    where WHERE 语句
    and AND 语句
    or OR 语句
    eq 等于
    allEq 基于 map 内容等于
    ne 不等于<>
    gt 大于
    ge 大于等于
    lt 小于
    le 小于等于
    like 模糊查询
    notLike 模糊查询
    in IN 查询
    notIn NOT IN 查询
    isNull NULL 值查询
    isNotNull 非 NULL 值查询
    groupBy 分组查询
    having 关键词查询
    orderBy 排序
    orderByAsc ASC 排序
    orderByDesc DESC 排序
    exists 果子查询(返回包含行,则返回 TRUE)
    notExists
    between BETWEEN 查询
    notBetween
    addFilter 自由拼接
    last 拼接在最后, 例:last("LIMIT 10")
  • 相关阅读:
    Linux配置——Linux服务器搭建Nexus-Maven私服(适合新手比较基础)
    maven配置——Maven3版本的超级POM位置及中央仓库位置
    CentOS7使用——使用命令连接网络配置
    H5页面开发流程
    在Sublime Text 3上集成JSHint检查
    如何快速开发符合规范的web页
    Talking about your future
    Healthy living
    谈论较受欢迎的电影类型
    谈论电视节目
  • 原文地址:https://www.cnblogs.com/xiaoxiaoliu/p/11185196.html
Copyright © 2011-2022 走看看