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.hqwc.cn/news/519558.html

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

相关文章

Docker网络+原理+link+自定义网络

目录 一、理解Docker网络 1.1 运行tomcat容器 1.2 查看容器内部网络地址 1.3 测试连通性 二、原理 2.1 查看网卡信息 2.2 再启动一个容器测试网卡 2.3 测试tomcat01 和tomcat02是否可以ping通 2.4 只要删除容器,对应网桥一对就没了 2.5 结论 三、--link 3.…

PCL 路面点云标线提取(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 算法来自本人自创。实现效果如下图所示,具体实现原理看代码即可。 二、代码实现 #include

双体系Java学习之原始数据类型以及变量声明和赋值

原始数据类型 //八大基本数据类型//整数int num1 10; //最常用byte num2 20;short num3 30;long num4 30L; //Long类型要在数字后面加个L//小数&#xff1b;浮点数float num5 50.1F;//float类型要在数字后面加个Fdouble num6 3.1415926;//字符char name 国;//字符串&…

分布式搜索引擎-elasticsearch基础

分布式搜索引擎-elasticsearch基础 1、什么是elasticsearch&#xff1f; elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack&#xff08;ELK&a…

前端布局方式及其优缺点

前端布局方式多种多样&#xff0c;每种布局方式都有其特定的应用场景、特性和优缺点。以下是一些常见的前端布局方式及其特点和优缺点&#xff1a; 静态布局&#xff1a; 特性&#xff1a;元素的尺寸使用绝对单位&#xff08;如px&#xff09;进行定义&#xff0c;不会随浏览器…

决定马里兰州地区版图的关键历史事件

1. 马里兰殖民地的建立&#xff1a; - 1632年&#xff0c;英国国王查理一世将一大片土地赐予塞西尔卡尔弗特男爵&#xff0c;这片土地是为了纪念国王的妻子亨丽埃塔玛丽亚而命名为“马里兰”。卡尔弗特和他的儿子随后建立了马里兰殖民地&#xff0c;这标志着马里兰作为一个独立…

搜维尔科技:动作捕捉与数字时尚:Wondar Studios欧莱雅项目

来自意大利的Wondar Studios工作室&#xff0c;是一家制作与动作捕捉技术相关软件和内容的公司&#xff0c;其出品的三维角色动画均由专业动捕系统真实录制制作。 我们很高兴与大家分享Wondar Studios最新的动捕项目&#xff0c;该项目带来了身临其境的虚拟现实体验。他们与巴…

2024年腾讯云学生服务器优惠活动「云+校园」政策解读

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

【C++】Unordered_map Unordered_set

在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;例如map、set等。它们在搜索数据时效率可达到O(logN)&#xff0c;但最糟糕的情况下搜索需要比较红黑树的高度次&#xff0c;若此时树中的节点非常之多&#xff0c;那么搜索效率就非常不理想。 最理…

智能驾驶规划控制理论学习06-基于优化的规划方法

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法&#xff08;Le…

python进阶:可迭代对象和迭代器

一、Iterable&#xff08;可迭代对象&#xff09; 1、可迭代对象&#xff1a;能够进行迭代操作的对象。 可以理解为&#xff1a;能够使用for循环遍历的都是可迭代对象&#xff1b;**所有的可迭代对象&#xff0c;偶可以用内置函数iter转换为迭代器** 2、可迭代对象包括&…

Hive的性能优化

1.调优概述 Hive 作为大数据领域常用的数据仓库组件&#xff0c;在设计和查询时要特别注意效率。影响 Hive 效率的几乎从不是数据量过大&#xff0c;而是数据倾斜、数据冗余、Job或I/O过多、MapReduce分配不合理等等。对 Hive 的调优既包含 Hive 的建表设计方面&#xff0c;对H…