JavaWeb-MyBatis(上)

学完项目管理工具Maven后,继续学习MyBatis。我们都知道,JDBC是一个与数据库连接相关的API,最开始学习数据库连接都是从JDBC开始学起,但是其也有缺点,比如硬编码和操作繁琐等等。而今天学习的MyBatis就是专门为简化JDBC开发而设计的。
在这里插入图片描述

一、MyBatis概述

1、MyBatis开发基础

MyBatis是一款优秀的持久层框架,用于简化JDBC开发。

持久层:所谓持久层,即负责将数据到保存到数据库的那一层代码。JavaEE三层架构分别为表现层、业务层、持久层,每层架构对应的具体功能后面讲框架的时候也会学到。

框架:简单理解,就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型,在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。

官网: https://mybatis.org/mybatis-3/ ,官方文档对于我们学习MyBatis具有很大的帮助和参考意义,如下翻译成中文。
在这里插入图片描述

2、MyBatis和JDBC

任何一个新技术的出现很大程度上都是为了解决或改善之前技术存在的痛点。引入MyBatis也是,因此,来看一下MyBatis和JDBC之间的比较。

2.1 JDBC缺点

1)硬编码
硬,即不可变或很难改变的意思,即字符串。硬编码,简单理解就是很多字符串信息写入代码,后续发生变动时改动量太大,代码维护性差。JDBC有以下地方体现硬编码。

1.注册驱动,获取连接
// 注册驱动
Class.forName("com.mysql.jdbc.Driver"); // 将类加载进内存 (可以省略)
// 获取连接
String url="jdbc:mysql:///db1?useSSL=false";
String username="root";
String password="123456";
Connection conn = DriverManager.getConnection(url, username, password);2.SQL语句,如
String sql="SELECT * FROM `account`";

2)操作繁琐

手动设置参数
手动封装结果集

在这里插入图片描述

2.2 MyBatis优点

1)配置文件---->解决硬编码问题
2)自动完成---->解决手动操作繁琐问题
在这里插入图片描述

MyBatis官方介绍:MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

二、MyBatis快速入门

不清楚的可参考官方文档:https://mybatis.org/mybatis-3/getting-started.html ,里面有详细说明。

1、案例

直接上手代码,以查询user表中所有数据为例。
1)创建user表,添加数据
打开Navicat,连接MySQL,并在当前连接下通过新建查询的方式创建数据库、表以及插入数据。
在这里插入图片描述

对应的代码如下

create database mybatis;
use mybatis;drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30)
);INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');

创建插入完成后,即可查询表中数据
在这里插入图片描述

2)创建模块,导入坐标
新建一个mybatis-demo的Maven项目,在pom.xml文件中导入所需坐标。

对于坐标,需要用到什么就导入什么。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--当前项目的坐标--><groupId>itweb</groupId><artifactId>mybatis-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!--mybatis 依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><!--mysql 驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency><!--junit 单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!-- 添加slf4j日志api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.20</version></dependency><!-- 添加logback-classic依赖 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- 添加logback-core依赖 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency></dependencies>
</project>

3)编写MyBatis核心配置文件(mybatis-config.xml)

替换连接信息解决硬编码问题(核心两步如下)
1.数据库连接信息
2.加载sql映射文件

在resources目录下新建一个mybatis-config.xml文件
在这里插入图片描述

对应代码如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!-- 数据库连接信息--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--加载sql映射文件--><mappers><!--由于mybatis-config.xml与UserMapper.xml同级,所以直接写名称--><mapper resource="UserMapper.xml"/></mappers>
</configuration>

4)编写SQL映射文件(XxxMapper.xml)

统一管理sql语句,解决硬编码问题

编写sql查询及增删改语句(名称空间namespace和id,类模块resultType) id有selectAll等

在resources目录下新建一个UserMapper.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:名称空间
-->
<mapper namespace="test"><select id="selectAll" resultType="com.itweb.pojo.User">select * from tb_user;</select>
</mapper>

5)编码
第一,定义POJO实体类(Xxx类),两个要点如下

1.封装所有与数据库同名的属性
2.提供get、set方法和重写toString方法

在java目录下新建一个User类(com.itweb.pojo.User)

