首页 > 其他分享 >springboot整合mybatis(纯注解版)

springboot整合mybatis(纯注解版)

时间:2024-02-01 10:48:00浏览次数:28  
标签:springboot boot Integer blog import mybatis 注解 com

springboot整合mybatis

1、注解:参考表

  • @ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。

  • @Controller:用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。

  • @RestController:用于标注控制层组件,@ResponseBody和@Controller的合集。

  • @Autowired:自动导入依赖的bean

  • @Mapper:一般用于修饰dao层(Mapper层)的组件

  • @Service:一般用于修饰service层的组件

  • @Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

  • @RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。根据不同需求和场景可以使用 @GetMapping、 @PostMapping、@DeleteMapping和@PutMapping进行替代

  • @RequestBody:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交

2、项目流程

2.1、添加依赖

在项目POM文件中添加依赖,这里需要加入几个常用的依赖,分别如下:

 

当然也可以手动添加pom.xml进去

<dependencies>
    <dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>3.0.3</version>
    </dependency>
​
    <dependency>
       <groupId>com.mysql</groupId>
       <artifactId>mysql-connector-j</artifactId>
       <scope>runtime</scope>
    </dependency>
    <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter-test</artifactId>
       <version>3.0.3</version>
       <scope>test</scope>
    </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>

2.2、配置文件

  1. 接下来配置application.yml,将数据源和MyBatis分别进行配置,使其生效:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ssmtest?useSSL=true&useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
​
# Java结果集对象中自动转换成驼峰命名参数
mybatis:
  configuration:
    map-underscore-to-camel-case: true
server:
  port: 8080

理解:其中,对于map-underscore-to-camel-case配置,是为了将数据库字段和实体对象属性做映射,对于数据库表中aa_bb形式的表名或字段名,可自动映射成aaBb形式。

