javaweb:mybatis:mapper(sql映射+代理开发+配置文件之设置别名、多环境配置、顺序+注解开发)
1.0版本 sql映射文件实现
流程
首先程序进入启动类MyBatisDemo.java中,读取配置文件mybatis-config.xml
再由mybatis-config的mappers属性
<mappers><mapper resource="UserMapper.xml"></mapper></mappers>
找到sql映射文件UserMapper.xml文件,通过其中的namespace属性,
<mapper namespace="test">
找到User类,并和数据库表做映射。
项目结构
User.java
package com.itheima.pojo;public class User {String id;public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +'}';}
}
MyBatisDemo.java
package com.itheima;import com.itheima.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 {// 加载mybatis核心配置文件,获取SqlSessionFactoryString resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// SqlSession,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();// 执行sqlList<User> users = sqlSession.selectList("test.selectAll");System.out.println(users);// 释放资源sqlSession.close();}}
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属性可以切换不同的environment --><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><!-- 数据库连接信息 --><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?useSSL=false"></property><property name="username" value="root"></property><property name="password" value="1234"></property></dataSource></environment></environments><mappers><mapper resource="UserMapper.xml"></mapper></mappers>
</configuration>
这里的
<mappers><mapper resource="UserMapper.xml"></mapper></mappers>
是因为UserMapper和mybatis-config同处于一个包,所以可以只写名字。但是如果UserMapper不和其同处于一个包的话,就需要写全路径。
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"><mapper namespace="test"><select id = "selectAll" resultType ="com.itheima.pojo.User">select *from tb_user;</select></mapper>
这里的namespace
<mapper namespace="test">
相当于这个mapper文件的唯一标识,不能与其他mapper文件的重复,就相当于外面套了一个test包,在其他地方调用,譬如启动类MyBatisDemo.java中调用时,要用test.方法名。
2.0版本 mapper代理开发
注意
想在resources包下面创建多级目录,譬如"com.itheima.mapper",不能直接创建一个目录,然后名称写"com.itheima.mapper",这样只会默认创建一个"com.itheima.mapper"的目录,而不会自动分级。
如果想要自动分级,需要写"com/itheima/mapper"
整体流程
首先程序进入启动类MyBatisDemo中,读取配置文件mybatis-config.xml
再由mybatis-config的mappers属性
<mappers><package name="com.itheima.mapper"/></mappers>
找到mapper包下面的mapper接口。
因为mapper接口和sql映射文件属于同一个包层次结构,所以由mapper接口可以找到sql映射文件UserMapper.xml。再由其中的resultType字段
<select id = "selectAll" resultType ="com.itheima.pojo.User">
找到pojo类,并映射对应的数据库表结构。
项目结构
mapper包下的UserMapper.java
package com.itheima.mapper;import com.itheima.pojo.User;·54
import java.util.List;public interface UserMapper {List<User> selectAll();
}
pojo包下的User类
package com.itheima.pojo;public class User {String id;public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +'}';}
}
UserMapper.xml
namespace为mapper接口的全限定名。
可以右键点击mapper接口,复制引用,即其全限定名。
<?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.itheima.mapper.UserMapper"><select id = "selectAll" resultType ="com.itheima.pojo.User">select *from tb_user;</select></mapper>
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"></transactionManager><dataSource type="POOLED"><!-- 数据库连接信息 --><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?useSSL=false"></property><property name="username" value="root"></property><property name="password" value="1234"></property></dataSource></environment></environments><mappers><mapper resource="com/itheima/mapper/UserMapper.xml"<package name="com.itheima.mapper"/></mappers>
</configuration>
MyBatisDemo
package com.itheima;import java.io.IOException;
import java.io.InputStream;
import java.util.List;import com.itheima.mapper.UserMapper;
import com.itheima.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;public class MyBatisDemo {public static void main(String[] args) throws IOException {//加载mybatis核心配置文件,获取SqlSessionFactoryString resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//获取UserMapper对象,用它直接执行sql方法UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User>users = userMapper.selectAll();System.out.println(users);//释放资源sqlSession.close();}}
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"></transactionManager><dataSource type="POOLED"><!-- 数据库连接信息 --><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?useSSL=false"></property><property name="username" value="root"></property><property name="password" value="1234"></property></dataSource></environment></environments><mappers>
<!-- <mapper class="com.itheima.mapper.UserMapper"></mapper>--><package name="com.itheima.mapper"/></mappers>
</configuration>
其中可以使用class=全类名,来找到mapper接口。
<mapper class="com.itheima.mapper.UserMapper"></mapper>
也可以使用包扫描的方式,来找到mapper接口。
<package name="com.itheima.mapper"/>
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><!--设置别名,这样任意xml中出现限定名的地方都不需要加上前面的报名前缀。且类名不区分大小写--><!--譬如这里配置了后UserMapper中的代码就可以改为<select id = "selectAll" resultType ="User"> 或者<select id = "selectAll" resultType ="user">--><typeAliases><package name="com.itheima.pojo"/></typeAliases><!-- environments default属性可以切换不同的environment --><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><!-- 数据库连接信息 --><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?useSSL=false"></property><property name="username" value="root"></property><property name="password" value="1234"></property></dataSource></environment><environment id="learn"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><!-- 数据库连接信息 --><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?useSSL=false"></property><property name="username" value="root"></property><property name="password" value="1234"></property></dataSource></environment></environments><mappers><mapper resource="com/itheima/mapper/UserMapper.xml"></mapper><package name="com.itheima.mapper"/></mappers></configuration>
mybatis-config.xml里面的属性是有顺序的,顺序如下:
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandler(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- transactionManager(事务管理器)
- dataSource(数据源)
- mappers(映射器)
3.0代码 注解开发
流程
和2.0 代理开发一样,但是xml文件里面不需要再写select属性,只需要在pojo的类上面加上对应的注解即可。
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"><mapper namespace="com.itheima.mapper.UserMapper"></mapper>
UserMapper.java
package com.itheima.mapper;import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface UserMapper {@Select("select * from tb_user")List<User> selectAll();
}
相关文章:

javaweb:mybatis:mapper(sql映射+代理开发+配置文件之设置别名、多环境配置、顺序+注解开发)
1.0版本 sql映射文件实现 流程 首先程序进入启动类MyBatisDemo.java中,读取配置文件mybatis-config.xml 再由mybatis-config的mappers属性 <mappers><mapper resource"UserMapper.xml"></mapper></mappers>找到sql映射文件Use…...
JavaScript基础知识——练习巩固(2)
写一个程序,要求如下 需求1:让用户输入五个有效年龄(0-100之间),放入数组中 必须输入五个有效年龄年龄,如果是无效年龄,则不能放入数组中 需求2:打印出所有成年人的年龄 (数组筛选)…...

FutureTask的测试使用和方法执行分析
FutureTask类图如下 java.util.concurrent.FutureTask#run run方法执行逻辑如下 public void run() {if (state ! NEW ||!RUNNER.compareAndSet(this, null, Thread.currentThread()))return;try {Callable<V> c callable;if (c ! null && state NEW) {V res…...

SpringMVC的请求处理
目录 请求映射路径的配置 请求数据的接收 接收Restful风格的数据 什么是Restful风格? 接收上传文件 获取headers头信息和cookie信息 JavaWeb常用对象获取 请求静态资源 注解驱动标签 请求映射路径的配置 请求映射路径的配置主要是通过RequestMapping注解实现…...

260. 只出现一次的数字 III
给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1: 输入&…...

家政预约接单系统,家政保洁小程序开发;
家政预约接单系统,家政保洁维修小程序开发,阿姨管理,家政保险,合同管理,资金管理,营销推广等功能,包括:推广、营销、管理、培训、周边服务等等 家政系统详细功能介绍: 家…...

网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了
网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了 我发现关于网络安全的学习路线网上有非常多看似高大上却无任何参考意义的回答。大多数的路线都是给了一个大概的框架,告诉你那些东西要考,以及建议了一个学习顺…...

出差学知识No3:ubuntu查询文件大小|文件包大小|磁盘占用情况等
1、查询单个文件占用内存大小2、显示一个目录下所有文件和文件包的大小3、显示ubuntu所有磁盘的占用情况4、查看ubuntu单个包的占用情况 1、查询单个文件占用内存大小 使用指令:ls -lh 文件 2、显示一个目录下所有文件和文件包的大小 指令:du -sh* 3…...

详解cv2.copyMakeBorder函数【OpenCV图像边界填充Python版本】
文章目录 简介函数原型代码示例参考资料 简介 做深度学习图像数据集时,有时候需要调整一张图片的长和宽。如果直接使用cv2.resize函数会造成图像扭曲失真,因此我们可以采取填充图像短边的方法解决这个问题。cv2.copyMakeBorder函数提供了相关操作。本篇…...

前端技术-并发请求
并发请求 代码解释 定义了一个函数 concurRequest,用于并发请求多个 URL 并返回它们的响应结果。 function concurRequest(urls, maxNum) {return new Promise((resolve, reject) > {if (urls.length 0) {resolve([]);return;}const results [];let index …...
面试题-React(十三):React中获取Refs的几种方式
一、Refs的基本概念 Refs是React提供的一种访问DOM元素或组件实例的方式。通过Refs,我们可以在React中获取到底层的DOM节点或组件实例,并进行一些操作。Refs的使用场景包括但不限于:访问DOM属性、调用组件方法、获取输入框的值等。 二、获取…...
Linux CentOS 7升级curl8.4.0使用编译安装方式
1、查看当前版本 # curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.19.1 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.4.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps tel…...

探寻JWT的本质:它是什么?它有什么作用?
JWT(JSON Web Token)是一种基于 JSON 格式的轻量级令牌(token)协议,它被广泛应用于网络应用程序的身份验证和授权。相较于传统的 session-based 认证机制,JWT 具有更好的扩展性和互操作性,同时也…...
关于雅思听力答案限定字数的解释。
1. No more than three words and/or a number:31,可以填3/2/1个单词;1个数字;3/2/1个单词1个数字 2. No more than three words and/or numbers:3n,可以填3/2/1个单词;n个数字;3/2…...
化工python | CSTR连续搅拌反应器系统
绝热连续搅拌釜反应器 (CSTR) 是过程工业中常见的化学系统。 容器中发生单个一级放热且不可逆的反应 A → B,假定容器始终完全混合。 试剂 A 的入口流以恒定的体积速率进入罐。 产物流B以相同的体积速率连续排出,液体密度恒定。 因此,反应液体的体积是恒定的。 在反应器中发…...
交通物流模型 | 基于自监督学习的交通流预测模型
交通物流模型 | 基于自监督学习的交通流预测模型 在智能交通系统中,准确预测不同时间段的城市交通流量是至关重要的。现有的方法存在两个关键的局限性:1、大多数模型集中预测所有区域的交通流量,而没有考虑空间异质性,即不同区域的交通流量分布可能存在偏差;2、现有模型无…...

343. 整数拆分 96.不同的二叉搜索树
343. 整数拆分 设dp[i]表示拆分 数字i 出来的正整数相乘值最大的值 (i - j) * j,和dp[i - j] * j是获得dp[i]的两种乘法,在里面求最大值可以得到当前dp[i]的最大值,但是这一次的得出的最大值如果赋值给dp[i],可能没有没赋值的dp[i]大&#…...
Vue3理解(9)
侦听器 1.计算属性允许我们声明性地计算衍生值,而在有些情况下,我们需要状态变化时执行一些方法例如修改DOM。 2.侦测数据源类型,watch的第一个参数可以市不同形式的‘数据源’,它可以市一个ref(包括计算属性),一个响应式对象&…...
CRM系统中的销售漏斗有什么作用?
随着数字化发展,越来越多的企业使用CRM销售管理系统提高销售管理水平,提升盈利能力。在这个过程中,销售漏斗起到了非常重要的作用。下面就来说说,CRM系统中的销售漏斗有什么作用? 一、销售数据可视化 CRM销售漏斗通过…...

项目(模块1:用户登陆流程分析)
验证登陆点流程...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...