当前位置: 首页 > news >正文

day02 mybatis

mybatis + boot 学习思路

module模块化开发,maven进行管理

步骤:

1. 引入mabatis依赖——
还要引入mysql依赖以及mybatis和sprintboot连接的依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!--简化 entity 的依赖-->
<!--        只需要写注解即可,无需写get、set方法--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

2. 创建数据库以及表

3. 创建entity

package com.zheng.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/*** 实体层与数据库表 tb_question 进行映射* */
@Data // 为属性生成get/set方法
@NoArgsConstructor //生成无参构造函数
@AllArgsConstructor //生成全参构造函数
@ToString // 生成toString()方法
public class Question {private Integer id;private String expertName; // 专家private String questioner; // 问题人private String phone; // 手机号private String plantName; // 作物详细信息private String title; // 问题标题private String question;// 问题private String answer; // 回答private Integer status; // 状态}

4. 创建mapper-——数据访问层

first:使用注解@Select

package com.zheng.mapper;import com.zheng.entity.Question;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** 数据访问层 对应表question* @Select* */
public interface QuestionMapper {/*** 查询全部* */
//    @Select("SELECT * FROM tb_question")List<Question> findAll();Question findById(int id);
}

second: 使用xml文件,如果繁琐就使用xml配置

首先在yaml中配置mapper-locations

# mybatis 配置
mybatis:type-aliases-package: com.zheng.entity # 配置实体类entity #尼置艾体类entity 所在的包,为了翳 xml 方武使用mapper-locations: classpath:mapper/*Mapper.xml # 配置文件的路径

然后创建xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--通过namespace来让xml与接口产生关系-->
<mapper namespace="com.zheng.mapper.QuestionMapper">
<!--mybatis resultMap 结果集映射resultMap 使用步骤:先定义\后使用--><resultMap id="questionMap" type="Question"><id property="id" column="id"/>
<!--        主键--><result property="expertName" column="expert_name"/><result property="questioner" column="questioner"/><result property="phone" column="phone"/><result property="plantName" column="plant_name"/><result property="title" column="title"/><result property="question" column="question"/>
<!--        非主键--></resultMap><select id="findById" parameterType="int" resultMap="questionMap">SELECT * FROM `tb_question` WHERE id = #{id}</select><select id="findAll" resultMap="questionMap">SELECT * FROM `tb_question`</select>
</mapper>

注意事项——

mapper 标签namespace的值必须与接口对应的mapper一致
select 标签的id 必须与接口中的方法名一致;parameterType 必须与     接口中的方法的参数一致,没有就不写resultType 如果返回值为List,则按照一个处理,即泛型里的类型处理resultMap:当数据库的列名和属性名不一致,则需使用Map而非Typeid主键;result非主键property:属性区分大小写column:列名,数据库中定义,不区分大小写,mysql本身不区分大小写      

5. 创建service——业务层(接口+实现类)

接口类:

package com.zheng.service;import com.zheng.entity.Question;
import com.zheng.service.impl.QuestionServiceImpl;import java.util.List;/*** 业务层,调用QuestionMapper**/
public interface QuestionService {List<Question> findAll();Question findById(int id);
}

实现类(不要忘记给实现类加@Service注解):

@Resource会在编译时候为里面的空指针变量创建对应的对象赋值

package com.zheng.service.impl;import com.zheng.entity.Question;
import com.zheng.mapper.QuestionMapper;
import com.zheng.service.QuestionService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** 业务层调用mapper层* mapper层已经被加载到spring容器中*/
@Service // 标识当前层为业务层
public class QuestionServiceImpl implements QuestionService {//    @Autowired // 按照类型进行装配@Resourceprivate QuestionMapper questionMapper;@Overridepublic List<Question> findAll() {return questionMapper.findAll();}@Overridepublic Question findById(int id) {return questionMapper.findById(id);}
}

6. 创建controller——控制层

前后端分离的项目,必须在控制层写@RestController

@RequestMapping会过滤请求,仅让符合要求的请求通过(@GetMapping同理为get请求过滤)

jdk版本高的,需要使用@RequestParam(“参数”)获取传递的参数

package com.zheng.controller;import com.zheng.entity.Question;
import com.zheng.service.QuestionService;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/question")
public class QuestionController {@Autowiredprivate QuestionService questionService;@GetMapping("/findAll")public List<Question> findAll() {return questionService.findAll();}@GetMapping("findById")public Question findById(@RequestParam("id") int id) {return questionService.findById(id);}}

启动类

package com.zheng;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication // 标识当前项目是 springboot项目
@MapperScan(basePackages="com.zheng.mapper")
public class Main {// 入口public static void main(String[] args) {SpringApplication.run(Main.class,args);// 启动的时候会自动扫描启动类同目录的所有包}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序数组绑定使用案例(二)
  • 《流程引擎原理与实践》开源电子书
  • 【大数据专题】数据仓库
  • 从零开始手写STL库:List
  • Huawei、Cisco 路由中 RIP 协议 summary 的用法
  • 基于深度学习的商品推荐
  • C语言航空售票系统
  • HackTheBox--Knife
  • golang 基础 泛型编程
  • DB-GPT:LLM应用的集大成者
  • 【关于PHP性能优化,内存优化,日志工具等问题处理】
  • Python面试整理-Python中的控制流语句
  • 04 B端产品经理能力培养
  • 【入门教程一】基于DE2-115的My First FPGA 工程
  • 分类损失函数 (一) torch.nn.CrossEntropyLoss()
  • 【Leetcode】101. 对称二叉树
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Android框架之Volley
  • Git学习与使用心得(1)—— 初始化
  • If…else
  • in typeof instanceof ===这些运算符有什么作用
  • IOS评论框不贴底(ios12新bug)
  • Linux后台研发超实用命令总结
  • maya建模与骨骼动画快速实现人工鱼
  • Vue实战(四)登录/注册页的实现
  • 大快搜索数据爬虫技术实例安装教学篇
  • 复杂数据处理
  • 官方解决所有 npm 全局安装权限问题
  • 技术胖1-4季视频复习— (看视频笔记)
  • 老板让我十分钟上手nx-admin
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 思考 CSS 架构
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 进程与线程(三)——进程/线程间通信
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​什么是bug?bug的源头在哪里?
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #### go map 底层结构 ####
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (八十八)VFL语言初步 - 实现布局
  • (翻译)terry crowley: 写给程序员
  • (六)vue-router+UI组件库
  • (南京观海微电子)——示波器使用介绍
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十六)一篇文章学会Java的常用API
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (推荐)叮当——中文语音对话机器人
  • (译)计算距离、方位和更多经纬度之间的点
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net MVC4 上传大文件,并保存表单