mybatis的基于注解和xml的两种实现方式详解

文章简介

本文介绍了springboot+mybatis实现数据库操作的两种实现方式,经测试均可运行使用。整体而言注解更加简便,但面对一些复杂查询,可能需要使用到注解方式。

注解方式

pom依赖:

<dependencies>
        <!--连接数据库-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
    </dependencies>

application.yaml配置文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mmall_learning?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver #com.mysql.cj.jdbc.Driver

Controller层

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @RequestMapping(value = "/get_user", method = RequestMethod.GET)
    public ResponseEntity<User> getUser(@RequestParam(value = "id") String userId) {
        User user = userService.getUser(userId);
        return ResponseEntity.status(HttpStatus.OK).body(user);
    }
}

Service层

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUser(String userId) {
        User user = userMapper.findById(userId);
        return user;
    }

}

Dao层

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM mmall_user WHERE ID = #{id}")
    User findById(@Param("id") String id);
}

实体类

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;
}

评析:注解方式非常简便,没有额外的配置工作。

xml方式

xml方式相对来说会需要配置一些路径参数,如果各位想通过这种方式实现数据库操作,可以参照以下目录结构和对应路径配置来实现。

目录结构
在这里插入图片描述

pom依赖:

	<dependencies>
        <!--连接数据库-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>

        <!-- Mybatis核心 仅xml方式需要加入该依赖,注解方式不需要 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
    </dependencies>

application.yaml配置文件:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mmall_learning?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver #com.mysql.cj.jdbc.Driver

