CGB2109-Day11-mybatis2

35 篇文章 6 订阅
35 篇文章 0 订阅

文章目录

1. Mybatis(二)

1.1 Mybatis 注解开发

1.1.1 编辑测试类

package com.jt;

import com.jt.mapper.DeptMapper;
import com.jt.mapper.EmpMapper;
import com.jt.mapper.UserAnnoMapper;
import com.jt.pojo.Dept;
import com.jt.pojo.Emp;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class TestMybatisAnno {

    @Autowired
    private UserAnnoMapper userMapper;

    @Test
    public void testFindAll(){

        List<User> list = userMapper.findAll();
        System.out.println(list);
    }

    @Test
    public void testFindUserById(){
        int id = 1;
        User user = userMapper.findUserById(id);
        System.out.println(user);
    }
}

1.1.2 编辑测试接口

//该Mapper主要测试注解开发
@Mapper
public interface UserAnnoMapper {
    //利用注解可以根据返回值类型,自动映射
    //规则1: 注解和映射文件 二选一  映射文件为主导.
    //规则2: 注解写法一般适用于简单操作.关联查询不适用
    @Select("select * from demo_user")
    List<User> findAll();

    @Select("select * from demo_user where id=#{id}")
    //@Insert()
    //@Update()
    //@Delete()
    User findUserById(int id);
}

1.2 Mybatis 缓存讲解

1.2.1 缓存说明

说明: 如果相同的数据需要多次查询,则可以使用缓存的方式处理,提高用户的响应速度.
在这里插入图片描述

1.2.2 mybatis缓存说明

mybatis中提供了2种缓存的机制.
一级缓存: SqlSession级别 在同一个sqlSession内实现数据的共享 默认开启
二级缓存: SqlSessionFactory级别 由同一个sqlSessionFactory,生产的SqlSession 数据共享. 默认开启 + 配置

易错项:
在这里插入图片描述

1.2.3 一级缓存测试

说明: SpringBoot在使用一二级缓存时,有特殊要求 需要额外注意.

/*测试mybatis的一级二级缓存
    * 现象: 如果采用springBoot的方式进行测试时发现,sql执行多次. 一级缓存无效.
    * 原因: springBoot整合mybatis之后,使用Mapper.find查询时.springBoot默认会开启
    *       多个sqlSession
    * 解决方案: 添加事务注解
    * 知识讲解: springBoot中如果添加了事务注解,则默认采用同一个SqlSession
    * */
    @Test
    @Transactional  //控制事务
    public void testCache1(){
        List<User> userList1 = userMapper.findCache1();
        List<User> userList2 = userMapper.findCache1();
        List<User> userList3 = userMapper.findCache1();
        List<User> userList4 = userMapper.findCache1();
    }

在这里插入图片描述

1.3 二级缓存测试

1.3.1 测试策略

说明: 为了构建多个mapper对象.需要准备多个线程进行测试. 可以通过浏览器让用户发起多次请求.之后测试二级缓存是否有效.
层级代码结构:
1. Controller 层 SpringMVC 面向接口编程 2:2:1
2. Service 层 Spring
3. Mapper/Dao层 Mybatis
在这里插入图片描述

1.3.2 编辑层级代码

1.3.2.1 编辑Mapper层
  1. 编辑mapper映射文件

    List findCache1();

  2. 编辑xml映射文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <select id="findCache1" resultType="User">
        select * from demo_user
    </select>
    
1.3.2.2 编辑Service层

1.编辑service接口

package com.jt.service;

import com.jt.pojo.User;

import java.util.List;

public interface UserService {

    List<User> findCache1();
}

2.编辑ServiceImpl实现类

package com.jt.service;

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

import java.util.List;

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserAnnoMapper userMapper;

    @Override
    public List<User> findCache1() {

        return userMapper.findCache1();
    }
}
1.3.2.3 编辑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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 要求返回List集合的JSON串
     */
    //@RequestMapping("/findCache")
    @GetMapping("/findCache")
    public List<User> findCache1(){

        return userService.findCache1();
    }
}
1.3.2.4 页面效果展现

在这里插入图片描述

1.3.3 使用二级缓存

<?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.UserAnnoMapper">
    <!--
        1.让二级缓存在当前Mapper层有效
        2.POJO必须序列化
    -->
    <cache/>

    <select id="findCache1" resultType="User">
        select * from demo_user
    </select>
</mapper>

1.4 注解使用二级缓存

