ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot整合MyBatis

2019-07-14 19:01:02  阅读:184  来源: 互联网

标签:SpringBoot 查询 UserInfoEntity 整合 MyBatis new ID public userInfoEntity


什么是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")

标签:SpringBoot,查询,UserInfoEntity,整合,MyBatis,new,ID,public,userInfoEntity
来源: https://www.cnblogs.com/xiaoxiaoliu/p/11185196.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有