SSM【Spring SpringMVC Mybatis】——Mybatis

目录

1、初识Mybatis

1.1Mybatis简介

1.2 官网地址

2、搭建Mybatis框架

2.1 准备

2.2 搭建Mybatis框架步骤

1. 导入jar包

2. 编写核心配置文件【mybatis-config.xml】

3. 书写相关接口及映射文件

4. 测试【SqlSession】

2.3 添加Log4j日志框架

导入jar包

编写配置文件

3、 Mybatis核心配置详解【mybatis-config.xml】

3.1 核心配置文件概述

3.2 核心配置文件根标签

3.3 核心配置文件常用子标签

properties子标签

settings子标签

 环境配置(environments)

mappers子标签

​编辑4、 Mybatis映射文件详解

4.1 映射文件概述

4.2 映射文件根标签

 4.3 映射文件子标签

 4.4 映射文件中常用属性


1、初识Mybatis

MyBatis(前身为iBatis)是一个开源的持久层框架,用于在Java应用程序中管理数据库访问。它的设计目标是简化数据库访问和操作,并提供更好的灵活性和性能。MyBatis允许开发者使用简单的XML或注解配置来映射Java对象和SQL语句,从而实现数据库操作的封装和管理。

1.1Mybatis简介

以下是MyBatis的一些关键特性和优势:

  1. 灵活的SQL映射配置:MyBatis允许开发者使用XML文件或注解来编写SQL映射配置,这使得数据库操作的映射和管理变得非常灵活。

  2. 零侵入性:MyBatis不会强制开发者继承特定的类或实现特定的接口,因此可以与已有的Java对象和代码无缝集成。

  3. 动态SQL:MyBatis提供了强大的动态SQL功能,允许开发者根据不同的条件动态构建SQL语句,从而实现更灵活和可重用的数据库操作。

  4. 自动映射结果集:MyBatis可以将数据库查询结果自动映射到Java对象,省去了手动处理结果集的麻烦。

  5. 事务管理支持:MyBatis可以与Spring等框架集成,实现对事务的管理,保证数据库操作的原子性和一致性。

  6. 性能优化:MyBatis通过缓存机制、懒加载等技术,提供了良好的性能和扩展性。

  7. 可扩展性:MyBatis提供了丰富的插件机制,开发者可以通过编写插件来扩展其功能,满足特定的需求。

1.2 官网地址

文档地址:https://mybatis.org/mybatis-3/

源码地址:https://github.com/mybatis/mybatis-3

2、搭建Mybatis框架

2.1 准备

建库建表建约束

准备maven工程

2.2 搭建Mybatis框架步骤

1. 导入jar包
<!--导入MySQL的驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency><!--导入MyBatis的jar包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
2. 编写核心配置文件【mybatis-config.xml】

位置:resources目标下

名称:推荐使用mybatis-config.xml

示例代码

 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--                mysql8版本--><!--                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--><!--                <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>--><!--                mysql5版本--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/db220106"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--    设置映射文件路径--><mappers><mapper resource="mapper/EmployeeMapper.xml"/></mappers></configuration>
3. 书写相关接口及映射文件

映射文件位置:resources/mapper

映射文件名称:XXXMapper.xml

映射文件作用:主要作用为Mapper接口书写Sql语句

映射文件名与接口名一致

映射文件namespace与接口全类名一致

 映射文件SQL的Id与接口的方法名一致

示例代码

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.atguigu.mybatis.mapper.EmployeeMapper"><select id="selectEmpById" resultType="com.atguigu.mybatis.pojo.Employee">SELECTid,last_name,email,salaryFROMtbl_employeeWHEREid=#{empId}</select></mapper>
4. 测试【SqlSession】

先获取SqlSessionFactory对象

再获取SqlSession对象

通过SqlSession对象获取XXXMapper代理对象

 测试

2.3 添加Log4j日志框架

导入jar包
 <!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
编写配置文件

配置文件名称:log4j.xml

配置文件位置:resources

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="info" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root></log4j:configuration>

3、 Mybatis核心配置详解【mybatis-config.xml】

3.1 核心配置文件概述

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

3.2 核心配置文件根标签

没有实际语义,主要作用:所有子标签均需要设置在跟标签内部。

3.3 核心配置文件常用子标签

properties子标签

作用:定义或引入外部属性文件

示例代码properties

    #key=valuedb.driver=com.mysql.jdbc.Driverdb.url=jdbc:mysql://localhost:3306/db220106db.username=rootdb.password=root
  <properties resource="db.properties"></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--                mysql8版本--><!--                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--><!--                <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>--><!--                mysql5版本--><property name="driver" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></dataSource></environment></environments>
settings子标签

作用:这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

mapUnderscoreToCamelCase属性:是否开启驼峰命名自动映射,默认值false,如设置true会自动将

字段a_col与aCol属性自动映射

