大雪坪剑来 Spring Cloud 教程(二):Spring Boot 集成 mybatis 实现增删改查

环境准备,在之前的Spring Boot 教程(一)基础上,我们还需要做如下准备:

  • mysql数据库安装及配置(详见之前的博客:骑鹤下江南 mysql 安装及配置)
  • 一款测试后端的工具:PostMan,可自行在网上百度
  • (可选)配置本地maven库
  1. 有了mysql数据库,我们就可以在Spring Boot 上进行相应的配置了,首相配置pom 文件的maven依赖:
<!--        添加jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
<!--        添加mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
<!--        添加mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
  1. 配置yml文件,对于yml在这里简单介绍一下,还想了解更过可以百度,毕竟也是学习的过程。
    首先声明,所谓的yml文件 全名就是 application.yml,和 resources 目录下的application.properties功能相同,存放的位置也相同。
    其次application.yml 是需要新建的 ,项目生成的时候没有,新建了application.yml后需要删除原application.properties,因为会互斥。
    其中yml的可以是树型结构,也可以是目录形式层级之间用“.” 分割。
    最后给大家贴一张图,这是删除application.properties,并新建application.yml 后的效果:
    在这里插入图片描述
  2. 在yml文件中添加如下配置:
spring.datasource.url: jdbc:mysql://localhost:3306/bootshop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username: root
spring.datasource.password: 111111
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver

其中bootshop 是数据库名, 111111 是设置的mysql数据库密码。如图所示:
在这里插入图片描述

  1. 在数据库新建表 下面是我建的表(小说信息表),为了验证增删改查 结构比较简单,有3个字段,分别是id(编号,非自增),name(小说名),author(作者):

在这里插入图片描述

  1. 进行项目内的java代买书写及目录结构建立。本着所有的代码都需要被Demo2Application扫描到的原则(原因已经在教程(一)中阐述了),建立如下目录:
    pojo 存放实体类;
    service 存放逻辑代码;
    mapper 存放数据访问接口,相当于dao层,用于调用xml(mybatis的xml及对应的Spring Boot配置下文中会讲到)作为数据访问层 ;
    在这里插入图片描述

  2. 书写各层代码 ,以根据id查询一条数据为例

首先于pojo下新建实体类Book,添加成员变量id,name,author,及get set 方法,及引用如下:

在这里插入图片描述
其中 @Component 作用:把普通pojo实例化到spring容器中

  1. 在mapper 下新建 BookMapper 添加代码如下:
    在这里插入图片描述
@Repository
public interface BookMapper {

    public List<Book> queryBookById(@Param(value = "id") String id);

}

@Repository:repository原意指的是仓库,即数据仓库的意思,Repository蕴含着真正的面向对象概念,即一个数据仓库角色,负责所有对象的持久化管理。
@Param(value = “id”) :用于写有sql的xml中,标识传入的参数

  1. 在service下新建 BookService添加代码如下:
    在这里插入图片描述
@Service
public class BookService {
    @Autowired
    BookMapper bookMapper;

    //查询
    public List<Book> queryBookById(String id){
        return bookMapper.queryBookById(id);
    }
    
}

@Service: 用于标注业务层组件
@Autowired:自动导入,将创建的 Bean 注册到 IOC 容器中

  1. 于Controller下,新建BookInfoController,添加代码,并添加引用:
    在这里插入图片描述
@RestController
public class BookInfoController {

    @Autowired
    private BookService bookService;

    //查询所有 或 根据id查询
    @RequestMapping("/getBook")
    public List<Book> getBook(@RequestParam(required = false) String id) {

        List<Book> book1 = bookService.queryBookById(id);
        return book1;
    }

}

