MyBatis简介及环境配置

文章目录

    • 一、什么是MyBatis
    • 二、MyBatis开发环境配置
      • 1.创建数据库表
      • 2.添加MyBatis框架支持
      • 3.配置连接字符串和MyBatis
      • 4.添加业务代码流程

一、什么是MyBatis

MyBatis是一种持久层框架,也是一种ORM框架(Object Relational Mapping即对象关系映射)。

其中是持久层框架代表着,使用它可以更简单的操作和读取数据库工具。

是ORM框架,说明MyBatis可以将OOP中的对象和关系型数据库中的数据建立起映射关系,自动完成数据和对象的互相转换:①将输入数据和sql映射成原生sql②将结果集映射成返回对象。

ORM将数据库映射成对象:

数据库->类

记录->对象

字段->对象属性

这意味着我们可以像操作对象操作数据库中的表,实现对象和数据库表之间的转换。

MyBatis支持自定义SQL(所有的sql需要自己去写,半自动),存储过程以及高级映射(多张表映射到一个对象中的多个属性)。使用它可以通过简单的XML配置或者注解辅助操作,但是现在用的更多的还是XML配置的方式。

二、MyBatis开发环境配置

1.创建数据库表

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使用数据数据
use mycnblog;-- 创建表[用户表]
drop table if exists  userinfo;
create table userinfo(id int primary key auto_increment,username varchar(100) not null,password varchar(32) not null,photo varchar(500) default '',createtime timestamp default current_timestamp,updatetime timestamp default current_timestamp,`state` int default 1
) default charset 'utf8mb4';-- 创建文章表
drop table if exists  articleinfo;
create table articleinfo(id int primary key auto_increment,title varchar(100) not null,content text not null,createtime timestamp default current_timestamp,updatetime timestamp default current_timestamp,uid int not null,rcount int not null default 1,`state` int default 1
)default charset 'utf8mb4';-- 添加一个用户信息
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`, `createtime`, `updatetime`, `state`) VALUES 
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1),
(2, 'zhangsan', 'zhangsan', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1);-- 文章添加测试数据
insert into articleinfo(title,content,uid)values('Java','Java正文',1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APqECCaj-1691465946131)(F:\typora插图\image-20230515161925545.png)]

2.添加MyBatis框架支持

老项目中加框架支持:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

说明:这里除了手动加框架外,还可以使用插件——editstarters,在pom.xml中右键->生成->查找想要的框架勾选->OK

新项目中添加框架支持:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEqtCVpq-1691465946132)(F:\typora插图\image-20230515162420494.png)]

切记:这里是两个,一个是mysql的驱动和mybatis的框架。

why:数据库可不是只有Mysql一家,Mybatis为很多关系型数据库提供框架支持,对应到每个具体的数据库就需要单独的驱动。

何为驱动:直接驱动硬件

3.配置连接字符串和MyBatis

在整个项目中添加配置——application.properties文件中:

#协议,ip,端口号,是否用加密的方式(最后一个视本机电脑而定)
spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
#用户名
spring.datasource.username=root
#注意!!password是本机的mysql的密码,不是固定的值
spring.datasource.password=111111
#设置Mysql的驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#设置MyBatis的驱动
mybatis.mapper-locations=classpath:/mybatis/*Mapper.xml

说明:这里的配置有两方面

  1. 数据库连接字符串设置——url、username、password、driver-class-name

  2. MyBatis的XML文件设置——保存查询数据库的具体操作sql的文件

    匹配一级

    可以匹配多个级别

除了上边两大部分是必须的外,我们还可以配置下边两个配置项,可以在测试的时候打印执行的sql,方便分析执行和问题的查找。

#日志打印实现+日志打印级别(我们自己的)==>打印mybatis执行的sql【默认输出info级别,但是这是属于debug级别的,所以我们需要修改日志打印级别】
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=debug

4.添加业务代码流程

  • 添加表对应的实体类
  • 添加mapper接口(数据持久层),在下边建对应的接口
  • 添加相应表的xml设置(表相关具体方法实现)
  • 添加service
  • 添加controller
  • 使用postman/ajax测试

根据我们写的sql,建立对应的项目结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PzZ9uapF-1691465946133)(F:\typora插图\image-20230515164049713.png)]

定义相应的实体类:

UserEntity:

package com.example.demo.entity;import lombok.Data;
import lombok.Setter;import java.time.LocalDateTime;@Data
//不需要五大注解
public class UserEntity {//建议属性名和字段名设置相同,mybatis会自动实现关联private Integer id;private String username;private String password;private String photo;//原则:代码接收大于数据库字段类型即可//string 格式化,后期还是需要统一的对时间字段进行格式化处理private LocalDateTime createtime;private LocalDateTime updatatime;private Integer state;
}

ArticleInfo:

package com.example.demo.entity;import lombok.Data;import java.time.LocalDateTime;
@Data
public class ArticleInfo {private int id;private String title;private String content;private LocalDateTime createtime;private LocalDateTime updatatime;private int uid;private int rcount;private int state;
}

ArticleInfoVO:

package com.example.demo.entity.vo;import com.example.demo.entity.ArticleInfo;
import lombok.Data;@Data
public class ArticleInfoVO extends ArticleInfo {private String username;@Overridepublic String toString() {return "ArticleInfoVO{" +"username='" + username + '\'' +"} " + super.toString();}
}

说明:

1.这里mapper下边显示的两个鸟是因为安装了个插件,没加的显示的时候是I

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLpyw3Qg-1691465946133)(F:\typora插图\image-20230515170440555.png)]

2.因为ArticleInfo由lombok自动生成的toString方法,信息不完整,所以这里又重写了。当我们自己写了和lombok提供的一样的,以我们自己写的为主。

3.文章具体信息对应的实体类和ArticleInfo不属于同一级,所以这里又建了一级:vo,并在此中建立ArticleInfoVO,并重写toString方法

当我们想要完成一条sql操作的执行,就是先在mapper层声明方法,然后在对应的xml文件中实现即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/81438.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习笔记 使用vscode外部console出现闪退-12

前言 在使用vscode的外部console时&#xff0c;会出现闪退现象&#xff0c;这是因为程序运行结束后&#xff0c;系统自动退出了终端&#xff08;终端机制决定的&#xff09;。我们可以在C程序结束后&#xff0c;使用system函数来暂停DOS终端系统&#xff0c;这样就可以完整地看…

RS485实验

RS485实验 介绍 RS485采用差分信号进行传输&#xff0c;半双工通信。RS485是一个总线&#xff0c;在同一总线上最多可以挂接32个节点。通信流程简单理解为默认为接收状态&#xff0c;发送数据时切换为发送状态&#xff0c;数据发送完毕后切换为接收状态。发送和接收分别由一个…

算法与数据结构-哈希表

文章目录 什么是散列表散列函数的设计原则散列冲突的解决办法1. 开放寻址法2. 链表法 什么是散列表 散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就…

AndroidStudio通过Profiler查找内存泄漏

Fragment内存泄漏&#xff1a; AndroidStudio --> Profiler --> 勾选 show nearest Gc root only&#xff0c;然后查看非weakreference的引用&#xff08;weakreference是不会导致内存泄漏的&#xff09;&#xff0c;往下就能找自己项目里写的代码&#xff0c;一般此处…

SpringBoot MDC全局链路解决方案

需求 在访问量较大的分布式系统中&#xff0c;时时刻刻在打印着巨量的日志&#xff0c;当我们需要排查问题时&#xff0c;需要从巨量的日志信息中找到本次排查内容的日志是相对复杂的&#xff0c;那么&#xff0c;如何才能使日志看起来逻辑清晰呢&#xff1f;如果每一次请求都…

风控安全产品系统设计的一些思考

背景 本篇文章会从系统架构设计的角度&#xff0c;分享在对业务安全风控相关基础安全产品进行系统设计时遇到的问题难点及其解决方案。 内容包括三部分&#xff1a;&#xff08;1&#xff09;风控业务架构&#xff1b;&#xff08;2&#xff09;基础安全产品的职责&#xff1…

【网络安全】网络安全威胁实时地图 - 2023

文章目录 [TOC] ① 360 安全大脑360 APT全景雷达 ② 瑞星杀毒瑞星云安全瑞星网络威胁态势感知平台 ③ 比特梵德 Bitdefender④ 飞塔防火墙 FortiGuard⑤ 音墙网络 Sonicwall⑥ 捷邦 Check Point⑦ AO卡巴斯基实验室全球模拟隧道模拟 ⑧ 数字攻击地图⑨ Threatbutt互联网黑客攻击…

springboot集成分布式任务调度系统xxl-job(调度器和执行器)

一、部署xxl-job服务端 下载xxl-job源码 下载地址&#xff1a; https://gitee.com/xuxueli0323/xxl-job 二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库 三、启动项目、访问首页 访问地址&#xff1a; http://localhost:8080/xxl-job-admin/ 账号&#xff1…

Android AccessibilityService研究

AccessibilityService流程分析 AccessibilityService开启方式AccessibilityService 开启原理 AccessibilityService开启方式 . 在Framework里直接添加对应用app 服务component。 loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,1); loadSetting(stmt, Settings.Se…

vue去掉所有输入框两边空格,封装指令去空格,支持Vue2和Vue3,ElementUI Input去空格

需求背景 就是页面很多表单输入框&#xff0c;期望在提交的时候&#xff0c;都要把用户两边的空格去掉 ❌使用 vue 的指令 .trim 去掉空格 中间会输入不了空格&#xff0c; 比如我想输入 你好啊 中国, 这中间的空格输入不了&#xff0c;只能变成 你好啊中国 ❌在提交的时候使用…

Spring Boot日志文件

文章目录 &#x1f9ca;1.日志有什么作用&#x1f9ca;2.认识日志&#x1f9ca;3.自定义打印日志&#x1f95d;3.1得到日志对象&#x1f95d;3.2利用日志对象的方法打印日志&#x1f95d;3.3日志格式说明 &#x1f9ca;4.日志级别&#x1f95d;4.1 认识日志级别&#x1f95d;4.…

super父类 事物

一个没有事物的方法。 调用他的父类里有事物的方法。 无论this 和 super 都会让父类事物方法没有事物。 如果写了super.class 文件里面&#xff0c;就是super调用。 如果没写&#xff0c;就是this调用&#xff0c;坑爹 测试&#xff0c;把父类注入&#xff0c;事物才生效。

Javaweb学习(2)

Javaweb学习 一、Maven1.1 Maven概述1.2 Maven简介1.3、Maven基本使用1.4、IDEA配置Maven1.6、依赖管理&依赖范围 二、MyBatis2.1 MyBatis简介2.2 Mybatis快速入门2.3、解决SQL映射文件的警告提示2.4、Mapper代理开发 三、MyBaits核心配置文件四、 配置文件的增删改查4.1 M…

python爬虫2:requests库-原理

python爬虫2&#xff1a;requests库-原理 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 目录结构 文章目录 python爬虫2&#xff1a;requests库-原理1. 概述2. re…

解决Error running XXXApplicationCommand line is too long.报错

测试IDEA版本&#xff1a;2019.2.4 &#xff0c;2020.1.3 文章目录 一. 问题场景二. 报错原因2.1 为什么命令行过长会导致这种问题? 三. 解决方案3.1 方案一3.2 方案二 一. 问题场景 当我们从GitHub或公司自己搭建的git仓库上拉取项目代码时&#xff0c;会出现以下错误 报错代…

以技术驱动反欺诈,Riskified 为企业出海保驾护航

如今&#xff0c;全球对于线上消费的需求日益增长&#xff0c;各类新型支付方式也层出不穷。在国内&#xff0c;线上支付有着较为完善的法律及监管条例&#xff0c;格局基本已定型。但对于出海商家而言&#xff0c;由于不同国家和地区的支付规则和监管机制不同&#xff0c;跨境…

实现 Notification 通知

如图这种效果 可以使用 Notification API来进行实现 代码如下 注意&#xff1a;一定要用服务端打开。不然不会弹出来。vscode可以安装 live Serve 插件服务端打开 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8">…

Mac强制停止应用

有时候使用Mac的时候&#xff0c;某个应用卡住了&#xff0c;但是肯定不能因为一个应用卡住了&#xff0c; 就将电脑重启吧&#xff0c;所以只需要单独停止该应用即可&#xff0c;使用快捷键optioncommandesc就会出现强制停止的界面&#xff0c;选择所要停止的应用&#xff0c;…

【css】属性选择器

有些场景中需要在相同元素中获取具有特定属性的元素&#xff0c;比如同为input&#xff0c;type属性有text、button&#xff0c;可以通过属性选择器设置text和button的不同样式。 代码&#xff1a; <style> input[typetext] {width: 150px;display: block;margin-bottom…

64 # 实现一个 http-server

准备工作 上一节实现了通过 commander 的配置获取到用户的参数&#xff0c;下面完成借用 promise 写成类的方法一节没有完成的任务&#xff0c;实现一个 http-server&#xff0c;https://www.npmjs.com/package/http-server&#xff0c;http-server 是一个简单的零配置命令行静…