springboot 项目实战-03章

1.本章介绍

(1)本章总的任务是要完成后端框架搭建和查询接口开发

(2)首先下载mysql,idea关联 mysql,数据库可视化(本地就可以用navicate之类的,我用Sequel Pro,之后服务部署最好用阿里云)

(3)集成mybaits

(4)集成mybaits Generator

(5)电子书查询接口开发

2.mysql 配置

(1)下载mysql(略)

(2)idea 插件如何使用mysql 执行.sql 文件,执行sql语句:https://blog.csdn.net/fengxueliuke/article/details/106836846

3.mybaits持久层框架

(1)横向上来说,持久层是与数据库打交道、同时还有服务层,也叫业务层,写业务逻辑的、表现层是与界面相关的。

(2)纵向上来说,持久层框架除了mybaits还有hibernate。mybaits是半自动框架,还要写sql,hibernate是全自动框架,不需要写sql。

(3)集成mybatis:

第一步,加依赖

 <!-- 集成mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <!-- 集成mysql连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
View Code

第二步,配置文件写入数据源链接等

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/wiki
spring.datasource,username=root
spring.datasource.password=xxx
View Code

注意,这个配置文件中,spring.datasource.url配置成什么样都可以启动服务,因为不会真的去链接数据库, 只会检查有没有配置数据源链接。

(4)如何配置持久层?

第一步,如果你有一个数据表叫Test,那么,首先生成一个实体类。实体类所在的包名往往叫domain、entity、pojo。实体类与数据库表一一映射,比如数据表中有字段id、name、password,那么生成实体类就是这样的。

package com.sankuai.wiki.domain;

public class Test {
    private Integer id;

    private String name;

    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
View Code

第二步,生成mapper。持久层又叫Mapper层,也就是广为人知的Dao层,如果后续用官方代码生成器,其生成的代码就是XXXMapper

写一个XXXMapper接口,接口中有一个方法,

package com.xxx.wiki.mapper;

import com.xxx.wiki.domain.Test;

import java.util.List;

public interface TestMapper {
    public List<Test> list();
}
View Code

第三步,写sql脚本。在resource 下面新建dir 取名mapper,mapper下面新增同名xml,XXXMapper.xml 

内容如下:

<?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" > 
<!--开头这2行,复制粘贴即可-->
<mapper namespace="com.xxx.wiki.mapper.TestMapper"> <select id="list" resultType="com.xxx.wiki.domain.Test"> </select> </mapper>


其中,<mapper namespace="com.xxx.wiki.mapper.TestMapper">,namespace:持久层Mapper的类名

<select id="list" resultType="com.xxx.wiki.domain.Test"> ,

id:持久层接口的方法返回类型,由接口中的方法定义的。

resultType:实体类类名。

select 标签中间,是执行的sql

第四步:发问1,整个项目怎么知道mapper层是持久层?

在启动类中,加上@MapperScan("com.xxx.wiki.mapper"),扫描的时候,就会认为这个包下面的就是持久层

第五步:发问2,整个项目怎么知道xxx.xml就是要执行的sql?

在配置文件中,加上 mybatis.mapper-locations=classpath:/mapper/**/*.xml,项目就认识了。

其中,classpath是指,resource路径,mapper就是我们新建的文件夹,/**/*.xml 的意思是,** 表示,不管是几层文件夹,*.xml 表示,以.xml类型的文件。

也就是mapper/a.xml、mapper/aaa/a.xml、mapper/aaa/bbb/a.xml都能被系统识别为要被执行的sql。

(5)怎么使用持久层?

  新建service包,包路径 com.xxx.wiki.service。new一个类,如下

package com.xxx.wiki.service;

import com.xxx.wiki.domain.Test;
import com.xxx.wiki.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class TestService {
    @Resource
    //@Autowired
    private TestMapper testMapper;
    public List<Test> list(){
        return testMapper.list();
    }
}

在controller层的TestController 中加一个get请求

@GetMapping("/test/list")
    public List<Test> list(){
        return testService.list();
    }

记得在该类中注入

 @Resource
    private TestService testService;

在test.http中请求

GET http://localhost:8088/test/list
Accept: application/json

###