package com.itweb.pojo;
// 处理属性字段时,alt + 鼠标左键 整列编辑
public class User {private Integer id;private String username;private String password;private String gender;private String addr;// 提供get、set方法(鼠标右键快捷生成)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}// 提供重写toString方法(鼠标右键快捷生成)@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +", addr='" + addr + '\'' +'}';}
}

第二,加载核心配置文件,获取SqISessionFactory对象
第三,获取 SqlSession对象,执行SQL语句
第四,释放资源
在java目录下新建一个MyBatisDemo类(com.itweb.MyBatisDemo),以上三步对应的代码如下

package com.itweb;import com.itweb.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyBatisDemo {public static void main(String[] args) throws IOException {// 1.加载核心配置文件,获取 SqlSessionFactory 对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 2.获取SqlSession对象,用来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();// 3.执行sqlList<User> users = sqlSession.selectList("test.selectAll");System.out.println(users);// 4.释放资源sqlSession.close();}
}

运行结果如下
在这里插入图片描述

总结:项目结构及相关步骤回顾梳理
结合项目结构来梳理项目的相关步骤流程,一图以蔽之,如下。
在这里插入图片描述

2、解决SQL映射文件的警告提示

SQL映射文件里的表名爆红,是警告提示而非错误。
在这里插入图片描述

产生原因:Idea 和数据库没有建立连接,不识别表信息
解决方式:在 Idea 中配置 MySQL 数据库连接
在这里插入图片描述

连接成功后如下图
在这里插入图片描述

由此可见IDEA功能十分强大,只要数据库连接成功,以后就能非常方便的在IDEA中编写数据库代码了。

三、Mapper代理开发

1、目的

1)解决原生方式中的硬编码
2)简化后期执行SQL

2、步骤

1)定义与SQL映射文件同名的Mapper接口,并且将Mapper接口(如UserMapper.class接口)和SQL映射文件(如UserMapper.xml)放置在同一目录下

注:在resources目录下创建分层的包要用 / 而不是 .

2)设置SQL映射文件的namespace属性为Mapper接口全限定名(如com.itweb.mapper.UserMapper)
3)在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
(以上三步对应下图)
在这里插入图片描述

4)编码

1.通过SqlSession的getMapper方法获取Mapper接口的代理对象
2.调用对应方法完成sql的执行

在这里插入图片描述

在这里插入图片描述

注:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

在这里插入图片描述

四、MyBatis核心配置文件

参考官方文档:https://mybatis.org/mybatis-3/configuration.html

在这里插入图片描述

1、类型别名(typeAliasess)

<typeAliases><package name="com.itweb.pojo"/>
</typeAliases>

注:配置各个标签时,需要遵守前后顺序

其他更多的可以参考官方文档自行学习,不再赘述。

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

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

相关文章

免费SSL证书整理合集

有哪些免费的SSL证书呢&#xff1f;下面整理了一下非常有性价比的 一&#xff1a;免费单域名SSL证书&#xff1a;适用于只有一个域名的情况下使用 点击申请免费单域名SSL证书https://www.joyssl.com/certificate/select/joyssl-dv-single-free.html?nid7 二&#xff1a;通配…

基于单片机的篮球计分器设计

在当今的体育赛事中,比赛的计分系统对观众和运动员尤为重要,观众可以根据比分的实时显示为自己支持的队伍呐喊助威,运动员更是要靠着计分器来把握比赛的节奏,包括攻防转换、替补换人以及赛间休息等等。因此,为了让比赛进行得更加专业化和流畅化,我们有必要对比赛的计分系…

Linux 内存

Linux 内存 一:工具1.free2.查看内存额定值3.查看指定进程内存二:buffer/cache1.Buffer具体职责2.Cache具体职责区别三级目录一:工具 1.free -b  以Byte为单位显示内存使用情况。 -k  以KB为单位显示内存使用情况。 -m  以MB为单位显示内存使用情况。 -g 以GB为单位显…

Java Day4 API

文章目录 1、Object类1.1 Tostring1.2 equals1.3 clone 2、Objects类2.1 equals方法isNull 与nonNull 3、包装类3.1 常见操作 4、StringBuilder5、StringBuffer6、StringJoiner 1、Object类 所有类的基类。 1.1 Tostring public String toString() 返回对象的字符串表示形式…

总结Redis的原理

