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.rhkb.cn/news/324776.html

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

相关文章

hive日常使用时忘记部分补充(不定时)

1、date_formate、unix_timestamp、from_unixtime用法&#xff1a; 2、lag&#xff08;&#xff09;、lead()用法&#xff1a; lag&#xff08;)窗口函数返回分区中当前行之前行&#xff08;可以指定第几行&#xff09;的值。 如果没有行&#xff0c;则返回null。 lead()窗口…

搭建Docker私服镜像仓库Harbor

1、概述 Harbor是由VMware公司开源的企业级的Docker Registry管理项目&#xff0c;它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 Harbor 的所有组件都在 Dcoker 中部署&#xff0c;所以 Harbor 可使用 Docker Compose 快速部署。 …

C++ | Leetcode C++题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int n nums.size();if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slo…

C++:类与对象—继承

类与对象—继承 一、继承是什么&#xff1f;二、继承定义三、基类和派生类对象赋值转换四、继承中的作用域五、派生类的默认成员函数六、继承与友元七、继承与静态成员八、复杂的菱形继承及菱形虚拟继承九、继承的总结和反思十、考察重点 一、继承是什么&#xff1f; 继承(inh…

Flutter-Statewidget 创建State过程State<XXXX> createState() => _XXXXState()的解释

文章目录 创建widget 的状态对象示例代码解析 完整的代码示例总结 创建widget 的状态对象 今天有个同学问了我下State createState() > _XXXXState()时什么意思。这个代码在flutter开发中一直看到&#xff0c;很多人都不关心这个&#xff0c;直接当模板使用。今天来介绍下这…

[Cmake Qt]找不到文件ui_xx.h的问题?有关Qt工程的问题,看这篇文章就行了。

前言 最近在开发一个组件&#xff0c;但是这个东西是以dll的形式发布的界面库&#xff0c;所以在开发的时候就需要上层调用。 如果你是很懂CMake的话&#xff0c;ui_xx.h的文件目录在 ${CMAKE_CURRENT_BINARY_DIR} 下 然后除了有关这个ui_xx.h&#xff0c;还有一些别的可以简…

如何选择合适加密软件来保护信息资产|精选加密软件分析

五款加密软件对比分析&#xff0c;是一项复杂而必要的任务&#xff0c;旨在帮助用户选择最适合其需求的加密工具。在数字化时代&#xff0c;信息安全显得尤为重要&#xff0c;因此&#xff0c;对加密软件的评估与比较显得尤为关键。 首先&#xff0c;我们要考虑的是这些加密软件…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日&#xff0c;Meta在官网上公布了旗下最新大模型Llama 3。目前&#xff0c;Llama 3已经开放了80亿&#xff08;8B&#xff09;和700亿&#xff08;70B&#xff09;两个小参数版本&#xff0c;上下文窗口为8k&#xff0c;据称&#xff0c;通过使用更高质量的训练数据…

考情分析 | 2025年西北工业大学计算机考研考情分析!

西北工业简称西工大&#xff08;英文缩写NPU&#xff09;&#xff0c;大学坐落于古都西安&#xff0c;是我国唯一一所以同时发展航空、航天、航海工程教育和科学研究为特色&#xff0c;以工理为主&#xff0c;管、文、经、法协调发展的研究型、多科性和开放式的科学技术大学。十…

使用Selenium破解滑动验证码的原理及解决思路

1、获取页面元素信息&#xff1a; 使用Selenium打开目标网页&#xff0c;并通过相关方法获取滑块、背景图等元素的位置和属性信息。可以使用Selenium提供的定位方法&#xff08;如xpath、CSS选择器等&#xff09;来找到这些元素。 可以使用find_element_by_xpath或find_elemen…

Wix打包后安装包直接签名安装失败原因

生成的游戏启动器wix安装包直接打包后进行签名安装会失败&#xff0c;看安装日志显示的错误为 Failed to extract all files from container, erf: 1:2:0 网上搜到的解决方案 需要用insignia工具解包&#xff0c;解包后的文件签一次名&#xff0c;再打一次包&#xff0c;再…

AI伦理和安全风险管理终极指南

人工智能&#xff08;AI&#xff09;正在迅速改变各个领域的软件开发和部署。驱动这一转变的两个关键群体为人工智能开发者和人工智能集成商。开发人员处于创建基础人工智能技术的最前沿&#xff0c;包括生成式人工智能&#xff08;GenAI&#xff09;模型、自然语言处理&#x…

Navicat Data Modeler Ess for Mac:强大的数据库建模设计软件

Navicat Data Modeler Ess for Mac是一款专为Mac用户设计的数据库建模与设计工具&#xff0c;凭借其强大的功能和直观的界面&#xff0c;帮助用户轻松构建和管理复杂的数据库模型。 Navicat Data Modeler Ess for Mac v3.3.17中文直装版下载 这款软件支持多种数据库系统&#x…

【电路笔记】-无源高通滤波器

无源高通滤波器 文章目录 无源高通滤波器1、概述2、一阶高通滤波器的频率响应3、高通滤波器示例4、二阶高通滤波器5、RC 差异化因素高通滤波器与低通滤波器电路完全相反,因为这两个组件已互换,滤波器输出信号现在从电阻器两端获取。 1、概述 由于低通滤波器只允许低于其截止…

户籍管理系统的设计与实现

【免费】户籍管理系统的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296790 ​​​​​​​户籍管理系统的设计与实现 摘 要 当今社会人们生活质量越来越高&#xff0c;人们对生活品质的追求不断提升&#xff0c;对于孩子求学&#xff0c;变更住…

interview_bak

flink内存管理 JVM 存在的几个问题: Java 对象存储密度低。一个只包含 boolean 属性的对象占用了16个字节内存:对象头占了8个,boolean 属性占了1个,对齐填充占了7个。而实际上只需要一个bit(1/8字节)就够了。Full GC 会极大地影响性能,尤其是为了处理更大数据而开了很大…

java-函数式编程-jdk

背景 函数式接口很简单&#xff0c;但是不是每一个函数式接口都需要我们自己来写jdk 根据 有无参数&#xff0c;有无返回值&#xff0c;参数的个数和类型&#xff0c;返回值的类型 提前定义了一些通用的函数式接口 IntPredicate 参数&#xff1a;有一个&#xff0c;类型是int类…

记一次favicon.ico的折腾

某项目需要将前端和后台整合在一起 我也不知道为啥要整合 上面有要求就整呗 正常前端npm run build打包后 dist内会根据设置自动生成favicon.ico文件在根目录下 但由于前后端整合 需要打包后将图标放在dist下的static文件夹里 需要的效果 打包后 index.html里 <link rel&…

stata空间计量模型基础+检验命令LM检验、sem、门槛+arcgis画图

目录 怎么安装stata命令 3怎么使用已有的数据 4数据编辑器中查看数据 4怎么删除不要的列 4直接将字符型变量转化为数值型的命令 4改变字符长度 4描述分析 4取对数 5相关性分析 5单位根检验 5权重矩阵标准化 6计算泰尔指数 6做核密度图 7Moran’s I 指数 8空间计量模型 9LM检验…

PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态

批量生成Checkbox并添加到TableWidget中 for i in range(10):checkbox_i QCheckBox(fCheckbox_{i}) # 生成Checkbox并命名为Checkbox_iself.ui_1.tableWidget_1.setCellWidget(i,1,checkbox_i) 批量检查勾选状态 # 批量生成Checkbox并存入列表 list_Checkbox_1 [] for …