后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操

news2024/9/22 1:26:03

之前的SQL语句是基于注解

以后开发中一般是一个接口对应一个映射文件

书写映射文件

基本结构 框架

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.mybatis.mapper.UserMapper">
    
</mapper>

完整形式

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--复制引用-->
<mapper namespace="org.example.mybatis.mapper.UserMapper">

    <!--查询操作-->
    <!--result 表示 单条记录封装类型的全类名-->
    <select id="list" resultType="org.example.mybatis.pojo.User">
        select * from emp
        where name like concat('%',#{name},'%')
        and gender = #{gender}
        and entrydate between #{begin} and #{end}
        order by update_time desc
    </select>

</mapper>

Invalid bound statement (not found)

要保持resources目录的com.xxx.mapper和java目录下的com.xxx.mapper名称完全一致

血的教训是改了一天的bug发现mybatis拼写成了mabatis

@Test
public void testList() {
    List<User> userList = userMapper.list("张", (short) 1,
            LocalDate.of(2010, 1, 1),
            LocalDate.of(2020, 1, 1));
    System.out.println(userList);
}
package org.example.mybatis.mapper;

import org.apache.ibatis.annotations.*;
import org.example.mybatis.pojo.User;

import java.time.LocalDate;
import java.util.List;

@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {
    
    //根据xml配置文件查询
    public List<User> list(String name, Short gender ,LocalDate begin ,LocalDate end);

}

通过映射 能通过写在mapper接口里的list方法

找到SQL语句

使用注解的方式 就不会出现这个问题

使用xml配置文件要分开写

映射上去

根据接口中方法名找到对应的接口方法

如果随意配置 就找不到了 这样调用mapper接口里的list方法就找不到了

插件

点击小鸟可以直接跳转

这样就能关联

这样我们就学习了基于注解的方式实现SQL 和 基于XML文件的方式实现SQL

使用注解映射简单的语句会使代码更加简洁

但是对于稍微复杂一点的语句 Java注解力不从心

因此 如果想实现稍微复杂一点的操作 最好用XML语句来映射语句

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵩山是颍水的嵩山

颍水对于嵩山具有特别重要的意义&#xff0c;嵩山的水流大多数汇入了颍河&#xff0c;颍河流域约占登封市总面积88%&#xff0c;从这个角度讲&#xff0c;嵩山就是颍水的嵩山。 再看环嵩山地区&#xff0c;即“嵩山文化圈”&#xff0c;学者们按黄、淮、济分为三个水系区。黄河…

解决IE11通过主机名访问和IP地址访问,CSS渲染效果不一致问题

软件环境 spingboot:版本2.6.13 浏览器&#xff1a;IE11 问题描述 html用css渲染&#xff0c;浏览器输入IP地址访问&#xff0c;和输入主机名访问&#xff0c;效果不一样&#xff0c;如下图&#xff1a; IP地址访问才是我想要的效果&#xff0c;主机访问菜单半透明向下箭头…

如何让大模型更聪明?

如何让大模型更聪明&#xff1f; *随着人工智能技术的飞速发展&#xff0c;大模型在多个领域展现出了前所未有的能力&#xff0c;但它们仍然面临着理解力、泛化能力和适应性等方面的挑战。那么&#xff0c;如何让大模型变得更聪明呢&#xff1f; 方向一&#xff1a;算法创新 …

Web3空投流程分享:如何操作及注意事项

空投&#xff08;Airdrop&#xff09;指通过向特定用户群体免费分发代币&#xff0c;项目方希望能够吸引更多的用户和关注。对于许多刚刚接触加密货币和区块链的新手来说&#xff0c;都会疑惑空投的流程究竟是什么样的呢&#xff1f;又该如何参与其中&#xff1f;本文将为您详细…

AI智能体|使用扣子Coze基于IDE创建自定义插件

大家好&#xff0c;我是无界生长。 在使用Coze的过程中&#xff0c;有些个性化场景无法通过插件商店已有的插件满足&#xff0c;这个时候就需要通过自定义插件的方式来实现业务需求。下面将通过一个实际案例来简单介绍下如何使用Coze基于IDE创建自定义插件&#xff0c;完成在Co…

SpringCloud微服务02-微服务拆分-注册中心-OpenFeign-网关路由-网关登录校验-配置管理

一、认识微服务 1.单体架构 当高并发功能和重要功能都在同一个Tomcat服务器&#xff0c;当高并发的时候&#xff0c;重要的功能接口就会受到影响。 2.微服务 跨服务就需要一些技术栈 3.SpringCloud 二、微服务拆分 1.熟悉黑马商场 2.服务拆分原则 什么时候用微服务&#xf…

HTML+CSS+JS 扩散登录表单动画

效果演示 Code <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,us…

Grafana HTML Panel展示post获取后数据

<!DOCTYPE html> <html> <head><title>API 数据表格展示</title><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body><table id"data-table" border"1&qu…

每日一题《leetcode--143.重排链表》

https://leetcode.cn/problems/reorder-list/ 这道题我们可以用两种方法 第一种&#xff1a;用数组存储该链表&#xff0c;然后通过访问数组下标的方式来改变该链表的排列方式。 void reorderList(struct ListNode* head) {第一种方法&#xff1a;用线性表存储该链表if(head …

【ARMv8/v9 异常模型入门及渐进 10 -- WFI 与 WFE 使用详细介绍 1】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 WFI 与 WFE等待事件&#xff08;WFE&#xff09;发送事件&#xff08;SEV&#xff09;本地发送事件&#xff08;SEVL&#xff09;WFE 唤醒事件 WFE 使用场景举例与代码实现wfe睡眠函数sev 事件唤醒函数全局监视器和自旋锁 …

项目从 Mysql切换 PostgreSQL 改造及踩坑记录

项目从 Mysql切换 PostgreSQL 改造及踩坑记录 切换流程 项目引入postgresql驱动包 由于我们要连接新的数据库&#xff0c;理所当然的要引入该数据库的驱动包&#xff0c;这与mysql驱动包类似 <dependency><groupId>org.postgresql</groupId><artifactI…

美容美发行业收银系统源码、美业SaaS系统源码

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序

leetcode-设计LRU缓存结构-112

题目要求 思路 双链表哈希表 代码实现 struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){} };class Solution { public: unordered_map<int, Node*> hash; Node* head; Node* tail; int …

【520】《架构演进之路》选题通过

选题通过 碰巧是520这一天&#xff0c;清华社编辑今天下午回复书籍&#xff08;架构演进之路&#xff09;选题通过&#xff0c;一个有纪念意义的日子。 架演共创者联盟成立 目前参与者有8位成员&#xff0c;涉及前后端、大数据、app、数字孪生&#xff0c;可比一个真实项目团队…

k8s笔记 | Prometheus安装

kube-prometheus 基于github安装 选择对应的版本 这里选择 https://github.com/prometheus-operator/kube-prometheus/tree/release-0.11 下载修改为国内镜像源 image: quay.io 改为 quay.mirrors.ustc.edu.cn image: k8s.gcr.io 改为 lank8s.cn 创建 prometheus-ingres…

C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间

glog下载和编译 glog开源地址 https://github.com/google/glog glog静态库编译 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文选择的glo…

如何利用Ubuntu服务器运行深度学习项目?

一、整体思路 先配置好服务器端的软件环境&#xff08;工程源码&#xff0c;miniconda&#xff0c;cuda&#xff0c;显卡驱动等&#xff09;&#xff0c;然后用自己电脑的pycharm远程连接服务器运行代码。一句话总结&#xff1a;借用服务器资源运行代码&#xff0c;本地pycharm…

第三节 mybatis-spring-boot-starter 案例分析

tips&#xff1a;可以利用 docker-desktop 快速搭建 MySQL、Redis 等中间件Docker 安装 Redis | 菜鸟教程 上一章&#xff0c;我们完成了一个自定义 Starter &#xff1b; 这一章&#xff0c;我们来看看 Mybatis 是如何使用 Starter&#xff0c;通过学习 mybatis-spring-boot-s…

深度学习模型keras第二十二讲:使用KerasCV进行语义分割

1、语义分割的概念 1.1语义分割的定义 语义分割是一种计算机视觉领域的图像分割技术&#xff0c;其目标是将一张图像中的每个像素分配给预定义的类别。 在图像领域&#xff0c;语义指的是对图像意思的理解。语义分割就是按照“语义”给图像上目标类别中的每一点打上一个标签…

C#屏蔽基类成员

可以用与积累成员名称相同的成员来屏蔽 要让编译器知道你在故意屏蔽继承的成员&#xff0c;可以用new修饰符。否则程序可以成功编译&#xff0c;但是编译器会警告你隐藏了一个继承的成员 using System;class someClass {public string F1 "Someclass F1";public v…