MyBatis(XML映射器操作)

文章目录

    • XML映射器操作(XxxMapper.xml)
        • 文件目录
        • 1.基本介绍
          • 1.优点
          • 2.常用顶级元素
        • 2.环境配置
          • 1.在原来的父模块下创建一个子模块
          • 2.删除没用的两个文件夹
          • 3.创建基本目录
          • 4.父模块的pom.xml
          • 5.jdbc.properties
          • 6.mybatis-config.xml
          • 7.测试使用MonsterMapperTest.java
        • 3.parameterType(输入参数类型)
          • 1.基本介绍
          • 2.案例一
            • 1.MonsterMapper.java
            • 2.MonsterMapper.xml
            • 3.测试
          • 3.案例二(模糊查询)
            • 1.MonsterMapper.java添加方法
            • 2.MonsterMapper.xml添加实现类
            • 3.测试
        • 4.传入HashMap
          • 1.基本介绍![image-20240304135016653](https://img-blog.csdnimg.cn/img_convert/6ece40de84bcc9416cce823c98dd14c1.png)
          • 2.案例一(参数为map)
            • 1.MonsterMapper.java添加方法
            • 2.MonsterMapper.xml
            • 3.测试
          • 3.案例二(返回值为map)
            • 1.MonsterMapper.java添加方法
            • 2.MonsterMapper.xml
            • 3.测试
        • 5.ResultMap
          • 1.基本介绍
          • 2.案例
            • 1.创建数据表
            • 2.创建映射类User.java
            • 3.UserMapper.java
            • 4.UserMapper.xml
            • 5.测试(数据未填充!)
            • 6.使用resultMap替换resultType解决,修改UserMapper.xml
            • 7.结果
          • 3.注意事项与细节

XML映射器操作(XxxMapper.xml)

文件目录

image-20240304162123528

1.基本介绍
1.优点

image-20240304102427876

2.常用顶级元素

image-20240304102444648

2.环境配置
1.在原来的父模块下创建一个子模块

image-20240304103035583

2.删除没用的两个文件夹

image-20240304103249466

3.创建基本目录

image-20240304104018475

4.父模块的pom.xml
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><name>Archetype - mybatis</name><url>http://maven.apache.org</url><modules><module>mybatis_quickstart</module><module>xml-mapper</module></modules><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--如果设置scope为test,则只能在test包下使用--><scope>test</scope></dependency></dependencies><!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题--><build><resources><resource><directory>src/main/java</directory><includes><!--在java文件夹下的多级目录下的xml文件--><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><!--在resources文件夹下的多级目录下的xml文件和properties文件--><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>
</project>
5.jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
6.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><!--引入外部文件jdbc.properties--><properties resource="jdbc.properties"/><!--配置mybatis自带的日志,settings需要放到最前面--><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><!--配置类型别名--><typeAliases><!--方式二:这样配置完了在这个包下的所有类都可以直接使用类名表示--><package name="com.sun.entity"/></typeAliases><environments default="development"><environment id="development"><!--配置事务管理器--><transactionManager type="JDBC"/><!--配置数据源--><dataSource type="POOLED"><!--配置驱动--><property name="driver" value="${jdbc.driver}"/><!--配置连接url--><!--1.jdbc:mysql:协议2.127.0.0.1:3306:指定连接mysql的ip+端口3.mybatis:连接的db4.useSSL:使用安全连接5.&amp;:表示&6.useUnicode=true:使用unicode,防止编码错误7.characterEncoding=UTF-8:字符集使用utf-8--><property name="url" value="${jdbc.url}"/><!--用户名--><property name="username" value="${jdbc.username}"/><!--密码--><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><!--包的方式引入含有Mapper.xml的类--><package name="com.sun.mapper"/></mappers></configuration>
7.测试使用MonsterMapperTest.java
package com.sun.mapper;import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;/*** @author 孙显圣* @version 1.0*/
public class MonsterMapperTest {//两个属性private SqlSession sqlSession; //相当于连接private MonsterMapper monsterMapper;//编写方法完成初始化@Before //标注了Before之后表示了在执行目标测试方法前会执行该方法public void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();//获取到MonsterMapper对象monsterMapper = sqlSession.getMapper(MonsterMapper.class);System.out.println(monsterMapper.getClass());}@Testpublic void test() {System.out.println("ssss");}
}

image-20240304105411141

3.parameterType(输入参数类型)
1.基本介绍

image-20240304105809901

2.案例一
1.MonsterMapper.java
package com.sun.mapper;import com.sun.entity.Monster;import java.util.List;/*** 这个接口用于声明操作monster表的方法** @author 孙显圣* @version 1.0*/
public interface MonsterMapper {//通过id或者名字查询public List<Monster> findMonsterByNameORId(Monster monster);}
2.MonsterMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.MonsterMapper"><!--实现public List<Monster> findMonsterByNameORId(Monster monster);这里能直接写Monster是因为配置文件里配置了类型别名--><select id="findMonsterByNameORId" parameterType="Monster" resultType="Monster">SELECT * FROM monster WHERE id = #{id} OR `name` = #{name}</select>
</mapper>
3.测试
package com.sun.mapper;import com.sun.entity.Monster;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class MonsterMapperTest {//两个属性private SqlSession sqlSession; //相当于连接private MonsterMapper monsterMapper;//编写方法完成初始化@Before //标注了Before之后表示了在执行目标测试方法前会执行该方法public void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();//获取到MonsterMapper对象monsterMapper = sqlSession.getMapper(MonsterMapper.class);System.out.println(monsterMapper.getClass());}@Testpublic void test() {Monster monster = new Monster();monster.setId(1);monster.setName("大象精");List<Monster> monsterList = monsterMapper.findMonsterByNameORId(monster);for (Monster monster1 : monsterList) {System.out.println(monster1);}//关闭sqlsessionif (sqlSession != null) {sqlSession.close();}}
}

image-20240304111611381

3.案例二(模糊查询)
1.MonsterMapper.java添加方法
    public List<Monster> findMonsterByName(String name);
2.MonsterMapper.xml添加实现类
    <!--实现public List<Monster> findMonsterByName(String name);--><select id="findMonsterByName" parameterType="String" resultType="Monster">SELECT * FROM monster WHERE `name` LIKE '%${name}%'</select>
3.测试
    @Testpublic void MonsterMapper() {List<Monster> monsterList = monsterMapper.findMonsterByName("孙");for (Monster monster : monsterList) {System.out.println(monster);}}

image-20240304134750221

4.传入HashMap
1.基本介绍image-20240304135016653
2.案例一(参数为map)
1.MonsterMapper.java添加方法
    //传入mappublic List<Monster> findMonsterByIdAndName_ParamMap(Map<String, Object> map);
2.MonsterMapper.xml
    <!--这里如果想要获取到id和name则需要这个Map里面有这两个key--><select id="findMonsterByIdAndName_ParamMap" parameterType="Map" resultType="Monster">SELECT * FROM monster WHERE id = #{id} OR `name` = #{name}</select>
3.测试
    @Testpublic void findMonsterByIdAndName_ParamMap() {Map map = new HashMap<String, Object>();map.put("id", 1);map.put("name", "大象精");List<Monster> monsters = monsterMapper.findMonsterByIdAndName_ParamMap(map);for (Monster monster : monsters) {System.out.println(monster);}}

image-20240304140423827

3.案例二(返回值为map)
1.MonsterMapper.java添加方法
    //以map作为返回参数public List<Map<String, Object>> findMonsterByIdAndName_ParamMap_returnMap(Map<String, Object> map);
2.MonsterMapper.xml
    <!--返回值是List,每一个元素都是一个map,而一个map代表了一条记录,key代表列,value代表值--><select id="findMonsterByIdAndName_ParamMap_returnMap" parameterType="Map" resultType="Map">SELECT * FROM monster WHERE id = #{id} OR `name` = #{name}</select>
3.测试
    @Testpublic void findMonsterByIdAndName_ParamMap_returnMap() {Map map = new HashMap<String, Object>();map.put("id", 6);map.put("name", "大象精");List<Map<String, Object>> mapList = monsterMapper.findMonsterByIdAndName_ParamMap_returnMap(map);//取出所有mapfor (Map<String, Object> stringObjectMap : mapList) {for (Map.Entry<String, Object> entry : stringObjectMap.entrySet()) {System.out.println(entry.getKey() + " " + entry.getValue());}}}

image-20240304142058962

5.ResultMap
1.基本介绍

image-20240304142524912

2.案例
1.创建数据表
CREATE TABLE `user` (user_id INT NOT NULL auto_increment,user_email VARCHAR(255) DEFAULT '',user_name VARCHAR(255) DEFAULT'',PRIMARY KEY (user_id)
)
2.创建映射类User.java
package com.sun.entity;/*** @author 孙显圣* @version 1.0*/public class User {private Integer user_id;//下面两个字段与数据表的字段不对应private String username; private String useremail;public User() {}public User(Integer user_id, String username, String useremail) {this.user_id = user_id;this.username = username;this.useremail = useremail;}public Integer getUser_id() {return user_id;}public void setUser_id(Integer user_id) {this.user_id = user_id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getUseremail() {return useremail;}public void setUseremail(String useremail) {this.useremail = useremail;}@Overridepublic String toString() {return "User{" +"user_id=" + user_id +", username='" + username + '\'' +", useremail='" + useremail + '\'' +'}';}
}
3.UserMapper.java
UserMapper.xmlpackage com.sun.mapper;import com.sun.entity.User;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public interface UserMapper {//查询所有UserMapper.xmlserpublic List<User> findAllUser();
}
4.UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.UserMapper"><select id="findAllUser" resultType="User">SELECT * FROM user</select>
</mapper>
5.测试(数据未填充!)
package com.sun.mapper;import com.sun.entity.User;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class UserMapperTest {//两个属性private SqlSession sqlSession; //相当于连接private UserMapper userMapper;//编写方法完成初始化@Before //标注了Before之后表示了在执行目标测试方法前会执行该方法public void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();//获取到MonsterMapper对象userMapper = sqlSession.getMapper(UserMapper.class);System.out.println(userMapper.getClass());}@Testpublic void findAllUser() {List<User> allUser = userMapper.findAllUser();System.out.println(allUser);}
}

image-20240304145105755

6.使用resultMap替换resultType解决,修改UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.UserMapper"><!--使用resultMap替换resultType,来进行映射类的属性与表之间的映射--><resultMap id="findAllUserResultType" type="User"><result column="user_email" property="useremail"/><result column="user_name" property="username"/></resultMap><select id="findAllUser" resultMap="findAllUserResultType">SELECT * FROM user</select>
</mapper>
7.结果

image-20240304155238444

3.注意事项与细节
  • 如果没有使用resultMap,但是表的列名与映射类的属性不匹配,则返回的结果不会填充,则该位置会是对象属性的默认值
  • 解决列名与属性名不同也可以使用别名,简单来说就是查询出来结果的时候使用as,将结果所在的列名设置成跟属性一致的名字,但是不推荐
  • MyBatis-Plus可以直接使用@TableField注解或者@TableName注解来解决

image-20240304155904444

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

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

相关文章

FSNotes for Mac v6.7.1中文激活:轻量级笔记管理工具

FSNotes for Mac&#xff0c;一款专为Mac用户打造的轻量级笔记管理工具&#xff0c;让您的笔记管理变得简单而高效。 FSNotes for Mac v6.7.1中文激活版下载 它采用Markdown文件格式&#xff0c;让您轻松创建和编辑富文本笔记&#xff0c;无需担心格式问题。同时&#xff0c;FS…

C++ | Leetcode C++题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> generateMatrix(int n) {int num 1;vector<vector<int>> matrix(n, vector<int>(n));int left 0, right n - 1, top 0, bottom n - 1;while (left < r…

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型&#xff08;LLM&#xff09;的应用程序的框架&#xff0c;但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK&#xff0c;旨在帮助开发…

STM32标准库控制一盏LED闪烁

实物连接&#xff1a; ## 软件编程&#xff1a;默认已经有一个工程模板&#xff0c;代码实现逻辑&#xff1a; 1、使用RCC开启GPIO的时钟&#xff1b; 2、使用GPIO初始化函数实现初始化GPIO 3、使用输入或输出的函数控制GPIO口 #include "stm32f10x.h" …

Android(Java)项目支持Kotlin语言开发

Android&#xff08;Java&#xff09;项目通过相关Kotlin设置后&#xff0c;允许同时使用Java语言和Kotlin语言进行开发代码的。 示例环境&#xff1a; Android Studio Giraffe | 2022.3.1 Patch 3 Java 8 Kotlin 1.9.20 设置Kotlin选项&#xff1a; 第一步&#xff1a;在项…

数据链路层(计算机网络)

0、前言 本文大多数图片都来自于 B站UP主&#xff1a;湖科大教书匠 的教学视频&#xff0c;对高军老师及其团队制作出这么优质的课程表示感谢。本文的撰写目的不是为了应试&#xff0c;且受限于个人水平&#xff0c;可能和标准答案有所出入&#xff0c;请自行甄别&#xff0c;…

定制开发AI智能名片商城小程序:玩转积分制度的成功案例

在数字化浪潮席卷而来的今天&#xff0c;企业营销方式不断创新&#xff0c;力求在众多竞争对手中脱颖而出。其中&#xff0c;积分制度以其直观、有效的特点&#xff0c;成为了众多企业的营销利器。某时尚品牌“潮流前线”便是其中的佼佼者。他们通过定制一款AI智能名片商城小程…

汽车CAN总线技术详解

1. 历史 2. 应用 3. 优点 4. 基础概念 5. 组成 6. 应用 7. 网关 8. 波形分析 参考文献 汽车CAN总线技术详解&#xff08;100多页支持下载&#xff09;

基于SSM的志愿者管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的志愿者管理系统3拥有三个角色&#xff1a; 管理员&#xff1a;用户管理、志愿组织管理、注册申请观看、活动管理、报名管理、打卡管理、公告管理等 用户&#xff1a;登录注册、…

从MySQL+MyCAT架构升级为分布式数据库,百丽应用OceanBase 4.2的感受分享

本文来自OceanBase的客户&#xff0c;百丽时尚的使用和测试分享 业务背景 百丽时尚集团&#xff0c;作为国内大型时尚鞋服集团&#xff0c;在中国超过300个城市设有直营门店&#xff0c;数量超过9,000家。集团构建了以消费者需求为核心的垂直一体化业务模式&#xff0c;涵盖了…

k8s环境prometheus operator监控集群外资源

文章目录 k8s环境添加其他节点基于prometheus operator k8s环境prometheus operator添加node-exporter方式一&#xff1a;通过 ServiceMonitor 方式可以写多个监控node节点运行 external-node.yaml查看资源有没有被创建热更新 外部需要被监控服务器安装 node-exporterdocker 方…

DigitalOcean 托管 Kafka 新增横向扩展功能

自2023年9月推出以来&#xff0c;DigitalOcean托管的Kafka已经使初创公司、不断增长的数字业务以及独立软件供应商(ISV)能够改善实时数据处理和分析&#xff0c;从而做出更具洞察力的决策。在新的一年里&#xff0c;我们很高兴地宣布DigitalOcean托管Kafka的横向扩展功能&#…

C++--const成员及const取地址操作符重载

前言 今天我们来了解一下const成员的基本使用,以及const取地址重载的运用 来开始今天的学习 const成员 1.基本定义, 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的*this指针&#xff0c;表明在该成员函…

C语言异步编程

回调函数在异步编程中有着重要的作用&#xff0c;在接口编程应用广泛&#xff0c;实战中经常会注册一个回调函数来接收其他程序返回的数据&#xff0c;这样做的好处是调用者无需主动去获取被调用者的数据&#xff0c;仅仅需要回调&#xff0c;让被调用者去传送数据&#xff0c;…

Flutter笔记:DefaultTextStyle和DefaultTextHeightBehavior解读

Flutter笔记 DefaultTextStyle和DefaultTextHeightBehavior解读 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

Unity涂鸦纹理实现

文章目录 前言实现过程UV坐标和UI坐标对齐修改像素代码 前言 心血来潮实现下场景中提供一张纹理进行涂鸦的功能。 最终实现效果: 实现过程 UV坐标和UI坐标对齐 这里的纹理使用了UGUI的Canvas进行显示&#xff0c;所以这里使用一张RawImage。 因为Unity的视口坐标是以左下角…

Postgresql源码(127)投影ExecProject的表达式执行分析

无论是投影还是别的计算&#xff0c;表达式执行的入口和计算逻辑都是统一的&#xff0c;这里已投影为分析表达式执行的流程。 1 投影函数 用例 create table t1(i int primary key, j int, k int); insert into t1 select i, i % 10, i % 100 from generate_series(1,1000000…

STM32利用硬件I2C读取MPU6050陀螺仪数据

有了前面的基本配置&#xff0c;这节读取MPU6050的数据还算是简单&#xff0c;主要就是初始化时给MPU6050一些配置&#xff0c;取消睡眠模式&#xff0c;MPU6050开机是默认睡眠模式的&#xff0c;读写无效&#xff0c;所以上来就要先更改配置&#xff1a; MPU6050寄存器初始化…

Transformer算法组件详解

自2017年Google推出Transformer以来&#xff0c;基于其架构的语言模型便如雨后春笋般涌现&#xff0c;其中Bert、T5等备受瞩目&#xff0c;而近期风靡全球的大模型ChatGPT和LLaMa更是大放异彩。网络上关于Transformer的解析文章非常大。 前言 Transformer是谷歌在2017年的论文…

【webrtc】MessageHandler 7: 基于线程的消息处理:切换main线程向observer发出通知

以当前线程作为main线程 RemoteAudioSource 作为一个handler 仅实现一个退出清理的功能 首先on message的处理会切换到main 线程 :main_thread_其次,这里在main 线程对sink_ 做清理再次,在main 线程做出状态改变,并能通知给所有的observer 做出on changed 行为。对接mediac…