 得到结果

GET http://localhost:8088/test/list

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 28 Jan 2022 09:16:50 GMT
Keep-Alive: timeout=60
Connection: keep-alive

[
  {
    "id": 100,
    "name": "前端开发",
    "password": null
  },
  {
    "id": 101,
    "name": "Vue",
    "password": null
  },
  {
    "id": 102,
    "name": "HTML & CSS",
    "password": null
  },
  {
    "id": 200,
    "name": "Java",
    "password": null
  },
  {
    "id": 201,
    "name": "基础应用",
    "password": null
  },
  {
    "id": 202,
    "name": "框架应用",
    "password": null
  },
  {
    "id": 300,
    "name": "Python",
    "password": null
  },
  {
    "id": 301,
    "name": "基础应用",
    "password": null
  },
  {
    "id": 302,
    "name": "进阶方向应用",
    "password": null
  },
  {
    "id": 400,
    "name": "数据库",
    "password": null
  },
  {
    "id": 401,
    "name": "MySQL",
    "password": null
  },
  {
    "id": 500,
    "name": "其它",
    "password": null
  },
  {
    "id": 501,
    "name": "服务器",
    "password": null
  },
  {
    "id": 502,
    "name": "开发工具",
    "password": null
  },
  {
    "id": 503,
    "name": "热门服务端语言",
    "password": null
  }
]

Response code: 200; Time: 175ms; Content length: 625 bytes
View Code

4.集成mybatis官方代码生成器

(1)集成mybatis Generator:3中,我们写一个mybatis功能,需要写实体类、xml、接口,比较繁琐。用官方提供的mybatis Generator就可以省下这些不走,一些单表的crud操作,都可以不用自己写代码了。当然,复杂的sql还得自己写。

  配置只需要2步。

  第一步,配置pom依赖 

  

   <!-- mybatis generator 自动生成代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.0</version>
                <configuration>
                    <configurationFile>src/main/resources/generator/generator-config.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.22</version>
                    </dependency>
                </dependencies>
            </plugin>

  第二步,配置配置文件

  pom.xml依赖中,说明 配置文件需要在这里读 <configurationFile>src/main/resources/generator/generator-config.xml</configurationFile>

  我们就按照这个目录来新建generator-config.xml文件

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">

        <!-- 自动检查关键字,为关键字增加反引号 -->
        <property name="autoDelimitKeywords" value="true"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!--覆盖生成XML文件-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
        <!-- 生成的实体类添加toString()方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <!-- 不生成注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/wiki?serverTimezone=Asia/Shanghai"
                        userId="root"
                        password="xxx">
        </jdbcConnection>

        <!-- domain类的位置 -->
        <javaModelGenerator targetProject="src/main/java"
                            targetPackage="com.xxx.wiki.domain"/>

        <!-- mapper xml的位置 -->
        <sqlMapGenerator targetProject="src/main/resources"
                         targetPackage="mapper"/>

        <!-- mapper类的位置 -->
        <javaClientGenerator targetProject="src/main/java"
                             targetPackage="com.xxx.wiki.mapper"
                             type="XMLMAPPER"/>

        <table tableName="demo" domainObjectName="Demo"/>
        <!--<table tableName="ebook"/>-->
        <!--<table tableName="category"/>-->
        <!--<table tableName="doc"/>-->
        <!--<table tableName="content"/>-->
        <!--<table tableName="user"/>-->
        <!--<table tableName="ebook_snapshot"/>-->
    </context>
</generatorConfiguration>

文件内容不用记,知道怎么用就可以了。最主要的是加粗的地方,将mybatis手动配置的文件目录路径,都配置在这里。

然后,配置一起启动命令:

Editor Configuraor -> Maven 

name:mybatis-generator

Commad Line: mybatis-generator:generate -e

配置好了之后,运行,编译成功,发现新增了4个文件。mapper层的接口类:DemoMapper.java、实体层的Demo.java  DemoExample.java, sql执行语句的xml文件 DemoMapper.xml

这四个文件,不要改,以后都不要改,是mybatis generator 自动生成的,之前只集成mybatis,这些都得靠自己手写。

(2)演示demo表列表查询

  新增一个service 类,再新增一个controller类,查询一下demo表,能查询成功,表示集成mybatis Generator成功了,和集成mybtis+手写持久化mapper层+实体层+sql xml执行语句 达到了一样的效果。

posted @ 2022-01-29 17:01  XiaoLee-C  阅读(41)  评论(0编辑  收藏  举报