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:用户登陆流程分析)
验证登陆点流程...
ComfyUI IPAdapter Plus完整配置指南:图像条件控制的终极解决方案
ComfyUI IPAdapter Plus完整配置指南:图像条件控制的终极解决方案 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus ComfyUI IPAdapter Plus是Stable Diffusion图像生成中实现精准图像条件控制…...
从STM32空闲中断迁移到HC32F460超时中断:串口不定长数据接收的两种思路对比
STM32空闲中断与HC32F460超时中断的深度对比:串口不定长数据接收实战指南 在嵌入式系统开发中,串口通信作为最基础的外设接口之一,其数据接收的稳定性和效率直接影响系统性能。对于无固定协议帧的串口数据流(如编码器输出…...
Process Explorer|微软官方免费进程神器|吊打系统任务管理器|揪出隐藏恶意软件
电脑莫名卡顿、风扇狂转、文件删不掉?系统任务管理器查不到元凶?试试 Process Explorer—— 微软官方免费进程管理工具,功能碾压自带任务管理器,轻松揪出后台隐藏恶意软件,普通用户也能上手! 备用下载 一…...
Python自动化脚本:模拟鼠标键盘输入保持系统活跃状态
1. 项目概述:当你的电脑需要“假装在线”你有没有遇到过这样的场景:公司要求电脑必须保持在线状态,否则会被判定为“离开”或“闲置”,影响考勤或系统状态;或者,你在运行一个需要持续交互的软件,…...
AI系统提示词安全防护:从泄露风险到后端代理实战
1. 项目概述:当系统提示词不再“秘密”最近在AI应用开发圈里,一个名为“asgeirtj/system_prompts_leaks”的项目引起了我的注意。这名字直译过来就是“系统提示词泄露”,听起来就有点意思。简单来说,这个项目收集并展示了在各种AI…...
数据库安全与合规:保护你的数据资产
数据库安全与合规:保护你的数据资产 引言 数据库是企业的核心数据资产,数据库安全不仅关系到业务的正常运行,更关系到用户隐私和企业声誉。本文将从访问控制、数据加密、审计日志、备份恢复等多个维度,全面探讨数据库安全与合规的…...
从一次内存拷贝崩溃说起:手把手教你用memcpy_s重构老旧C代码
从内存越界崩溃到安全重构:实战memcpy_s迁移指南 调试器突然停止在memcpy调用处,控制台抛出"Segmentation fault"的那一刻,每个C语言开发者都会心头一紧。这种由内存越界引发的崩溃在遗留代码库中尤为常见,就像我去年接…...
Spring Boot 3.x 集成AD域实战:从SSL证书踩坑到密码重置,一篇讲透
Spring Boot 3.x 深度集成AD域实战:SSL证书配置与密码策略避坑指南 在企业级应用开发中,Active Directory(AD)集成是身份认证的核心环节。本文将带您深入Spring Boot 3.x与AD域集成的实战细节,特别聚焦于SSL证书配置和…...
PowerToys Awake终极指南:如何让Windows电脑在你需要时永不休眠?
PowerToys Awake终极指南:如何让Windows电脑在你需要时永不休眠? 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_…...
AI编程助手统一工作空间框架:声明式配置提升开发效率
1. 项目概述:为AI编程助手打造的统一工作空间框架如果你和我一样,每天都在用Cursor、GitHub Copilot这类AI编程助手,那你肯定也遇到过这个痛点:每次开新项目,或者切换到一个稍微复杂点的多项目工作区,都得从…...
