当前位置:

首页 > 编程开发 > java SpringBoot整合MyBatisPlus的方法是什么

java SpringBoot整合MyBatisPlus的方法是什么

1.什么是springboot自动装配?自动装配是springboot的核心,一般提到自动装配就会和springboot联系在一起。实际上SpringFramework早就实现了这个功能。SpringBoot只是在其基础上,通过SPI的方式,做了进一步优化。SpringBoot定义了一套接口规范,这套规范规定:SpringBoot在启动时会扫描外部引用jar包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到Spring容器(此处涉及到JVM类加载机制与Spring的

本文目录

    1.什么是springboot自动装配?

    自动装配是springboot的核心,一般提到自动装配就会和springboot联系在一起。实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。

    SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot

    2.springboot注解:

    @EnableAutoConfiguration:扫包范围默认当前类。
    @ComponentScan(" “) 扫包范围默认当前类所在的整个包下面所有类。
    扫包范围大于@EnableAutoConfiguration,@ComponentScan(” ")依赖于@EnableAutoConfiguration启动程序。
    @EnableAutoConfiguration
    @ComponentScan("第三方包 ")
    app.run()
    @SpringBootApplication 扫包范围同级包和当前包。
    @SpringBootApplication 底层等同于@EnableAutoConfiguration+@ComponentScan。不扫描第三方包

    3.springboot整合mybatisplus实现增删改查

    1.首先导入相关依赖

       
            
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                com.baomidou
                mybatis-plus-boot-starter
                3.5.1
            
            
                com.spring4all
                swagger-spring-boot-starter
                1.9.1.RELEASE
            
            
                com.github.xiaoymin
                swagger-bootstrap-ui
                1.7.8
            
    
            
                mysql
                mysql-connector-java
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        

    2.创建数据表并添加数据

    DROP TABLE IF EXISTS `category`;
    CREATE TABLE `category`  (
      `cid` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
      `cname` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`cid`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = DYNAMIC;
    
    -- ----------------------------
    -- Records of category
    -- ----------------------------
    INSERT INTO `category` VALUES ('c001', '家电');
    INSERT INTO `category` VALUES ('c002', '鞋服');
    INSERT INTO `category` VALUES ('c003', '化妆品');
    INSERT INTO `category` VALUES ('c004', '汽车');
    
    -- ----------------------------
    -- Table structure for products
    -- ----------------------------
    DROP TABLE IF EXISTS `products`;
    CREATE TABLE `products`  (
      `pid` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
      `pname` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
      `price` int NULL DEFAULT NULL,
      `flag` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
      `category_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`pid`) USING BTREE,
      INDEX `category_id`(`category_id`) USING BTREE,
      CONSTRAINT `products_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT
    ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = DYNAMIC;
    
    -- ----------------------------
    -- Records of products
    -- ----------------------------
    INSERT INTO `products` VALUES ('p001', '小\r\n米电视 机', 5000, '1', 'c001');
    INSERT INTO `products` VALUES ('p002', '格\r\n力空调', 3000, '1', 'c001');
    INSERT INTO `products` VALUES ('p003', '美\r\n的冰箱', 4500, '1', 'c001');
    INSERT INTO `products` VALUES ('p004', '篮\r\n球鞋', 800, '1', 'c002');
    INSERT INTO `products` VALUES ('p005', '运\r\n动裤', 200, '1', 'c002');
    INSERT INTO `products` VALUES ('p006', 'T\r\n恤', 300, '1', 'c002');
    INSERT INTO `products` VALUES ('p009', '篮球', 188, '1', 'c002');

    3.在项目中创建如下目录

    java SpringBoot整合MyBatisPlus的方法是什么

    4.在resources下创建application.propertis并配置数据源

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.url=jdbc:mysql:///springboot
    
    #日志
    mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    
    mybatis.mapper-locations=classpath:mapper/*.xml

    5.在pojo下创建实体类

    package com.azy.pojo;
    
    import java.io.Serializable;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * products
     * @author 
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @TableName(value = "products")
    public class Products implements Serializable {
        @TableId(type = IdType.AUTO)
        private String pid;
    
        public Products(String pid, String pname, Integer price) {
            this.pid = pid;
            this.pname = pname;
            this.price = price;
        }
    
        private String pname;
    
        private Integer price;
    
        private String flag;
    
        private String category_id;
        @TableField(exist = false)
        private Category category;
    
        private static final long serialVersionUID = 1L;
    }

    6.在dao层下创建ProductDao这个接口,由于mybatisplus封装了单表的增删改查,所有只需继承BaseMapper这个接口就ok

    package com.azy.dao;
    
    import com.azy.pojo.Products;
    
    import com.baomidou.mybatisplus.core.conditions.Wrapper;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import org.apache.ibatis.annotations.Param;
    
    /**
     * @ fileName:ProductsDao
     * @ description:
     * @ author:Azy
     * @ createTime:2023/4/11 18:57
     * @ version:1.0.0
     */
    public interface ProductsDao extends BaseMapper {
        IPage findPage(IPage iPage, @Param("ew") Wrapper wrapper);
    }

    7.在resources下面的mapper下创建ProductsDao.xml

    
    
    
        
            
            
            
            
            
            
                
                
            
        
    
        
            select *
            from products p
            join category c
            on p.category_id=c.cid
            
                
                     ${ew.sqlSegment}
                
            
        
    
    

    8.在test包下的测试类中测试

    package com.azy;
    
    import com.azy.dao.ProductsDao;
    import com.azy.dao.UserDao;
    import com.azy.pojo.Products;
    import com.azy.pojo.User;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @SpringBootTest
    class DemoApplicationTests {
        @Resource
        private UserDao userDao;
        @Test
        void contextLoads() {
            QueryWrapper wrapper = new QueryWrapper<>();
            wrapper.likeRight("name","_z");
            wrapper.or();
            wrapper.between("age",10,20);
            wrapper.orderByDesc("age");
            wrapper.select("name","age");
            List users = userDao.selectList(wrapper);
            users.forEach(System.out::println);
        }
        @Test
        public void delete(){
            System.out.println(userDao.deleteById(5));
        }
        @Test
        public void insert(){
            User user = new User();
            user.setAge(18);
            user.setName("cxk");
            user.setEmail("123@qq.com");
            System.out.println(userDao.insert(user));
        }
        @Test
        public void update(){
            User user = new User();
            user.setAge(19);
            user.setName("azy");
            user.setEmail("321@qq.com");
            user.setId(6L);
            System.out.println(userDao.updateById(user));
        }
        @Test
        public void selectById(){
            System.out.println(userDao.selectById(4));
        }
        @Test
        public void testPage(){
            Page page = new Page<>(1, 3);//current:当前第几页 size:每页显示条数
            userDao.selectPage(page,null);//把查询分页的结构封装到page对象中
            System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
            System.out.println("获取总页数"+page.getPages());//获取当前页的总页数
            System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
        }
    
    //    ==============================================================
        @Resource
        private ProductsDao productsDao;
        @Test
        public void testQueryProductById(){
            System.out.println(productsDao.selectById("p008"));
        }
    
        @Test
        public void testDelete(){
            System.out.println(productsDao.deleteById("p008"));
        }
    
        @Test
        public void testInsert(){
            Products products = new Products();
            products.setPname("滑板鞋");
            products.setFlag("2");
            products.setPrice(8888);
            products.setCategory_id("c002");
            products.setPid("p009");
            System.out.println(productsDao.insert(products));
        }
        @Test
        public void testUpdate(){
            Products products = new Products();
            products.setPname("篮球");
            products.setFlag("1");
            products.setPrice(188);
            products.setCategory_id("c002");
            products.setPid("p009");
            System.out.println(productsDao.updateById(products));
        }
        @Test
        public void testProductsPage(){
            Page page = new Page<>(1, 3);//current:当前第几页 size:每页显示条数
            productsDao.selectPage(page,null);//把查询分页的结构封装到page对象中
            System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
            System.out.println("获取总页数"+page.getPages());//获取当前页的总页数
            System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
        }
        @Test
        public void testProductsPage2(){
            Page page=new Page<>(1,3);
            QueryWrapper wrapper=new QueryWrapper<>();
            wrapper.gt("price",1000);
            productsDao.findPage(page,wrapper);
            System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
            System.out.println("获取总页数"+page.getPages());//获取当前页的记录
            System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
        }
    }

    9.最后运行测试类

    java SpringBoot整合MyBatisPlus的方法是什么

    测试完成

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Yandex官网入口及网页搜索使用方法
    Yandex官网入口及网页搜索使用方法

    Yandex官网入口是https://www.yondex.net/,该平台支持多语言切换、智能搜索匹配、虚拟键盘变更及实时翻译,提供地图、图片、新闻、购物等垂直服务,并具备账户同步、隐私管理、个性化首页和云存储等功能。

    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。