当前位置: 首页 > 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;整理一下判断网络类型和连接状态的新方法。 二. 原因…...

AI开发-python-langchain框架(--自定义Tool )夹

起因是我想在搞一些操作windows进程的事情时&#xff0c;老是需要右键以管理员身份运行&#xff0c;感觉很麻烦。就研究了一下怎么提权&#xff0c;顺手瞄了一眼Windows下用户态权限分配&#xff0c;然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

Competitive Companion全链路解决方案:编程竞赛效率提升指南

Competitive Companion全链路解决方案&#xff1a;编程竞赛效率提升指南 【免费下载链接】competitive-companion Browser extension which parses competitive programming problems 项目地址: https://gitcode.com/gh_mirrors/co/competitive-companion 一、工具定位与…...

FireRedASR-AED-L语音识别模型WebUI部署教程:Python环境快速配置指南

FireRedASR-AED-L语音识别模型WebUI部署教程&#xff1a;Python环境快速配置指南 想试试最新的语音识别模型&#xff0c;但被复杂的Python环境配置和依赖包冲突劝退&#xff1f;这感觉我太懂了。每次看到新模型发布&#xff0c;兴致勃勃地准备上手&#xff0c;结果第一步环境搭…...

打造专属抖音推流神器:Python+FFmpeg实现自定义RTMP直播推流

一、引言 抖音直播已成为内容创作者的重要阵地&#xff0c;而推流软件则是连接本地视频源与直播服务器的桥梁。市面上虽有OBS等成熟工具&#xff0c;但有时我们需要轻量化、定制化的推流方案。本文将带您从零开发一款简易的抖音推流软件&#xff0c;支持屏幕/摄像头捕获&#…...

Neeshck-Z-lmage_LYX_v2代码实例:Streamlit交互界面开发与参数绑定逻辑

Neeshck-Z-lmage_LYX_v2代码实例&#xff1a;Streamlit交互界面开发与参数绑定逻辑 1. 项目核心&#xff1a;一个更聪明的本地绘画工具 如果你用过一些AI绘画工具&#xff0c;可能会遇到几个头疼的问题&#xff1a;想换个画风得重启软件、调参数像开盲盒、电脑配置不够直接卡…...

PowerPaint-V1 Gradio在文化遗产保护中的应用:古画修复与数字化

PowerPaint-V1 Gradio在文化遗产保护中的应用&#xff1a;古画修复与数字化 1. 引言 一幅珍贵的古代山水画&#xff0c;因为年代久远出现了多处破损和褪色&#xff1b;一张历史照片&#xff0c;因为保存不当而出现了霉斑和裂纹。这些文化遗产的损坏&#xff0c;往往意味着一段…...

应对极端姿态与表情:cv_resnet101_face-detection_cvpr22papermogface 鲁棒性极限测试

应对极端姿态与表情&#xff1a;cv_resnet101_face-detection_cvpr22papermogface 鲁棒性极限测试 今天咱们不聊常规操作&#xff0c;来点刺激的。人脸检测模型平时表现都挺好&#xff0c;证件照、生活照基本不在话下。但真到了“实战”环境&#xff0c;情况就复杂多了&#x…...

如何利用Browserify代码覆盖率分析提升JavaScript应用质量:完整工具链指南

如何利用Browserify代码覆盖率分析提升JavaScript应用质量&#xff1a;完整工具链指南 【免费下载链接】browserify-handbook how to build modular applications with browserify 项目地址: https://gitcode.com/gh_mirrors/br/browserify-handbook 在前端开发中&#…...

从平面到立体:用Origin打造揭示乳液配方奥秘的3D三元曲面图

1. 为什么需要从平面走向立体&#xff1f; 在乳液配方研发过程中&#xff0c;我们常常需要同时调整三种成分的配比。传统的三元等高线图虽然能展示成分与性能的关系&#xff0c;但就像看一张纸质地图和用手机导航的区别——前者只能告诉你哪里有山&#xff0c;后者却能让你直观…...

OpenClaw备份策略:千问3.5-27B智能压缩历史聊天记录

OpenClaw备份策略&#xff1a;千问3.5-27B智能压缩历史聊天记录 1. 为什么需要智能备份策略 作为一个长期使用OpenClaw进行日常工作的开发者&#xff0c;我发现随着使用时间的增长&#xff0c;聊天记录文件开始占据大量存储空间。最初我的解决方案是简单粗暴的定期删除&#…...