Mybatis入门

ops/2024/10/22 16:45:37/

我们要

使用Mapper代理方式完成Mybatis入门

第一步:在mysql中创建一张user1表,并添加数据。

create table user1
(id int primary key auto_increment,name varchar(20) not null,sex char default '男',address varchar(20)
);
insert into user1 (id, name, sex, address) VALUE (null,'小红','女','天津'),(null,'阿发','男','北京'),(null,'卡恩','男','海南'),(null,'阿福','女','山东');
select id, name, sex, address from user1;

java代码中编写一个user1类与该表相对应

java">public class user1 {private Integer id;private String name;private String sex;private String address;public user1() {}public user1(Integer id, String name, String sex, String address) {this.id = id;this.name = name;this.sex = sex;this.address = address;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "user1{" +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
}

第二步:在Maven工程中pom.xml文件中导入坐标(即我们需要的依赖)

这是完整的pom.xml文件,我们导入了Junit,Mysql,Mybatis依赖

<?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>com.hhh</groupId><artifactId>maven_day1</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- mysql依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--junit依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency></dependencies></project>

 第三步:编写Mybatis的核心配置文件--->替换连接信息,解决硬编码问题

在Maven工程中的Resource目录下创建一个名为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"><!--设置默认的环境development,也可以配置多环境开发--><environment id="development"><transactionManager type="JDBC"/><!--使用mybatis自带的连接池POOLED--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mysql_day2"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--配置映射文件关联的参数--><mappers>//相关参数一会写</mappers>
</configuration>

 第四步:Resource目录下创建一个映射文件,我们取名为UserMapper.xml,内容一会写

第五步:定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一个目录下

Mapper接口创建在java代码块中

java">//dao层
public interface UserMapper {/*** 功能:查询所有用户数据* @return*/public List<user1>  findAllUser();}

 现在我们要思考一个问题,Mapper接口在java代码块中,映射文件在Resource目录中,该怎么让他们在同一个目录下?

我们要在Resource目录中创建一个目录:com/hhh/dao (使用"."的话,不是同一个目录,要使用"/")

然后把映射文件拖到Resource目录下的com.hhh.dao包

验证,查看target目录:

可以发现他们已经处于同一个目录 

第六步:编写SQL映射文件,namespace属性的值设置为Mapper接口的路径

id是Mapper接口里的方法名字,resultType就是封装的类型

在文本中写select语句

<?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.hhh.dao.UserMapper"><!--编写sql查询语句--><select id="findAllUser" resultType="com.hhh.pojo.user1">/*返回的结果封装到user1对象*/select id, name, sex, address from user1</select></mapper>

 第七步:我们可以编写代码了

我们在java代码块中编写代码

 要使用的API

SqlSessionFactory:工厂类,就是为了创建SqlSession对象

SqlSession:和数据库交互的类(执行SQL语句)

大致步骤

1.加载核心配置文件,获取SqlSessionFactory对象

2.获取SqlSession对象

3.通过SqlSession的getMapper()方法获取Mapper接口的代理对象

4.调用代理对象的方法完成sql的执行

5.释放资源 

//代理对象会对UserMapper的方法进行增强,通过与它同名的xml文件(SQL映射文件)获取内容(SQL语句),因为Mapper接口已经和xml文件处于同一个目录,且xml文件的namespace属性值是Mapper接口的路径(关联)

java">public class MybatisTest {@Testpublic void testFindAllUser() throws IOException {//核心配置文件路径String resource = "mybatis-config.xml";//核心配置文件//基于配置文件路径,创建字节输入流对象InputStream inputStream = Resources.getResourceAsStream(resource);//创建SqlSessionFactory工厂类对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//利用工厂类,创建一个SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//利用SqlSession,创建一个代理类对象(注意,不是SqlSession被代理,是UserMapper类对象被代理)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//使用代理对象,调用方法查询用户数据List<user1> allUser = userMapper.findAllUser();
//代理对象会对UserMapper的方法进行增强,通过与它同名的xml文件(SQL映射文件)获取内容(SQL语句)for (user1 u : allUser) {System.out.println(u);}}
}

 运行之前我们还要在核心配置文件中加载映射文件

<?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"><!--设置默认的环境development,也可以配置多环境开发--><environment id="development"><transactionManager type="JDBC"/><!--使用mybatis自带的连接池POOLED--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mysql_day2"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--配置映射文件关联的参数--><mappers><!--扫描mapper--><mapper resource="com/hhh/dao/UserMapper.xml"/></mappers>
</configuration>

结果:

核心配置文件的补充

配置文件中各个标签的顺序

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>      

        properties标签:加载外部的资源配置文件,properties标签在第一位

                属性:resource  指定要引入的外部配置文件路径

                在核心配置文件中,通过:${key}方式引入外部配置文件的数据key是键值对的键 

 我们重新在Resource目录下创建一个jdbc.properties文件,用来保存连接数据库的四大参数

这是jdbc.properties文件的内容

java">jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mysql_day2
jdbc.username=root
jdbc.password=123456

所以我们在核心配置文件中引入该文件

