【MyBtis】各种查询功能
目录
【MyBtis】配置和映射
11.1 示例:实现表数据的增、删、改、查
1.创建工程mybatis_DML demo
2.创建数据库操作的工具类:DBOperatorMgr.java
3.创建映射接口
4.创建XML映射文件
5.测试
【MyBtis】配置和映射
MyBatis 的真正强大之外在于它的映射语句,这也是它的魅力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果将其与具有相同功能的 JDBC 代码进行对比,会立即发现其省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的并且比普通的方法效果更好。
(1)实现表数据的增、删、改、查;
(2)MyBatis主配置文件;
(3)XML映射文件;
(4)高级结果映射。
11.1 示例:实现表数据的增、删、改、查
1.创建工程mybatis_DML demo
在 idea 中创建 Maven Project,如图11-1所示,“GroupID“ 选项中输入 “com.mialab” ,在 “ArtifactId” 选项输入“student”最终完成的 student 工程目录和 student 初始表数据如图11-1和图11-2所示。
图11-1 mybatisDML_demo 工程目录结构
图11-2student表中的数据
2.创建数据库操作的工具类:DBOperatorMgr.java
在MyBatis 使用中,如果每个方法执行时都需要读取配置文件,并根据配置文件的信息构建SqlSessionFactory对象,然后创建SqlSession 对象,这会导致类大量的重复代码。为了简化开发,需要将重复代码封装到一个工具类中。如下:
public class DBOperatorMgr {static Logger logger = Logger.getLogger(DBOperatorMgr.class.getName());private static DBOperatorMgr dbMgr;private SqlSessionFactory sqlSessionFactory;private DBOperatorMgr() {String resource = "mybatis-config.xml";InputStream inputStream;try {inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (Exception e) {logger.error(e.toString());}}public static DBOperatorMgr getInstance() {if (dbMgr == null) {dbMgr = new DBOperatorMgr();}return dbMgr;}public SqlSessionFactory getSqlSessionFactory() {return sqlSessionFactory;}
}
3.创建映射接口
public interface StudentMapper {public Student getStudent(String sno);public int addStudent(Student student);public List<Student> getSudentAll();public int updateStudent(Student student);public int deleteStudent(String sno);
}
4.创建XML映射文件
在包com.mialab.mybatis_DML_demomapper 中创建 StudentMapper.xml文件。
<mapper namespace="com.mialab.mybatis_DML_demo.mapper.StudentMapper"><select id="getStudent" resultType="com.mialab.mybatis_DML_demo.domain.Student">select * from student wheresno = #{sno}</select><insert id="addStudent" parameterType="student">insert intostudent(sno,name,sex,age,dept_no)values(#{sno},#{name},#{sex},#{age},#{dept_no})</insert><resultMap id="studentResultMap" type="student"><id property="sno" column="sno" /><result property="name" column="name" /><result property="sex" column="sex" /><result property="age" column="age" /><result property="dept_no" column="dept_no" /></resultMap><select id="getSudentAll" resultMap="studentResultMap">select * from student</select><update id="updateStudent" parameterType="student">update student set name= #{name}, sex = #{sex}, age = #{age}, dept_no = #{dept_no}where sno =#{sno}</update><delete id="deleteStudent" parameterType="String">delete from studentwhere sno = #{sno}</delete></mapper>
5.测试
如图11-1所示,在src/main/java 中创建 Package“com.mialab.mybatis_DML demo.main”。在此包中创建测试类DML_Mainjava,主要代码:
public class DML_Main { public static void main(String[] args) {//testInsert();//testSelectAll();testSelect("20171509");//testUpdate();
// testDelete("20171622");} private static void testDelete(String sno) {Logger log = Logger.getLogger(DML_Main.class);SqlSession session = null;try {session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class); mapper.deleteStudent(sno); session.commit();} catch(Exception ex) {session.rollback();ex.printStackTrace();} finally {if (session != null) {session.close();}} }private static void testSelectAll() {Logger log = Logger.getLogger(DML_Main.class);SqlSession session = null;try {session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);List<Student> stu_list = mapper.getSudentAll();for(Student stu:stu_list) {//System.out.println(stu);log.info(stu);}} finally {if (session != null) {session.close();}}}private static void testInsert() {Logger log = Logger.getLogger(DML_Main.class);SqlSession session = null;try {session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);Student student = new Student();student.setSno("20171622");student.setName("李白");student.setAge(88);student.setSex("男");student.setDept_no("2609");log.info(student);mapper.addStudent(student);session.commit();} catch(Exception ex) {session.rollback();ex.printStackTrace();} finally {if (session != null) {session.close();}}}private static void testSelect(String sno) {Logger log = Logger.getLogger(DML_Main.class);SqlSession session = null;try {session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);Student student = mapper.getStudent(sno);//System.out.println(student);log.info(student);} finally {if (session != null) {session.close();}} }private static void testUpdate() {Logger log = Logger.getLogger(DML_Main.class);SqlSession session = null;try {session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);Student student = new Student();student.setSno("20171622");student.setName("苏东坡");student.setAge(68);student.setSex("女");student.setDept_no("2612");log.info(student);mapper.updateStudent(student);session.commit();} catch(Exception ex) {session.rollback();ex.printStackTrace();} finally {if (session != null) {session.close();}}}
}
先测试 testSelectA11() 方法。如图 11-1 所示,右击comm.ialab.mybatis _DML_demo.main包中的DML_Main.java,在弹出的快捷菜单中选择“Run DML_Main.java”选项,在控制台中可以得到以下的结果:
INFO [main] - Student [sno=20171508, name=李勇, sex=男, age=20, dept_no=2601]INFO [main] - Student [sno=20171509, name=刘娟, sex=女, age=19, dept_no=2602]INFO [main] - Student [sno=20171622, name=李白, sex=男, age=88, dept_no=2609]
可分别对增、删、改、查的方法testInsert()、testUpdate()等进行测试。
相关文章:

【MyBtis】各种查询功能
目录 【MyBtis】配置和映射 11.1 示例:实现表数据的增、删、改、查 1.创建工程mybatis_DML demo 2.创建数据库操作的工具类:DBOperatorMgr.java 3.创建映射接口 4.创建XML映射文件 5.测试 【MyBtis】配置和映射 MyBatis 的真正强大之外在于它的映射语句…...

H5打包封装小程序系统开发
H5打包封装小程序系统开发 H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤: 准备工作:首先,需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行,并且没有依赖于浏览器特…...

SpringBoot集成jasypt,加密yml配置文件
SpringBoot集成jasypt,加密yml配置文件 一、pom配置二、生成密文代码三、配置3.1、yml加密配置3.2、密文配置3.3、启动配置3.4、部署配置 四、遇到的一些坑 最新项目安全检测,发现配置文件中数据库密码,redis密码仍处理明文状态 一、pom配置…...

【C++】模板(初阶)
1、泛型编程 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础 2、函数模板 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本…...

windows下的txt文档,传到ubuntu后,每行后面出现^M,怎么处理?
问题背景:windows下pycharm生成的txt文档,传到ubuntu后,每行后面出现^M 用vim打开显示 使用cat -A filename显示如下 参考https://www.lmlphp.com/user/16697/article/item/579325/给出的几种方法 方法一、dos2unix filename。服务器没装…...

LabVIEW FPGA开发实时滑动摩擦系统
LabVIEW FPGA开发实时滑动摩擦系统 由于非线性摩擦效应的建模和补偿的固有困难,摩擦系统的运动控制已被广泛研究。最近,人们更加关注滑动动力学和滑动定位,作为传统机器人定位的低成本和更灵活的驱动替代方案。摩擦控制器设计和适当选择基础…...

Prometheus服务器、Prometheus被监控端、Grafana、Prometheus服务器、Prometheus被监控端、Grafana
day03 day03Prometheus概述部署Prometheus服务器环境说明:配置时间安装Prometheus服务器添加被监控端部署通用的监控exporterGrafana概述部署Grafana展示node1的监控信息监控MySQL数据库配置MySQL配置mysql exporter配置mysql exporter配置prometheus监控mysql自动…...
常见的锁策略(面试八股文)
1.乐观锁vs悲观锁 乐观锁:预测该场景中不太会出现锁冲突的情况。(后续做的工作会更少) 悲观锁:预测该场景非常容易出现锁冲突(后续做的工作会更多) 锁冲突:多个线程同时尝试去获得同一把锁&…...
SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、保活包
SO_KEEPALIVE SO_KEEPALIVE 是一个套接字选项,用于设置是否启用 keepalive 机制。在这段代码中没有涉及到 SO_KEEPALIVE 选项的设置。 当 SO_KEEPALIVE 被设置为非零值时,表示启用 keepalive 机制。keepalive 是一种用于检测连接是否仍然有效的机制。通…...

【phaser微信抖音小游戏开发005】画布上添加图片
特别注意:真机模拟的时候,尽量使用网络图片资源,不要在小程序源文件里面使用图片,会出现真机加载不成功,小程序包体积过大的问题。我们学习过程中,只是作为演示使用。 推荐使用场景: 背景图片…...

【设计模式——学习笔记】23种设计模式——外观模式Facade(原理讲解+应用场景介绍+案例介绍+Java代码实现)
文章目录 案例引入介绍基本介绍类图出场角色 案例实现案例一类图代码实现 案例二类图代码实现 外观模式在Mybatis源码中的应用总结文章说明 案例引入 在家庭影院中,要享受一场电影,需要如下步骤: 直接用遥控器:统筹各设备开关开…...
消息队列 -提供上层服务接口
目录 前言封装数据库封装内存操作内存的设计思想 应答模式 代码实现测试代码 前言 我们之前已经将 数据库 的操作 和文件的操作 都完成了, 但是对于上层调用来说, 并不关心是于数据库中存储数据还是往文件中存储数据, 因此 我们提供一个类, 封装一下 上述俩个类中的操作, 并将…...

maven引入本地jar包的简单方式【IDEA】【SpringBoot】
前言 想必点进来看这篇文章的各位,都是已经习惯了Maven从中央仓库或者阿里仓库直接拉取jar包进行使用。我也是🤡🤡。 前两天遇到一个工作场景,对接三方平台,结果对方就是提供的一个jar包下载链接,可给我整…...

【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密 1、前言2、行动…...

【uni-app】【Android studio】手把手教你运行uniapp项目到Android App
运行到Android App基座 选择运行到Android App基座 选择运行项目 1、连接手机,在手机上选择 传输文件。 2、打开 设置-> 关于本机 -> 版本信息->连续点击4-5次版本号 ,输入手机密码,系统就进入了开发者模式。 3、设置 > 其他设…...

多线程(JavaEE初阶系列6)
目录 前言: 1.什么是线程池 2.标准库中的线程池 3.实现线程池 结束语: 前言: 在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下,那么这节中小编将分享一下多线程中的线程池。给大家讲解一…...

shell清理redis模糊匹配的多个key
#!/bin/bash# 定义Redis服务器地址和端口 REDIS_HOST"localhost" REDIS_PORT6380# 获取匹配键的数量 function get_matching_keys() {local key_pattern"$1"redis-cli -h $REDIS_HOST -p $REDIS_PORT -n 0 KEYS "$key_pattern" }# 删除匹配的键 …...

【电网异物检测硕士论文摘抄记录】电力巡检图像中基于深度学习的异物检测方法研究
根据国家电力行业发展报告统计,截止到 2018 年,全国电网 35 千伏及以上的输电线路回路长度达到 189 万千米,220 千伏及以上输电线路回路长度达73 万千米。截止到 2015年,根据国家电网公司的统计 330 千伏及以上输电线路故障跳闸总…...

C++共享数据的保护
虽然数据隐藏保护了数据的安全性,但各种形式的数据共享却又不同程度地破坏了数据的安全。因此,对于既需要共享有需要防止改变的数据应该声明为常量。因为常量在程序运行期间不可改变,所以可以有效保护数据。 1.常对象 常对象:它…...
MyBatisPlus学习记录
MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 MyBatisPlus简介 入门案例 创建新模块,选择Spring初始化,并配置模块相关基础信息选择当前模块需要使用的技术集(仅选择MySQL …...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...