当前位置: 首页 > news >正文

Java课题笔记~ MyBatis接口开发(代理开发)

使用XML文件进行开发,在调用SqlSession进行操作时,需要指定MyBatis映射文件中的方法,这种调用方式过于烦琐。为解决此问题,MyBatis提供了接口开发的方式。

接口开发的目的:

  • 解决原生方式中的硬编码

  • 简化后期执行SQL

使用和指定语句的参数和返回值相匹配的接口(比如 UserMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。

需修改的地方:

1.在mapper文件夹下创建XxxMapper接口,并定义相应的抽象方法。

2.在mapper文件夹下创建映射文件XxxMapper.xml,并指定其namespace为对应Mapper接口的绝对路径。

3.在MyBatis主配置文件中,将mapper包下所有的Mapper接口引入

<mappers><!--<mapper resource="com/ambow/mapper/UserMapper.xml"/>--><package name="com.foxbill.mapper">
<mappers>

 4.在pom.xml中配置resource,指定打包资源,使mapper包中的映射文件可以被打包到classes中【另一种方式:也可以不做如下配置,而是把映射文件,放在resources对应的文件夹中】

    <build><!--加入 resource 插件--><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>

一、实现步骤

1、创建Mapper接口

package com.ambow.mapper;import com.ambow.pojo.User;import java.util.List;public interface UserMapper {public List<User> selectUser();public List<User> searchUser(String keywords);public int insertUser(User user);public int updateUser(User user);public int deleteUser(int id);
}

2、修改mapper.xml文件中的namespace

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--MyBatis接口开发,需要修改namespace-->
<mapper namespace="com.ambow.mapper.UserMapper"><select id="selectUser" resultType="com.ambow.pojo.User">select * from tb_user</select><select id="searchUser" resultType="com.ambow.pojo.User">select * from tb_user where username like '%${_parameter}%'</select><!--新增用户--><insert id="insertUser" parameterType="com.ambow.pojo.User">insert into tb_user values(null,#{username},#{password},#{gender},#{addr})</insert><update id="updateUser" parameterType="com.ambow.pojo.User">update tb_user set username = #{username},password = #{password}, gender = #{gender},addr = #{addr}where id = #{id}</update><delete id="deleteUser">delete from tb_user where id = #{id}</delete></mapper>

3、修改主配置文件中映射文件的路径

<mappers><!--<mapper resource="com/ambow/mapper/UserMapper.xml"/>--><package name="com.ambow.mapper"/>
</mappers>

4、测试接口开发

 

    @Testpublic void test() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//获取SqlSessionFactory - 工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//        System.out.println(sqlSessionFactory);//获取SqlSession - 连接对象SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> list = userMapper.selectUser();for (User user : list) {System.out.println(user);}}

二、MyBatis动态代理原理

 

三、MyBatisX 插件

MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。

主要功能:

  • XML 和 接口方法 相互跳转

  • 根据接口方法生成 statement

安装:

 

相关文章:

Java课题笔记~ MyBatis接口开发(代理开发)

使用XML文件进行开发&#xff0c;在调用SqlSession进行操作时&#xff0c;需要指定MyBatis映射文件中的方法&#xff0c;这种调用方式过于烦琐。为解决此问题&#xff0c;MyBatis提供了接口开发的方式。 接口开发的目的&#xff1a; 解决原生方式中的硬编码 简化后期执行SQL …...

从数学到深度学习的学习资料及教程合集

诸神缄默不语-个人CSDN博文目录 目前仅收集免费内容&#xff0c;最多需要买本纸质书。 付费的如果有免费版本我也会收录。 链接如失效请联系我。 这个笔记主要是为我自己准备的&#xff0c;算是一个可公开的to do list&#xff08;其实做不完的我也知道&#xff09;&#xff…...

nn.CrossEntropyLoss()报错

RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index” not implemented for ‘Float’ Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/zz/anaconda3/envs/torch1.11/lib/python3.7/site-pack…...

【BASH】回顾与知识点梳理(一)

【BASH】回顾与知识点梳理 一 前言一. 认识与学习 BASH1.1 硬件、核心与 Shell1.2 为何要学文字接口的 shell&#xff1f;1.3 系统的合法 shell 与 /etc/shells 功能1.4 Bash shell 的功能1.5 查询指令是否为 Bash shell 的内建命令&#xff1a; type1.6 指令的下达与快速编辑按…...

AWS Amplify 部署node版本18报错修复

Amplify env&#xff1a;Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下&#xff0c;AWS Amplify 使用 Amazon Linux:2 作为其构建镜像&#xff0c;并自带 GLIBC 2.26。不过&#xff0c;…...

K8S添加yum源并安装kubectl/kubeadm/kubelet组件

1.安装kubectl/kubeadm/kubelet ##添加yum 源 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 gpgkeyhttps://mirr…...

kafka生产者指定ip

kafka生产者指定ip 最近工作中遇到一个问题&#xff0c;记录一下&#xff0c;需求中要求往kafka上推送信息。本来是个很简单的需求&#xff0c;但是踩了一个坑。 ​ 我通过spring boot集成了kafka写了一个生产者&#xff0c;客户那边给我三个节点的ip&#xff0c;然后我也没多想…...

python 封装sql 增删改查连接MySQL

select * from Teacher limit 10 连接字符串配置MysqlConfig.py class MysqlConfig:HOST 192.168.56.210PORT 3306USER rootPASSWORD 1qaz0987654321DBStudentDBCHARSET utf8封装增删改查MysqlConnection.py Author: tkhywang 2810248865qq.com Date: 2023-06-19 15:44:48 Las…...

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到&#xff0c;发现flink运行一段时间后&#xff0c;不再继续消费的问题。这个问题困扰了我非常久&#xff0c;一开始也很迷茫。又因为比较忙&#xff0c;所以一直没有时间能够去寻找答案&#xff0c;只是通过每天重启…...

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…...

数据结构10 -查找_树表查找

创建二叉搜索树 二叉搜索树 二叉搜索树是有数值的了&#xff0c;二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值&#xff1b; 它…...

第126天:内网安全-隧道技术SSHDNSICMPSMB上线通讯LinuxMac

知识点 #知识点&#xff1a; 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、隧道技术-SMB&ICMP&DNS&SSH 4、控制上线-Linux&Mac&IOS&Android-连接方向&#xff1a;正向&反向&#xff08;基础课程有讲过&#xff09; -内网穿透&#xf…...

开发一个饲料商城小程序需要多少钱

随着宠物行业的蓬勃发展&#xff0c;饲料商城小程序作为一个重要的销售渠道&#xff0c;吸引了越来越多的投资者。那么&#xff0c;开发一套饲料商城小程序需要多少钱呢&#xff1f;本文将为您详细解答。 首先&#xff0c;开发一套饲料商城小程序的价格受到多个因素的影响&…...

Emacs之set-face-attribute与font-lock-add-keywords用法区别(一百二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

JavaScript高阶函数和闭包

在JavaScript编程中&#xff0c;高阶函数和闭包是两个重要而又常见的概念。它们是函数式编程的重要组成部分&#xff0c;可以让我们的代码更加灵活、简洁和高效。本文将详细解释高阶函数和闭包的概念、用法以及它们在JavaScript中的重要性。 高阶函数 1. 什么是高阶函数&…...

私有化部署企业IM即时通讯:提升效率、防止泄密、高效协同办公

随着科技的飞速发展和智能手机的普及&#xff0c;即时通讯&#xff08;IM&#xff09;应用在我们的生活和工作中变得越来越重要。在企业中&#xff0c;IM已成为员工之间交流沟通的主要方式之一。然而&#xff0c;对于大多数企业来说&#xff0c;选择私有化部署企业IM即时通讯软…...

react ant icon的简单使用

refer: 快速上手 - Ant Design 1.引入ant npm install antd --save 2.在页面引用&#xff1a; import { StarOutlined } from ant-design/icons; 如果想要引入多个icon&#xff0c;可以这样书写&#xff1a; import { UserOutlined, MailOutlined, PieChartOutlined } fr…...

用Rust实现23种设计模式之原型模式

在 Rust 中&#xff0c;原型模式可以通过实现 Clone trait 来实现。原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而无需显式地使用构造函数。下面是一个使用 Rust 实现原型模式的示例&#xff0c;带有详细的代码注释和说明&#x…...

visual studio 2022 编译时出现MSB3721问题

cuda1C:\code\SSR\Impl\Dev\gE\cO\G.Common.XrayRegistration_nc>“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\nvcc.exe” -gencodearchcompute_86,code“sm_86,compute_86” --use-local-env -ccbin “C:\Program Files\Microsoft Visual Studio\2022…...

Android 获取网络连接状态新方法

一. 问题背景 Android12上&#xff0c;有的app模块判断当前网络的类型和连接状态时&#xff0c;还是使用的旧的API&#xff0c;导致返回的结果不准确&#xff0c;影响代码逻辑判断&#xff0c;本篇文章就这一问题&#xff0c;整理一下判断网络类型和连接状态的新方法。 二. 原因…...

如何在3分钟内掌握JiYuTrainer:极域电子教室防控制终极指南

如何在3分钟内掌握JiYuTrainer&#xff1a;极域电子教室防控制终极指南 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否厌倦了在电脑课上被极域电子教室的全屏广播控制&…...

轻量嵌入模型实战:all-MiniLM-L6-v2部署与简单应用

轻量嵌入模型实战&#xff1a;all-MiniLM-L6-v2部署与简单应用 还在为文本搜索、智能问答或者文档分类项目寻找一个既快又准的文本向量化工具而发愁吗&#xff1f;传统的BERT模型虽然效果好&#xff0c;但动辄几百兆的体积和缓慢的推理速度&#xff0c;在资源有限的生产环境中…...

Cosmos-Reason1-7B效果展示:对‘为什么这个递归会栈溢出’提问,输出调用深度热力图分析

Cosmos-Reason1-7B效果展示&#xff1a;对为什么这个递归会栈溢出提问&#xff0c;输出调用深度热力图分析 提示&#xff1a;本文所有展示效果均基于真实测试&#xff0c;Cosmos-Reason1-7B模型能够深入分析递归函数的调用过程&#xff0c;并通过热力图直观展示栈溢出原因 1. 工…...

一些算法题的反思总结

1.技巧总结有序———想二分连续———①滑动窗口② DP&#xff08;dp[i]表示以i结尾的xxxxx&#xff09;③前缀和&#xff0c;f(ij)-f(i)重复——哈希/Counter/defaultdict子问题——1️⃣递归&#xff0c;先定义结束如何退出&#xff0c;再考虑当前值怎么做2️⃣动态规划&…...

深入操作系统原理:Qwen3.5-9B-AWQ-4bit解读进程调度与内存管理

深入操作系统原理&#xff1a;Qwen3.5-9B-AWQ-4bit解读进程调度与内存管理 1. 操作系统教学的新助手 计算机操作系统课程向来以抽象难懂著称。学生们常常被进程状态转换、死锁条件、页面置换算法等概念困扰&#xff0c;而传统教学方式又难以直观展示这些动态过程。这正是Qwen…...

工业级音频响应式分形火焰生成器:从算法到工程实践

1. 项目概述1.1 背景与动机分形火焰&#xff08;Fractal Flame&#xff09;是一种基于迭代函数系统&#xff08;IFS&#xff09;的生成艺术&#xff0c;能够产生绚丽多彩、无限复杂的图案。传统实现通常只依赖随机性&#xff0c;缺乏与外部世界的交互。音频信号作为丰富的信息源…...

OpenClaw技能组合策略:千问3.5-35B-A3B-FP8驱动复杂工作流5个案例

OpenClaw技能组合策略&#xff1a;千问3.5-35B-A3B-FP8驱动复杂工作流5个案例 1. 为什么需要技能组合&#xff1f; 去年我尝试用单一技能处理竞品分析时&#xff0c;发现模型生成的报告总是缺少关键数据支撑。当我手动补充爬虫结果后&#xff0c;又面临图表生成与多语言翻译的…...

【2026 最新】JDK 下载与安装:在 macOS 下使用 Homebrew 和 jenv 完美管理多版本 JDK

结合 Homebrew 和 jenv 是在 macOS 上管理多版本 JDK 的最佳实践。Homebrew 负责安装具体的 JDK 文件&#xff0c;而 jenv 负责在这些版本之间灵活切换。 Homebrew安装配置看下面的教程&#xff1a; 【2026 最新】Mac 终端神器 Homebrew 完全指南&#xff1a;从安装、换源加速…...

企业微信外部群自动化回复避坑指南:RPA如何稳定接管WebSocket连接不断线

企业微信外部群自动化回复的WebSocket稳定性实战&#xff1a;从心跳包到风控规避 当你的RPA机器人第三次在凌晨2点因为WebSocket连接断开而停止响应时&#xff0c;技术负责人发来的质问消息比企业微信的报警通知更让人心惊。这不是简单的技术故障&#xff0c;而是关乎业务流程连…...

OpenClaw学习记录:Phi-3-mini-128k-instruct自动生成Anki记忆卡片

OpenClaw学习记录&#xff1a;Phi-3-mini-128k-instruct自动生成Anki记忆卡片 1. 为什么需要自动化记忆卡片 备考过程中最痛苦的经历莫过于整理海量笔记后&#xff0c;还要手动制作Anki记忆卡片。去年准备技术认证考试时&#xff0c;我花了整整两周时间把300多页PDF的精华内容…...