# 配置Mybatis文件位置,告诉Spring Boot你需要扫描的位置
mybatis:
  mapper-locations: classpath:com.example.demo.dao/*.xml

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mmall.dao.UserMapper">
    <select id="findById" parameterType="int" resultType="com.example.demo.mmall.bean.User">
    SELECT * FROM mmall_user WHERE id = #{id}
  </select>
</mapper>

Controller层

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @RequestMapping(value = "/get_user", method = RequestMethod.GET)
    public ResponseEntity<User> getUser(@RequestParam(value = "id") String userId) {
        User user = userService.getUser(userId);
        return ResponseEntity.status(HttpStatus.OK).body(user);
    }
}

Service层

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUser(String userId) {
        User user = userMapper.findById(Integer.valueOf(userId));
        return user;
    }

}

Dao层

@Mapper
public interface UserMapper {
    User findById(@Param("id") Integer id);
}

实体类

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;
}

评析:XML方式需要做些额外的配置工作,包括新建xml映射文件、在application.yaml中配置扫描路径等。但总体来说,比原来spring+mybatis使用xml方式实现数据库操作的配置已经简便不少了。

测试结果

以上两种方式测试结果均如下所示,可以正常查询到所需数据。
在这里插入图片描述

觉得文章有帮助可以点个赞或关注支持一下哟~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了&#xff0c;就酱。 参考阅读&#xff1a;极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集&#xff0c;这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

冒泡排序---算法

1、算法概念 冒泡排序&#xff1a;它重复地走访要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。这个算法越小的元素会经由交换慢慢“浮”到…

Linux企业级别日志的查找

企业级别日志的查找 查看mysql数据库的日志错误日志&#xff08;Error Log&#xff09;查询日志&#xff08;General Query Log&#xff09;慢查询日志&#xff08;Slow Query Log&#xff09;事务日志&#xff08;Transaction Log&#xff09;二进制日志&#xff08;Binary Lo…

python-tkinter程序的带包发布pyinstaller的使用闭坑

一、pyinstaller 不是内部或外部命令 1、安装pyinstaller 安装的时候一定注意别少了install后的er&#xff0c;pyinstaller,否则会安装成其他的程序的。安装的指令如下&#xff1a; pip install pyinstaller2、配置运行环境 首先找到你的python的安装目录&#xff0c;这个我…

Web APIs知识点讲解(阶段六)

BOM- 操作浏览器 一.Window对象 1. 依托 BOM 对象实现对历史、地址、浏览器信息的操作或获取2. 具备利用本地存储实现学生信息表案例的能力 1.BOM(浏览器对象模型) BOM(Browser Object Model ) 是浏览器对象模型 window 是浏览器内置中的全局对象&#xff0c;我们所学习的所…

论文笔记:基于多粒度信息融合的社交媒体多模态假新闻检测

整理了ICMR2023 Multi-modal Fake News Detection on Social Media via Multi-grained Information Fusion&#xff09;论文的阅读笔记 背景模型实验 背景 在假新闻检测领域&#xff0c;目前的方法主要集中在文本和视觉特征的集成上&#xff0c;但不能有效地利用细粒度和粗粒度…

C# 学习第五弹——语句

一、if语句 —简单if语句 —if else 语句 —if else if else 语句 1、简单if语句 if&#xff08;表达式&#xff09;{语句} &#xff08;1&#xff09;表达式必须使用圆括号括起来&#xff1b; &#xff08;2&#xff09;表达式&#xff1a;关系表达式或逻辑表达…

Express

可以方便、快速创建Web网站的服务器&#xff08;提供web网页资源&#xff09;或API接口服务器&#xff08;提供API接口&#xff09; app.get(请求URL&#xff0c;function(req,res)>{}) //req:请求对象&#xff08;包括请求属性和方法&#xff09; //res:响应对象&#xff…

【python】常用函数汇总(持续更新……)

文章目录 【numpy.exp()】返回e的幂次方&#xff0c;e是一个常数为2.71828【np.dot()】矩阵相乘【np.linalg.inv()】矩阵求逆 【numpy.exp()】返回e的幂次方&#xff0c;e是一个常数为2.71828 举例&#xff1a;numpy.exp() 【np.dot()】矩阵相乘 【要点】 1、前者的列数后者…

suno让音乐行业一夜变天,如何快速体验suno一键生成音乐?

随着AI的应用变广&#xff0c;各类AI程序已逐渐普及。AI已逐渐深入到人们的工作生活方方面面。而AI涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的音乐。 Suno是一个专业高质量的AI歌曲和音乐创作平台&#xff0c;用户只需输入简…

Vue ElementPlus Form、Form-item 表单

Form 表单 由输入框、选择器、单选框、多选框等控件组成&#xff0c;用以收集、校验、提交数据&#xff0c;组件升级采用了 flex 布局&#xff0c;以替代旧版本的 float 布局。 典型表单 包括各种表单项&#xff0c;比如输入框、选择器、开关、单选框、多选框等。 在 Form 组件…

打造高效安全的电池管理 | 基于ACM32 MCU的两轮车充电桩方案

前 言 随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决…

python实现模糊神经网络(pytorch版)

1 理论 模糊神经网络是一种基于模糊逻辑的神经网络模型&#xff0c;其主要用于处理模糊信息和不确定性的问题。模糊神经网络可以将输入数据映射到一个模糊集合中&#xff0c;然后通过一系列的模糊规则进行求解&#xff0c;最终输出一个模糊集合。 模糊神经网络的基本原理是将…

微软最新10道算法岗面试题!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

YOLOv9改进策略 :原创自研 | 自研独家创新BSAM注意力 ,基于CBAM升级

💡💡💡本文改进内容: 提出新颖的注意力BSAM(BiLevel Spatial Attention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的 BiLevel Attention+Spartial Attention 1)作为注意力BSAM使用; 推荐指数:五星 …

分区合并风险大,数据恢复有妙招

分区合并&#xff0c;是计算机磁盘管理中的一个常见操作&#xff0c;旨在通过整合相邻的分区来创建一个更大的逻辑分区&#xff0c;从而更有效地利用磁盘空间。这种操作看似简单&#xff0c;但实则蕴含着不小的风险。一旦操作不当或遇到意外情况&#xff0c;很可能导致数据丢失…

微信伴侣WechatTweak 中文集成版【微信防撤回、多开助手】

微信伴侣WechatTweak是一款专为Mac平台设计的微信客户端插件&#xff0c;旨在提升微信使用体验。它拥有多种实用功能&#xff0c;如防止消息撤回、微信无限多开、免二次认证登录等&#xff0c;让用户能够更轻松、安全地管理微信账号和消息。同时&#xff0c;微信伴侣WechatTwea…

刷力扣必备ImageMagick: 强大的图像处理套件

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; 我将在我的专栏里面的每个算法题里面通过ImageMagick把运行步骤通过动态图…

智能指针(C++11)

智能指针的使用 问题 我们在平时写程序的时候&#xff0c;有些情况下不可避免地会遇见内存泄露的情况。内存泄露是指因为疏忽或错误&#xff0c;造成程序未能释放已经不再使用的内存的情况。例如下面这个例子&#xff0c;内存泄漏不易被察觉。 int div() {int a, b;cin >…

P28—P31:变量

P28-变量的定义 什么是变量&#xff1f; 从本质上来说&#xff0c;变量就是一块内存空间&#xff0c;而这块内存空间有数据类型、名字、字面值。变量包含三部分&#xff1a;数据类型、名字、字面值&#xff08;数据&#xff09;变量是内存中存储的基本单元。 数据类型的作用&a…