0
点赞
收藏
分享

微信扫一扫

CGB2107-Day06-SpringBoot整合Mybatis

前端王祖蓝 2022-04-17 阅读 49
java

CGB2107-Day06-SpringBoot整合Mybatis

1. Mybatis补充知识

1.1 参数取值特殊说明

<!--
        知识点:
            1. 形参/实参  参数传递的是值,和名称无关.
            2. resultMap的简化  当开启驼峰映射规则时,可以自动映射,则使用
               resultType即可.
            3. 如果mybatis传递的参数只有一个,则mybatis是利用下标取值.
                所以名称任意 #{xxxx},但是一般需要注意开发规范
    -->
    <select id="findDeptById" resultType="Dept">
        select * from dept where dept_id = #{id}
    </select>

1.2 代理对象说明

1.2.1 常见动态代理

  1. JDK动态代理
    特点:
    1.要求被代理者必须实现(有)接口.
    2.JDK代理是jdk默认提供的.
  2. CGLIB动态代理
    特点:
    1.不管被代理者是否有接口,都可以为其创建代理对象. 代理对象是目标对象的子类.
    2.cglib需要手动导入jar包
    3.spring为了创建代理对象方便,自身自动添加cglib依赖项.

1.2.2 Mapper接口的说明

 /**
     * 案例说明:  根据id查询部门信息
     * 关于对象创建说明:
     *      1.DeptMapper是一个接口. 接口不能直接实例化对象!!!
     *      2.获取的DeptMapper是JDK在内部动态为接口生成的代理对象.
     *      3.调用代理对象功能上与接口一致.
     */
    @Test
    public void testFindDeptById(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        System.out.println(deptMapper.getClass());
        int id = 100;
        Dept dept = deptMapper.findDeptById(id);
        System.out.println(dept);
        sqlSession.close();
    }

2. 三大框架整合

2.1 框架概述

2.1.1 Spring框架

Spring为了团队开发将复杂的框架进行整合,使得程序从控制调用浑然一体.以一种统一的方式进行调用.
核心: 整合第三方框架.

2.1.2 Spring框架核心机制

  1. IOC:
    控制反转: 将对象创建的权利交给Spring容器管理,由Spring容器管理对象的生命周期
    DI: 依赖注入
    创建对象时,如果该对象中有需要依赖的属性,Spring负责为属性赋值.
	@RestController
	public class UserController {
		@Autowired
		private UserService userService;
	}
12345
  1. AOP 面向切面编程

2.1.2 SpringMVC

说明: 该框架的主要的作用 接收用户的请求,之后完成业务处理,最终返回响应给用户.

2.1.3 框架之间的调用关系

在这里插入图片描述

2.2 项目整合实现

2.2.1 创建项目

  1. 创建项目
    在这里插入图片描述

选择springBoot版本
在这里插入图片描述

2.2.2 编辑pom.xml文件

说明: 复制之前的项目中的pom.xml文件 格式如下

 <!--只需要复制 除了坐标之外的文件即可-->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.4.1</spring-boot.version>
    </properties>
    <dependencies>
        <!--springBoot整合mvc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--springBoot整合测试方法-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--支持热部署 开发阶段有效-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!--引入插件lombok 自动的set/get/构造方法插件  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--mybatis依赖包-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!--jdbc依赖包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <mainClass>com.jt.SpringbootDemo1Application</mainClass>
                </configuration>
                <!--排除一些指定的配置-->
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.3 编辑核心代码

2.3.1 编辑User的POJO

package com.jt.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

2.3.2 编辑Mapper接口

package com.jt.mapper;

import com.jt.pojo.User;

import java.util.List;

public interface UserMapper {
    //查询demo_user表中的所有数据
    List<User> findAll();
}

2.3.3 编辑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">
<mapper namespace="com.jt.mapper.UserMapper">

    <select id="findAll" resultType="com.jt.pojo.User">
        select * from demo_user
    </select>
</mapper>

2.3.4 编辑Service接口和实现类

1.编辑UserService接口

package com.jt.service;

import com.jt.pojo.User;

import java.util.List;

public interface UserService {

    //查询user表中的所有的数据
    List<User> findAll();
    
}

2.编辑ServiceImpl实现类

package com.jt.service;

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
@Service    //将该类交给Spring容器管理
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper; //代理对象 JDK动态代理

    @Override
    public List<User> findAll() {
        //List<User> userList = userMapper.findAll();
        //return userList;
        return userMapper.findAll();
    }
}

2.3.5 编辑Controller

package com.jt.controller;

import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController   //@Controller 将该类交给Spring容器管理 +//@ResponseBody 业务返回值时,将数据转化为JSON.
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 需求: 查询全部user表数据
     * 请求类型: get/post/put/delete
     * 路径: /findUser
     * 参数: 无
     * 返回值: List<User>
     */
    @RequestMapping("/getUser")
    public List<User> findUser(){

        return userService.findAll();
    }

}

2.4 编辑核心配置-application.yml

2.4.1 数据源配置

链接写法:

  1. serverTimezone=GMT%2B8 指定时区 东八区
  2. useUnicode=true&characterEncoding=utf8
    开启使用Unicode编码,并且指定字符集utf-8
  3. autoReconnect=true 断线是否重新链接.
  4. &allowMultiQueries=true 是否允许批量操作

2.4.2 编辑yml文件

#语法: 1.key:(空格)value结构
server:
  port: 8090