业务说明: Mybatis中采用注解方式的查询和xml映射文件的查询的方式不一样. 两者不可以混用.
使用注解的二级缓存:
在这里插入图片描述
总结说明: 注解缓存写法与映射文件写法冲突.所以一般二选一即可.

2 前后端项目搭建

2.1 项目调用流程图

在这里插入图片描述

2.2 后端项目创建

2.2.1 创建项目

在这里插入图片描述

2.2.2 编辑pom.xml文件

 <!--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>

        <!--添加lombok的包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2.2.3 按照规则下载项目

说明: 根据码云中的代码, 粘贴复制pom.xml 和src文件 即可
在这里插入图片描述

2.2.4 代码启动测试

在这里插入图片描述

2.2 搭建前端项目

2.2.1 检查node.js是否正确

在这里插入图片描述

2.2.2 安装vue客户端工具

命令: npm install -g @vue/cli --force
在这里插入图片描述

2.2.3 启动客户端工具

命令: vue ui
在这里插入图片描述
浏览器效果:
在这里插入图片描述

2.2.4 前端项目导入

1.去码云中下载指定的前端项目
在这里插入图片描述
2. 在IDEA的工作目录中解压
在这里插入图片描述
3. 利用UI工具导入项目
在这里插入图片描述
4. 项目启动
在这里插入图片描述

2.3 关于脚手架目录结构说明

2.3.1 关于VUE知识讲解

在这里插入图片描述
目录结构说明:
1.assets 引入第三方js/css
2.components 组件定义的目录 组件: 将html/css/js统一封装到一起,可以提高前端代码的扩展性.
3. plugins 引入elementUI.js的文件
4. router 代表路由
5. App.vue 代表整个项目的根组件
6. main.js 项目中核心JS文件

2.3.2 使用Axios的说明

  1. 定义共同 的请求前缀

    /* 设定axios的请求根目录 */
    axios.defaults.baseURL = 'http://localhost:8091/'
    
  2. 父子组件之间参数传递

    /* 向vue对象中添加全局对象 以后发送ajax请求使用 h t t p 对 象 ∗ / / ∗ 父 组 件 将 参 数 传 递 给 子 组 件 需 要 声 明 p r o t o t y p e . k e y = x x x ∗ / V u e . p r o t o t y p e . http对象 */ /* 父组件将参数传递给子组件 需要声明 prototype.key= xxx */ Vue.prototype. http//prototype.key=xxx/Vue.prototype.http = axios

在这里插入图片描述

2.4 关于Vue 路由说明

	//使用路由机制
	Vue.use(VueRouter)
	const routes = [
	  {path: '/', redirect: '/login'},
	  {path: '/login', component: Login},
	  {path: '/elementUI', component: ElementUI}
	]

3. 用户登录实现

3.1 表设计

1.表结构定义
在这里插入图片描述
2.编辑POJO

package com.jt.pojo;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @author 刘昱江
 * 时间 2021/2/2
 */
@Data
@Accessors(chain = true)
public class User extends BasePojo{
    private Integer id;
    private String username;
    private String password;
    private String phone;
    private String email;
    private Boolean status;     //true 正常 false 停用
}

3.2 业务接口文档

  • 请求路径: /user/login
  • 请求方式: POST
  • 请求参数

参数名称

参数说明

备注

username

用户名

不能为空

password

密码

不能为空

  • 响应数据 SysResult对象

参数名称

参数说明

备注

status

状态信息

200表示服务器请求成功 201表示服务器异常

msg

服务器返回的提示信息

可以为null

data

服务器返回的业务数据

返回密钥token信息

返回值格式如下:

	{"status":200,"msg":"服务器调用成功!","data":"1e893a97634847b3a8b499b173bea620"}

3.3 创建SysResult对象

说明: 前端与后端进行业务交互.需要有一个统一的返回数据的结构,而这种负责前后端交互的媒介.称之为vo对象.

package com.jt.vo;

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 SysResult implements Serializable {
    private Integer status; //200成功  201失败
    private String  msg;    //提示信息
    private Object  data;   //服务器返回值数据

    public static SysResult fail(){

        return new SysResult(201,"业务调用失败!!",null);
    }

    public static SysResult success(){

        return new SysResult(200,"业务调用成功!!",null);
    }

    public static SysResult success(Object data){

        return new SysResult(200,"业务调用成功!!",data);
    }

    public static SysResult success(String msg,Object data){

        return new SysResult(200,msg,data);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值