2.3、代码实现

  1. 项目整体架构(注意所以的包都要和主方法在一个路径下面也就是包下面)

     

  2. 编写entity实体类

     

  3. 编写mapper

    • 定义Mapper,在dao包中创建UserMapper接口,进行数据库查询的定义,这里先实现CRUD的基础操作:

    package com.lyh.boot.mapper;
    ​
    import com.lyh.boot.entity.Blog;
    import org.apache.ibatis.annotations.*;
    ​
    import java.util.List;
    ​
    @Mapper
    public interface BlogMapper {
        @Select("select * from ssmtest.blog")
        List<Blog> blogList();
        @Insert("insert into ssmtest.blog(title,author,create_time,views) VALUES(#{title},#{author},#{createTime},#{views})")
        Integer addBlog(Blog blog);
        @Update("update ssmtest.blog set title=#{title},author=#{author},create_time=#{createTime},views=#{views} where id = #{id}")
        Integer updateBlog(Blog blog);
        @Delete("delete from ssmtest.blog where id = #{id}")
        Integer deleteBlog(@Param("id") Integer id);
    ​
    ​
    }
    • @Mapper注解是MyBatis的注解,是用来说明这个是一个Mapper,对应的xxxMapper.xml就是来实现这个Mapper。然后再server层使用@Autowired注解或者@Resource引用进即可。可省略,需要在启动类上添加Mapper扫描基础包的配置:

    @MapperScan(value = {"com.lyh.boot.mapper"})
    • @Insert注解、@Update、@Select、@Delete声明方法要执行的语句。

    • @Param注解用于给定映射器方法参数一个名字,如不添加,参数将会以他们的顺序位置来被命名。

    注意:因为是纯注解,需要使用@Mapper注解和@Repository注解来将这个类注册为Mapper类方便Spring识别,且无需配置Mapper映射xml文件,用注解来声明查询的Sql即可。

  4. 编写service

    Service接口与具体实现类编写,首先在service包中新建impl实现类子包,然后在service包中添加UserService类,编写查询业务:

    • 接口

      package com.lyh.boot.service;
      ​
      import com.lyh.boot.entity.Blog;
      ​
      import java.util.List;
      ​
      public interface BlogService {
          //查询所以数据
          List<Blog> blogList();
          //添加数据
          Integer addBlog(Blog blog);
          //修改数据
          Integer updateBlog(Blog blog);
          //根据ID删除数据
          Integer deleteBlog(Integer id);
      }
    • 实现类IMPl

      package com.lyh.boot.service.impl;
      ​
      import com.lyh.boot.entity.Blog;
      import com.lyh.boot.mapper.BlogMapper;
      import com.lyh.boot.service.BlogService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      ​
      import java.util.List;
      ​
      @Service
      public class BlogServiceImpl implements BlogService {
          @Autowired
          private BlogMapper blogMapper;
      ​
      ​
          @Override
          public List<Blog> blogList() {
              List<Blog> blogs = blogMapper.blogList();
              System.out.println(blogs.toString());
              return blogs;
          }
      ​
          @Override
          public Integer addBlog(Blog blog) {
              Integer i = blogMapper.addBlog(blog);
              System.out.println(i);
              return i;
          }
      ​
          @Override
          public Integer updateBlog(Blog blog) {
              return blogMapper.updateBlog(blog);
          }
      ​
          @Override
          public Integer deleteBlog(Integer id) {
              Integer i = blogMapper.deleteBlog(id);
              if (i>0){
                  System.out.println("删除成功");
              }
              return i;
          }
      ​
      }
    • 注意:

      需要注意的是,真正实现Service的作用的是实现类BlogServiceImpl并非BlogService接口,因此,@Service注解应添加至实现类上方。

  5. 编写controller

    最后是Controller,在controller包中,创建UserController类,用来处理用户请求等操作:

    package com.lyh.boot.controller;
    ​
    import com.lyh.boot.entity.Blog;
    import com.lyh.boot.service.BlogService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.stereotype.Repository;
    import org.springframework.web.bind.annotation.*;
    ​
    import java.util.List;
    ​
    @RestController
    @RequestMapping("blog")
    public class BlogController {
        @Autowired
        private BlogService blogService;
    ​
        @GetMapping("list")
        public List<Blog> getBlogList() {
            return blogService.blogList();
        }
    ​
        @PostMapping("add")
        public boolean addBlog(@RequestBody Blog blog) {
            Integer addBlog = 0;
            try {
                addBlog = blogService.addBlog(blog);
            } catch (Exception e) {
                System.out.println("sss");
            }
    ​
            if (addBlog > 0) {
                return true;
            }
            return false;
        }
    ​
        @PostMapping("update")
        public boolean updateBlog(@RequestBody Blog blog) {
            Integer updateBlog = 0;
            try {
                updateBlog = blogService.updateBlog(blog);
            } catch (Exception e) {
                System.out.println("修改失败");
            }
            if (updateBlog > 0) {
                return true;
            }
            return false;
        }
    ​
        @PostMapping("delete")
        public boolean deleteBlog(@RequestBody Integer id) {
            Integer deleteBlog = 0;
            try {
                deleteBlog = blogService.deleteBlog(id);
            } catch (Exception e) {
                System.out.println();
            }
            if (deleteBlog > 0) {
                return true;
            }
            return false;
        }
    ​
    ​
    }

    因为本文不涉及任何Web界面,所有的Controller方法均以restful api 方式呈现,因此直接使用@RestController注解来修饰;次出分别定义了四个API,用于实现CRUD,接下来运行项目,使用接口调试工具来测试接口可用性。

  6. 测试:

    ​
    ###查询所以用户
    GET http://localhost:8686/blog/list
    ​
    <> 2024-01-31T171434.200.json
    <> 2024-01-31T170831.200.json
    <> 2024-01-31T164053.200.json
    ​
    ###添加用户信息
    POST http://localhost:8686/blog/add
    Content-Type: application/json
    ​
    {
      "title": "网络安全",
      "author": "jialihao",
      "createTime": "1992-6-3",
      "views": 1000
    ​
    }
    ​
    <> 2024-01-31T171533.500.json
    <> 2024-01-31T171524.500.json
    <> 2024-01-31T171440.500.json
    <> 2024-01-31T170916.500.json
    <> 2024-01-31T165611.500.json
    <> 2024-01-31T165541.500.json
    ​
    ###修改用户信息
    POST http://localhost:8686/blog/update
    Content-Type: application/json
    ​
    {
      "id": 9,
      "title": "网络安全",
      "author": "jialihao",
      "createTime": "1992-6-3",
      "views": 1000
    }
    ​
    <> 2024-01-31T174548.200.json
    ​
    ###删除用户信息
    POST http://localhost:8686/blog/delete
    Content-Type: application/json
    ​
    {
      "id": 9
    }
  7. 错误集合,

    java.lang.ClassNotFoundException: com.lyh.boot.SpringbootMybatisCrudApplication

    解决办法:

    有可能你导入了gradle这个和你的maven仓库冲突了,我的是这样把gradle仓库删除就好了