#整合数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#SpringBoot整合mybatis
mybatis:
  #指定别名包
  type-aliases-package: com.jt.pojo
  #加载指定的xml映射文件
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

2.5 Spring管理Mapper接口

2.5.1 报错说明

在这里插入图片描述

2.5.2 @Mapper和@MapperScan注解

  1. @Mapper
    在这里插入图片描述
  2. @MapperScan 通过包扫描 简化配置信息

img

2.6 整合报错说明

2.6.1 绑定异常

在这里插入图片描述

  1. 检查xml映射文件中的namespace
  2. 检查xml映射文件中Sql的ID
    在这里插入图片描述

3.检查YML文件中xml映射文件的导入
检查YML文件是否定格,是否有层级缩进问题
在这里插入图片描述
4.检查@MapperScan(“com.jt.mapper”)
在这里插入图片描述

2.6.2 数据库链接异常

报错说明: 数据库链接异常
在这里插入图片描述
检查数据库链接地址/用户名/密码
在这里插入图片描述

3 RestFul实现参数传递

3.1 根据ID查询数据

3.1.1 请求路径

Get请求类型:

	url:http://localhost:8090/findUserById?id=1

3.1.2 编辑UserController

  /**
     * 业务: 根据ID查询用户数据.
     * 请求类型: get
     * URL:http://localhost:8090/findUserById?id=1
     * 参数: id=1
     * 返回值: User对象
     * SpringMVC业务规范:
     *      1.接收参数时,必须与用户参数保持一致.
     */
    //@RequestMapping(value = "findUserById",method = RequestMethod.GET)
    @GetMapping("findUserById") //只能接收Get请求类型
    public User findUserById(Integer id){

        return userService.findUserById(id);
    }

3.1.3 编辑UserService接口/实现类

1.编辑业务接口

img

  1. 编辑具体实现

   package com.jt.service;

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
@Service    //将该类交给Spring容器管理
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper; //代理对象 JDK动态代理
    @Override
    public User findUserById(Integer id) {

        return userMapper.findUserById(id);
    }
}

3.1.4 编辑Mapper接口/映射文件

1.编辑Mapper接口

img

  1. 编辑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">
<mapper namespace="com.jt.mapper.UserMapper">
    <select id="findUserById" resultType="User">
        select * from demo_user where id = #{id}
    </select>
</mapper>

4 框架整合作业

  1. 要求根据name和age查询用户信息
    URL: http://localhost:8090/findUserByNA?name=xxx&age=xxx
  2. 查询名称以"xxx"结尾的数据.
    URL: http://localhost:8090/findUserLike?name=xx
  3. 查询id为 1,3,5,6,7的数据
    URL: http://localhost:8090/findUserByIds?id=1,3,5,6,7
  4. 根据对象中不为null的元素查询数据 动态Sql查询
    URL: http://localhost:8090/findUser?id=xx&name=“xx”&age=xx&sex=xx
    URL: http://localhost:8090/findUser?age=xx&sex=xx
    URL: http://localhost:8090/findUser?sex=xx
  5. 更新操作 利用restFul的结构, 根据Id修改数据,修改name/age
    URL:http://localhost:8090/user/貂蝉/18/227
    解析: URL:http://localhost:8090/user/{name}/{age}/{id}

5 SpringMVC参数传递

5.1 关于前端控制器说明

前端控制器: 主要负责用户请求的接收,及后端业务处理的分发
在这里插入图片描述

5.2 Servlet

5.2.1 什么是Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

概括: Servlet是java后台程序与用户交互的机制(媒介).

5.2.2 串讲案例

 //http://localhost:8090/findUserByIds?id=1,3,5,6,7
    @GetMapping("/findUserByIds")
    public String findUserByIds(HttpServletRequest request){
        String id = request.getParameter("id");
        String[] idStr = id.split(",");
        Integer[] intArray = new Integer[idStr.length];
        for (int i=0;i<idStr.length;i++){
            intArray[i] = Integer.parseInt(idStr[i]);
        }
        System.out.println(intArray);
        return "参数接收成功!!!";
    }

    /**
     * Servlet参数传递核心规则
     * http://localhost:8090/findServlet?name="张三"
     * 问题: String name 值从哪里来????
     * 核心: 参数是取的  而不是传的
     * 请求的流程: 一个request对象,返回response
     * 注意事项:
     *   1.参数名称必须相同.
     *   2.弊端无论什么样的数据,都是String数据类型,需要手动的转化
     * SpringMVC:
     *   在内部封装了Servlet机制.并且可以根据用户的参数类型,实现自动的数据
     *   类型的转化
     */
    @GetMapping("/findServlet")
    public String findServlet(Integer age){

        return "获取数据:"+age;
    }

    /*@GetMapping("/findServlet")
    public String findServlet(HttpServletRequest request){
        String age = request.getParameter("age");
        Integer ageInt = Integer.parseInt(age);
        return "获取数据:"+age;
    }*/

5.2.3 预习作业

按照视频过一遍了解ElementUi脚手架客户端的安装的原理
URL: https://www.bilibili.com/video/BV1SU4y1V7Jc/

举报

相关推荐

CGB2107-Day05-Mybatis高级

CGB2107-Day01

CGB2107-Day02

CGB2107-Day04-mybatis高级用法

CGB2111Mybatis

springboot 整合mybatis

SpringBoot整合Mybatis

0 条评论