@RequestMapping("/getBook"): @RequestMapping 是一个用来处理请求地址映射的注解, /getBook为浏览器访问的地址
@RequestParam(required = false) String id: 其中 @RequestParam(required = false) 是对于id的修饰 ,表示不必须,即可以为空
此时返回的数据结果集,应该是不带有id条件的,即返回的是所有记录。

  1. 接下来需要进行mybatis在yml中的配置 及 xml文件的书写:
    首先 在resources,文件夹下 新建mapping 文件夹,在其中新建BookMapper.xml, 新建的目录结构,及文件内容为:
    此处说明一下图中箭头的意义,仅给不常用mybatis的同学说道说道:
    1.映射到mapper:指namespace命名空间的地址应为对应的mapper的地址(图片中的demo1写错了,后来回来P成demo2的,见谅,下面贴的代买已经改过来了)
    2.映射的实体:指将resultMap的类型定义为对应的实体,在resultMap内部的字段和实体的成员变量对应
    3.于mapper中的方法名对应:指id应和mapper中的方法名相同
    4.相同:指查询sql的返回结果类型
    5.判断:此处是mybatis的一种判空的应用,如果不为空则sql会拼接下面的条件,否则没有=id这个条件,即查询所有。此处有两点需要说明,第一点在mapper中写了@Param(value = “id”) ,就是用在标识判断条件中的id,否则直接在sql中写<if test “id!=null” …>会报错;第二点,此处判断是配合controller中@RequestParam(required = false) String id 而写的,实现了不带有id条件,返回的所有记录。
    在这里插入图片描述
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo2.mapper.BookMapper">

    <resultMap id="BaseResultMap" type="com.example.demo2.pojo.Book">
        <result column="id" jdbcType="VARCHAR" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="author" jdbcType="VARCHAR" property="author" />
    </resultMap>

    <!--查询-->
    <select id="queryBookById" resultMap="BaseResultMap" parameterType="String">
        select id,name,author from book_info where 1=1
        <if test="id!=null and id!=''">
            AND id = #{id}
        </if>

    </select>

</mapper>

新建完xml文件后,yml 文件中添加:mybatis.mapper-locations: classpath:mapping/*.xml
在这里插入图片描述

  1. 最后一步 打开Demo2Application文件,添加注解@MapperScan(value = “com.example.demo2.mapper”):
    在这里插入图片描述
    @MapperScan:可以指定要扫描的Mapper类的包的路径。如果不添加这个注解,那就要在每个mapper上添加@Mapper注解;注解多个mapper包 @MapperScan({“com.example.demo2.mapper”,“com.example.demo1.mapper”})

  2. 在数据库中插入几条数据,用作测试
    在这里插入图片描述

  3. 启动项目,打开postman 访问地址localhost:8080/getBook,按图所示,添加查询条件key=id,value=111,点击send:
    在这里插入图片描述
    可以看到已经可以查询到数据库数据了,返回的实体是json格式的数据。试着把id前的对号点掉,也就是没有查询条调用getBook,则返回的值是所有的数据,效果如下 (太长不截了):
    在这里插入图片描述
    到目前为止的目录机构为(我是在教程(一)基础上做的,所以会有HelloController类):
    在这里插入图片描述

  4. 查询已经实现了,增删改 无非是在各个层级增加对应的方法,下面把方法的截图附上,并附上gitHub 链接:
    **其中需要注意:**在进行新增修改测试时,需要向后台传入实体,而postman传入实体对象参数的方法如下图所示,对象需要写成json形式
    在这里插入图片描述
    Controller:
    在这里插入图片描述
    service:
    在这里插入图片描述
    mapper:
    在这里插入图片描述
    xml:
    在这里插入图片描述
    git:https://github.com/HappyHappyWen/demo2.git

写在最后:提供方法、提供思路,但无法提供过程,过程很重要,诸君共勉之。

大雪坪剑来:

老剑神李淳罡望向这一幕,瞪大眼睛。
随即眼中黯然落寞缅怀追忆皆有。
那一年背负那女子上斩魔台,一样是大雨天气,一样是撑伞。
世人不知这位剑神当年被齐玄帧所误,木马牛被折并不算什么,只剩独臂也不算什么,这都不是李淳罡境界大跌的根由,哪怕在听潮亭下被困二十年,李淳罡也不曾走出那个自己的画地为牢。
原本与世已是无敌,与己又当如何?
李淳罡想起她临终时的容颜,当时她已说不出一个字,可今日想来,不就是那不悔两字吗?!
李淳罡走到大雪坪崖畔,身后是一如他与绿袍女子场景的撑伞男女。
她被一剑洞穿心胸时,曾惨白笑言:“天不生你李淳罡,很无趣呢。”
李淳罡大声道:“剑来!”
徽山所有剑士的数百佩剑一齐出鞘,向大雪坪飞来。
龙虎山道士各式千柄桃木剑一概出鞘,浩浩荡荡飞向牯牛大岗。
两拨飞剑。
遮天蔽日。
这一日,剑神李淳罡再入陆地剑仙境界。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值