标签:springboot,boot,Integer,blog,import,mybatis,注解,com
From: https://www.cnblogs.com/lyhidea/p/18000714

相关文章

  • springboot @configuration
    @controller@service@repository下面都是@component注解booleanproxyBeanMethods()defaulttrue;proxyBeanMethods 是 Spring Boot 中 @Configuration 注解的一个属性,用于控制是否应该为 @Configuration 类中通过 @Bean 方法定义的 bean 创建代理。这个属性的......
  • Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用
    目录一、Builder模式二、工厂模式三、单例模式四、代理模式五、组合模式六、模板方式模式七、适配器模式八、装饰器模式九、迭代器模式虽然我们都知道有23种设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应......
  • 使用注解替换Spring配置文件&SpringMVC的配置文件
    创建初始化类,替换web.xml在Servlet3.0环境中,Web容器(Tomcat)会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebA......
  • mybatis的代码生成器generate的使用
    三步1、打开idea的插件管理,添加mybatisPlus 2、连接数据库  3、找到对应的表  下面红色圈内的内容需要注意,比如module是你想把代码生成在哪个模块,其次是package就是想在哪个目录下,然后就是主键自增方式和生成的哪些类。之后就看下生成的类是否有问题即可,一般是......
  • Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl
     源码及更详细的介绍说明参见Git上的README.md文档https://github.com/asleepyfish/chatgpt本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatg......
  • SpringBoot中两种常用定位切点的方法
    有时候,我们使用AOP来进行放的增强,编写切面类的时候,需要定位在哪个方法上试用该切面进行增强,本文主要讲解两种在SpringBoot中定位切点的方法,一种是使用execution表达式的方法,一种则是利用自定义注解的方法。execution表达式execution表达式的方式主要是在定义切点的时候,通过表达......
  • SpringBoot介绍
    SpringBoot一、介绍我们在搭建传统SSM项目时,通常需要导入很多依赖,但每种依赖又有许多版本,这就很容易出现依赖冲突。此外,繁琐的配置也是一大痛点,太多了,让人很难记住,因此SpringBoot诞生了。SpringBoot是对Spring的深度封装,基于约定优于配置的思想,提供了大量的默认配置和实现。......
  • 基于springboot开发的工作流系统,bpmn.js,vue源码及功能分析(activiti)
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作......
  • mybatis-flex框架多数据源缺陷以及IN和exists的区别及应用
    mybatis-flex框架多数据源情况下,跨数据源查询,因为没法用在一个queryWrapper查询,所以会需要分步查询,就需要使用到子查询。众所周知,子查询速度比join查询慢,所以多数据源有该缺陷。in关键字,和exist关键字,这两个是相反的。区别及应用场景in和exists的区别:如果子查询......
  • SpringBoot 整合多数据源的事务问题
    代码先贴代码:核心就是:Spring给我们提供的一个类AbstractRoutingDataSource,然后我们再写一个切面来切换数据源,肯定要有一个地方存储key还要保证上下文都可用,所以我们使用ThreadLocal来存储数据源的keypom.xml<dependency><groupId>org.springframework.boot</gr......