<?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>//引入外部文件<properties resource="jdbc.properties"></properties><environments default="development"><!--设置默认的环境development,也可以配置多环境开发--><environment id="development"><transactionManager type="JDBC"/><!--使用mybatis自带的连接池POOLED--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/>  //通过${key}访问<property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--配置映射文件关联的参数--><mappers><!--扫描mapper--><mapper resource="com/hhh/dao/UserMapper.xml"/></mappers>
</configuration>

        settings标签

                防止数据库中有的字段名带有下划线,我们可以在settings标签中开启驼峰映射

<?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><properties resource="jdbc.properties"></properties><!--开启驼峰映射:把数据表中名字带有下划线的字段名,变成驼峰命名格式,例如:user_name=>username或userName--><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><environments default="development"><!--设置默认的环境development,也可以配置多环境开发--><environment id="development"><transactionManager type="JDBC"/><!--使用mybatis自带的连接池POOLED--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--配置映射文件关联的参数--><mappers><!--扫描mapper--><mapper resource="com/hhh/dao/UserMapper.xml"/></mappers>
</configuration>

        typeAliases标签:起别名

                子标签:package

                                属性:name:指定扫描的包 

<typeAliases><!-- <typeAlias type="com.hhh.pojo.user1" alias="user1"></typeAlias>--><!--如果pojo包下有很多类,哪么要写很多行,我们换另一种方法--><!--扫描指定的包,把包下的所有类,都起了别名。别名格式:全部小写或者和类名一致,就是把前面的包名去掉--><package name="com.hhh.pojo"/></typeAliases>

这样一来,在映射文件中,resultType的值就可以从com.hhh.pojo.user1改成user1了

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--映射文件--><!--利用username把当前映射文件与Mapper接口关联-->
<mapper namespace="com.hhh.dao.UserMapper"><!--编写sql查询语句--><select id="findAllUser" resultType="user1">/*返回的结果封装到user1对象*/select id, name, sex, address from user1</select></mapper>

        mappers标签:提供了关联加载映射文件的配置功能;

                使用方式:

1.先加载xml映射文件,再通过映射文件取关联Mapper接口

<mapper resource="UserMapper.xml"/> 从resource下加载映射文件

说明:如果项目基于xml的开发模式,建议使用方式1

2.加载接口,再通过接口关联映射文件

条件:1.接口名和映射文件名保持一致 2.路径保持一致

批量加载class:<package name="接口在的包路径">   

说明:如果基于注解开发的话,使用方式2            

  <!--配置映射文件关联的参数--><mappers><!--扫描mapper--><!--<mapper resource="com/hhh/dao/UserMapper.xml"/>--><!--指定要扫描的所有Mapper接口的包路径--><package name="com.hhh.dao"/></mappers>


http://www.ppmy.cn/ops/37099.html

相关文章

iptables---防火墙

防火墙介绍 防火墙的作用可以理解为是一堵墙&#xff0c;是一个门&#xff0c;用于保护服务器安全的。 防火墙可以保护服务器的安全&#xff0c;还可以定义各种流量匹配的规则。 防火墙的作用 防火墙具有对服务器很好的保护作用&#xff0c;入侵者必须穿透防火墙的安全防护…

学习和分析各种数据结构所要掌握的一个重要知识——CPU的缓存利用率(命中率)

什么是CPU缓存利用率&#xff08;命中率&#xff09;&#xff0c;我们首先要把内存搞清楚。 硬盘是什么&#xff0c;内存是什么&#xff0c;高速缓存是什么&#xff0c;寄存器又是什么&#xff1f; 我们要储存数据就要运用到上面的东西。首先里面的硬盘是可以无电存储的&#…

AI模型:windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】

AI模型&#xff1a;windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】 CodeGemma 没法直接运行&#xff0c;需要中间软件。下载安装ollama后&#xff0c;使用ollama运行CodeGemma。 类似 前端本地需要安装 node.js 才可能跑vue、react项目 1…

js宏任务微任务输出解析

第一种情况 setTimeout(function () {console.log(setTimeout 1) //11 宏任务new Promise(function (resolve) {console.log(promise 1) //12 同步函数resolve()}).then(function () {console.log(promise then) //13 微任务})})async function async1() {console.log(async1 s…

6.移除元素

文章目录 题目简介题目解答解法一&#xff1a;双指针代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;双指针优化代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 相关的讲解&#xff01;&#x1f600; 题目简…

短视频矩阵系统ai剪辑 矩阵 文案 无人直播四合一功能核心独家源头saas开发

抖去推矩阵AI小程序是一款针对短视频平台的智能创作和运营工具&#xff0c;它具有以下功能特点&#xff1a; 1.批量视频生成&#xff1a;抖去推可以在短时间内生成大量视频&#xff0c;帮助商家快速制作出适合在短视频平台上推广的内容 2.全行业覆盖&#xff1a;适用于多个行业…

关于YOLO8学习(六)安卓部署ncnn模型--图片检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 关于YOLO8学习(五)安卓部署ncnn模型–视频检测 简介 前文第五章,讲述了部署自定义模型后,进…

matlab

图像配准&#xff1a; %手动选择执行图片(由于程序为分开&#xff0c;此处保存的mat文件为图MRI6的信息&#xff0c;所以请选择图MRI6) [filename,pathname]uigetfile({*.jpg;*.bmp;*.tif;*.png;*.gif,All Image Files;*.*,All Files}); image imread([pathname,filename]); …