注意:只能将字母相同的字段与属性自动映射

类型别名(typeAliases)

作用:类型别名可为 Java 类型设置一个缩写名字。

语法及特点

 <typeAliases><!--        为指定类型定义别名--><!--        <typeAlias type="com.atguigu.mybatis.pojo.Employee" alias="employee"></typeAlias>--><!--        为指定包下所有的类定义别名默认将类名作为别名,不区分大小写【推荐使用小写字母】--><package name="com.atguigu.mybatis.pojo"/></typeAliases>

Mybatis自定义别名

别名  

类型

_int  

int

integer或int

Integer

 string    

String  

list或arraylist

ArrayList

map或hashmap

 HashMap  

 环境配置(environments)

作用:设置数据库连接环境

  ```xml<!--    设置数据库连接环境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--                mysql8版本--><!--                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--><!--                <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>--><!--                mysql5版本--><property name="driver" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></dataSource></environment></environments>
mappers子标签

作用:设置映射文件路径

 <!--    设置映射文件路径--><mappers><mapper resource="mapper/EmployeeMapper.xml"/><!-- 要求:接口的包名与映射文件的包名需要一致--><!--        <package name="com.atguigu.mybatis.mapper"/>--></mappers>

注意:核心配置中的子标签,是有顺序要求的。

4、 Mybatis映射文件详解

4.1 映射文件概述

MyBatis的映射文件是实现SQL语句与Java方法的映射关系的地方。通过映射文件,可以将SQL语句配置在XML文件中,实现数据库操作的封装和管理。与传统的JDBC相比,使用MyBatis可以极大地减少重复代码的编写。

4.2 映射文件根标签

在映射文件中,最外层的标签是 <mapper> 标签。在 <mapper> 标签中,有一个 namespace 属性,它要求与对应的Java接口或类的全限定名一致,这样MyBatis就能够找到与之对应的Java方法。

 4.3 映射文件子标签

 子标签共有9个,注意学习其中8大子标签

insert标签:定义添加SQL

delete标签:定义删除SQL

update标签:定义修改SQL

select标签:定义查询SQL

sql标签:定义可重用的SQL语句块

cache标签:设置当前命名空间的缓存配置

cache-ref标签:设置其他命名空间的缓存配置

resultMap标签:描述如何从数据库结果集中加载对象

 resultType解决不了的问题,交给resultMap。

 4.4 映射文件中常用属性

resultType:设置期望结果集返回类型【全类名或别名】

注意:如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。resultType 和 resultMap 之间只能同时使用一个。



 

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

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

相关文章

ERA5数据的区别

ERA5 hourly data on single levels from 1940 to present 链接 ERA5是欧洲中期天气预报中心(ECMWF)的第五代全球气候和天气再分析产品&#xff0c;涵盖过去80年的数据。数据可从1940年开始获取&#xff0c;ERA5取代了ERA-Interim再分析产品。 再分析将全球范围内的模型数据与…

详解drop,delete,truncate区别

在SQL中&#xff0c;"DROP"、"DELETE"和"TRUNCATE"是用于删除数据的不同命令&#xff0c;它们之间有一些重要的区别&#xff1a; DROP&#xff1a; DROP用于删除数据库对象&#xff0c;例如删除表、视图、索引、触发器等。使用DROP删除的对象将…

27.哀家要长脑子了!---栈与队列

1.739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 用单调栈的方法做&#xff1a; 从左到右遍历数组&#xff1a; 栈中存放的是下标&#xff0c;每个温度在原数组中的下标&#xff0c;从大到小排列&#xff0c;因为这样才能确保的是最近一天的升高温度 如果栈为空&am…

Vue面试经验2

Vue 你说你在vue项目中实现了自定义指令&#xff0c;如何实现 全局指令在main.js入口文件中实现 使用方法&#xff1a;v-指令名称 每个钩子函数都有两个参数&#xff08;ele,obj&#xff09; ele:绑定指令的元素 obj:指令的一些信息&#xff08;比如绑定指令的值&#xff0c…

虚表,虚函数习题

6. 关于虚表说法正确的是&#xff08;d &#xff09; A&#xff1a;一个类只能有一张虚表 多重继承 B&#xff1a;基类中有虚函数&#xff0c;如果子类中没有重写基类的虚函数&#xff0c;此时子类与基类共用同一张虚表 即使子类重写了基类的虚函数&#xff0c;此时子类与…

探索生产者/消费者模式:解决并发编程中的资源竞争

序言 在并发编程中&#xff0c;资源竞争是一个常见的问题。为了有效地管理资源并确保线程安全&#xff0c;需要采用一些有效的方法。其中之一是生产者/消费者模式&#xff0c;它是一种经典的并发设计模式&#xff0c;用于解决生产者和消费者之间的协作问题。本文将深入探讨生产…

Ansible playbook

playbook playbook介绍 playbooks是ansible用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。通过playbooks的详细描述&#xff0c;执行其中的tasks&#xff0c;可以让远端主机达到预期的状态。playbooks是由一个或多个”play”组成的列表。 当对一台机器做环境初…

conan2 基础入门(02)-安装

conan2 基础入门(02)-安装 文章目录 conan2 基础入门(02)-安装⭐前言⭐安装python安装安装包安装自行操作 ⭐验证配置环境变量命令行验证conan配置文件 END ⭐前言 Conan 2.0: C and C Open Source Package Manager 官方提供三种安装conan的方式。分别为&#xff1a; Recommen…

Vue3:路由

1. 路由简介 在Vue3中&#xff0c;路由是一个核心概念&#xff0c;特别是在构建单页面应用程序&#xff08;SPA&#xff09;时。以下是Vue3中路由的基本概念&#xff1a; 1. **路由&#xff08;Route&#xff09;**&#xff1a;在Vue3中&#xff0c;路由是指根据特定的规则将用…

行业新应用:电机驱动将成为机器人的动力核心

电机已经遍布当今社会人们生活的方方面面&#xff0c;不仅应用范围越来越广&#xff0c;更新换代的速度也日益加快。按照工作电源分类&#xff0c;可以将它划分为直流电机和交流电机两大类型。直流电机中&#xff0c;按照线圈类型分类&#xff0c;又可以分为有铁芯的电机、空心…

ARM单片机实现流水灯(GD32)

根据上图可知使用的引脚分别是PA8,PE6,PF6流水灯功能的实现要分别初始化这几个引脚 流水灯实现 编写流水灯代码 LED.C #include "gd32f30x.h" // Device header #include "Delay.h" // 初始化LED灯 void LED_Init(void){// 使能RCU时钟…

记录一次pods 导入 SocketRocket库的经历

折腾一上午&#xff0c;brew 安装成功了 cococapod 然后项目启动下载一个SocketRocket库 下载成功后总是报错&#xff1a; 睡了2个多小时&#xff0c;我在qq就交流群里求助&#xff1a; 终于把项目管理&#xff0c;在命令行里执行这句&#xff1a; open chat_app.xcworkspace…

Linux进程间通信 pipe 实现线程池 命名管道 实现打印日志 共享内存代码验证 消息队列 信号量

文章目录 前言管道匿名管道 pipe测试管道接口 --> 代码验证管道的4种情况管道的5种特征 线程池案例代码实现&#xff1a;ProcessPool.ccTask.hpp检测脚本makefile 命名管道代码演示&#xff1a;makefilenamedPipe.hppserver.ccclient.cc 实现日志Log.hpp 共享内存共享内存原…

串口属性中的BM延时计时器问题

如果使用程序修改则需要修改注册表对应位置如下 第一个示例&#xff08;217&#xff09; 第二个示例&#xff08;219&#xff09; 需要注意的事情是修改前必须点查看串口名称&#xff08;例如上图是com5&#xff09; 程序修改&#xff1a; 有没有办法以编程方式更改USB <…

【力扣】63.不同路径 II

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试…

uniapp管理后台编写,基于uniadmin和vue3实现uniapp小程序的管理后台

一&#xff0c;创建uniAdmin项目 打开开发者工具Hbuilder,然后点击左上角的文件&#xff0c;点新建&#xff0c;点项目。如下图。 选择uniadmin&#xff0c;编写项目名&#xff0c;然后使用vue3 记得选用阿里云服务器&#xff0c;因为最便宜 点击创建&#xff0c;等待项目创…

Codeforces Round 605 (Div. 3) A~D

本人水平不高&#xff0c;开这个专栏主要是督促自己补题&#xff0c;有些题对目前的我来说还比较难&#xff0c;还补不动&#xff0c;等以后能力上来了再补。。。 原题链接&#xff1a;Dashboard - Codeforces Round 605 (Div. 3) - Codeforces 目录 A. Three Friends B. Sn…

【Linux:lesson1】的基本指令

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697;打开Xshell&#xff0c;登陆root…

初识java--javaSE(3)--方法,递归,数组,

文章目录 一 方法的使用1.1 什么是方法&#xff1f;main方法注意事项 1.2 方法的调用嵌套调用在方法调用时形参与实参的关系&#xff1a; 1.3 方法的重载方法重载的意义&#xff1f;总结方法重载&#xff1a;方法签名&#xff1a; 二 递归什么是递归&#xff1f;递归的精髓&…

蛋糕店做配送小程序的作用是什么

蛋糕烘焙除了生日需要&#xff0c;对喜吃之人来说往往复购率较高&#xff0c;除线下实体店经营外&#xff0c;更多的商家选择线上多种方式获客转化、持续提高生意营收&#xff0c;而除了进驻第三方平台外&#xff0c;构建品牌私域自营店铺也同样重要。 运用【雨科】平台搭建蛋…