Mybatis

本文介绍了框架技术在提高开发效率中的作用,包括Struts2、Spring等主流框架,以及ORM(如Hibernate和MyBatis)在持久化中的运用。重点讲解了MyBatis-Plus在简化SpringBoot开发中的案例,展示了其基础架构和增删改查操作。
摘要由CSDN通过智能技术生成

一、什么是框架技术?

1. 为什么需要框架技术?

如何更快更好地写简历?
  • 使用word简历模板

使用模板有什么好处呢?

  • 不用考虑布局、排版等,提高效率

  • 可专心在简历内容上

  • 结构统一,便于人事阅读

  • 新手也可以做出专业的简历

2. 什么是框架技术?

框架技术

  • 是一个应用程序的半成品

  • 提供可重用的公共结构

  • 按一定规则组织的一组组件

框架的优势

  • 不用再考虑公共问题

  • 专心在业务实现上

  • 结构统一,易于学习、维护

  • 新手也可写出好程序

3. 主流框架技术介绍

  • Struts2

    • MVC设计模式的实现

    • 拦截器

    • 可变和可重用的标签

  • Hibernate

    • ORM,简化数据库操作

    • DAO层

  • Spring

    • 依赖注入容器 / AOP实现

    • 声明式事务

    • 简化Java EE应用

    • 黏合剂,将大家组装到一起

  • Spring MVC

    • 结构最清晰的MVC Model2实现

    • 高度可配置,支持多种视图技术

    • 定制化开发

  • MyBatis

    • 半自动化的ORM实现

    • DAO层

    • 动态SQL

    • 小巧灵活、简单易学

二、持久化与 ORM

1. 持久化

持久化: 是程序数据在瞬时状态和持久状态间转换的过程

2. ORM (Object Relation Mapping)

ORM(Object Relational Mapping)

  • 编写程序的时候,以面向对象的方式处理数据

  • 保存数据的时候,却以关系型数据库的方式存储

ORM解决方案包含下面四个部分
  1. 在持久化对象上执行基本的增、删、改、查操作

  2. 对持久化对象提供一种查询语言或者API

  3. 对象关系映射工具

  4. 提供与事务对象交互、执行检查、延迟加载以及其他优化功能

ORM 本质:

  1. 将实体类和表对应起来;

  2. 将类属性和表字段对应起来;

  3. 自动完成对象和记录的转换。

3. MyBatis 简介

  • MyBatis前身是iBatis,本是Apache的一个开源的项目 官方网站:mybatis

  • MyBatis 是一个 ORM 框架

    • 实体类和SQL语句之间建立映射关系

  • 特点

    • 基于SQL语法,简单易学

    • 能了解底层封装过程

    • SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度

    • 方便程序代码调试

三、什么是 MyBatis-Plus ?

MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

官网:MyBatis-Plus

基本架构

1. 入门案例

  1. 准备数据库和数据。本例我们使用 webDVD

  2. 创建 SpringBoot 项目,选择功能:

    • Lombok

    • Spring Web

    • MySQL Driver

    • MybatisPlus

  3. 修改 application.yml 配置数据源

    spring:
        datasource:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://127.0.0.1:3306/webdvd?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
            username: root
            password: 123
  4. MybatisPlus 配置(分页)

    @Configuration
    @MapperScan("com.by.mybatisplus01.dao")
    public class MybatisPlusConfig {
        /**
        * 添加分页插件
        */
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
            //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
            return interceptor;
        }
    }
  5. 添加实体类

    @Data
    @AllArgsConstructor
    public class Dvd {
        private Integer id;
        private String  name;
        private Integer state;
        private Date    lendDate;
        private Integer count;
    }
  6. 添加 dao 接口

    package com.by.mybatisplus01.dao;
    ​
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.by.mybatisplus01.entity.Dvd;
    ​
    public interface DvdMapper extends BaseMapper<Dvd> {
    ​
    }

    注: 对!接口是空的,只需继承 BaseMapper 即可。

  7. 测试。增删改查操作

    package com.by.mybatisplus01;
    ​
    import com.by.mybatisplus01.dao.DvdMapper;
    import com.by.mybatisplus01.entity.Dvd;
    import org.springframework.boot.test.context.SpringBootTest;
    import javax.annotation.Resource;
    import java.util.*;
    ​
     @SpringBootTest
     class MybatisPlus01ApplicationTests {
         @Resource
         private DvdMapper dvdMapper;
     
     //    @Test
         public void test01_findAll(){
             List<Dvd> list = dvdMapper.selectList(null);
             list.forEach(System.out::println);
         }
     
     //    @Test
         public void test02_get(){
             Dvd dvd = dvdMapper.selectById(10);
             System.out.println(dvd);
         }
     
     //    @Test
         public void test03_insert(){
             Dvd dvd = new Dvd(null, "教父I", 0, new Date(), 0);
             int r = dvdMapper.insert(dvd);
             System.out.println(r);
             System.out.println(dvd);
         }
     
     //    @Test
         public void test04_update(){
             // 只修改非空字段
             Dvd dvd = new Dvd(41, null, null, null, 100);
             int r = dvdMapper.updateById(dvd);
             System.out.println(r);
             System.out.println(dvd);
         }
     
     //    @Test
         public void test05_delete(){
             int r = dvdMapper.deleteById(41);
             System.out.println(r);
         }
     
         // 根据条件查询记录
     //    @Test
         public void test06_selectOne(){
             Map<String, Object> cond = new HashMap<>();
             cond.put("state", 1);   // key 是列名
             List<Dvd> list = dvdMapper.selectByMap(cond);
             list.forEach(System.out::println);
         }
     
         // 根据 id 批量查询
     //    @Test
         public void test07_selectByIds(){
             List<Integer> ids = new ArrayList<>();
             ids.add(1);
             ids.add(3);
             ids.add(40);
             List<Dvd> list = dvdMapper.selectBatchIds(ids);
             list.forEach(System.out::println);
         }
     }

总结

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值