一、为什么要使用Redis 缓解数据库访问压力mysql读请求进行磁盘I/O速度慢&#xff0c;给数据库加Redis缓存&#xff08;参考CPU缓存&#xff09;&#xff0c;将数据缓存在内存中&#xff0c;省略了I/O操作 二、Redis数据管理 2.1 redis数据的删除 定时删除惰性删除内存淘汰…

设计定时任务实现数据同步的最佳实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、选择合适的定时任务框架 Quartz Spring 的 Task…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#xff0c;及时获取更新消息。 引言 在…

如何判断螺栓已经拧紧?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓拧紧的标准并非仅仅依赖于螺栓的外观&#xff0c;而是依赖于几个关键因素&#xff0c;包括扭矩、预紧力和材料疲劳等。下面SunTorque智能扭矩系统和大家将详细讨论这些因素&#xff0c;并给出如何判断螺栓是否已经拧…

史上最大优惠!腾讯云服务器优惠价格表一年、1个月收费明细

腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

Linux MBR扇区故障 引导修复

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人 前言———— Linux MBR&#xff08;Master Boot Record&#xff0c;主引导记录&#xff09;是硬盘的第一个扇区&#xff0c;通常位于磁…

maven项目引入私有jar,并打包到java.jar中

私有jar存放位置 maven依赖 <dependency><groupId>com.hikvision.ga</groupId><artifactId>artemis-http-client</artifactId><version>1.1.10</version><scope>system</scope><systemPath>${project.basedir}/s…

Tomcat常见配置(基础功能、虚拟主机、搭建博客)

目录 一、Tomcat基础功能 1、自动解压war包 2、Tomcat工具界面 2.1 Server Status (服务器状态) 2.1.1 本地登录状态页 2.1.2 远程登录状态页 2.2 Manager App (管理应用程序) 2.3 Host Manager (主机管理器) 3、Context 配置 二、配置虚拟主机 三、搭建 JPress 博客…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT&#xff08;Diagnostic Extract Template&#xff09;是AUTOSAR定义的诊断提取模板&#xff0c;用于DCM&#xff08;Diagnostics Communication Manager&#xff09;、DEM&#xff08;Diagnostics Event Manager&#xff09;和FIM&#xff…

从新能源汽车行业自动驾驶技术去看AI的发展未来趋势

自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 &#x1f413; 自动驾驶技术 这是AI在汽车行业中应用最广泛的领域之一。自动驾驶技术利用AI算法和传感器来感知环境、识别障碍物&#xff0c…

各大厂商常用的弱口令集合

Oms呼叫中心 KXTsoft2010 Glodon控制台 admin TRENDnet趋势网络摄像头 admin/admin MOBOTIX-视频监控 admin/meinsm 思科Cisco 没有原始密码, 第一次登录时需要创建 DRS admin/1234 Honeywell admin/1234 安迅士Axis root/pass, 新安迅士摄像头在用户第一登录时要求创建…

【开源】JAVA+Vue.js实现农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

0基础学习VR全景平台篇第143篇:限定访问功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用限定访问功能。 一.什么是限定访问功能&#xff1f; 限定访问&#xff0c;就是可以在编辑后台设置可以访问作品的用户的类型&#xff0c;还有可以访问作品的IP…

【leetcode热题】环形链表

难度&#xff1a; 简单通过率&#xff1a; 34.9%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…

【CSS】简单的抽屉面板展开收起自然过渡效果的css

目录 效果展示css固定梯形按钮至抽屉面板中间梯形按钮css过渡动画 效果展示 1.收起时点击蓝色梯形按钮展开 2. 展开时点击蓝色按钮收起 3.展开收起时需要过渡自然&#xff0c;有抽屉推拉效果 css 固定梯形按钮至抽屉面板中间 .toggle{ position: absolute;left:-21px;top…

pdf文件超出上传大小怎么压缩?值得学习的几个方法

平时我们在使用pdf文件的时候&#xff0c;不管是上传还是进行存储&#xff0c;都会面临pdf太大的情况&#xff0c;尤其是当我们需要把pdf文件上传到一些平台上去的时候&#xff0c;那么pdf怎么压缩的小一点呢&#xff1f;为了解决这个问题&#xff0c;可以通过一些软件将pdf压缩…