MyBatis 的配置与使用,以及它与原生 JDBC 在项目开发中的不同点和优势

mybatis与原生jdbc的对比 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。 阅读详情

一、MyBatis 简介

MyBatis 是一个 半自动 ORM 框架,本质上还是基于 JDBC,但它帮我们做了很多重复性工作:

  • SQL 写在 XML 或注解里,Java 代码只管调用。

  • 自动完成参数映射(Java 对象 → SQL 占位符)。

  • 自动完成结果映射(SQL 查询结果 → Java 对象)。

👉 它不像 Hibernate 那样完全 ORM,而是 SQL 你来写,MyBatis帮你执行和映射。


二、MyBatis 基本配置[1] Maven 

1. 引入依赖

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.13</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.0.33</version>
</dependency>


2. 配置 MyBatis 核心文件 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
  <!-- 环境配置 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/testdb"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>

  <!-- 注册映射文件 -->
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/>
  </mappers>
</configuration>


3. 定义实体类 User.java

public class User {
    private Integer id;
    private String name;
    private Integer age;
    // getter/setter
}


4. 定义 Mapper 接口 UserMapper.java

public interface UserMapper {
    User selectUserById(int id);
    int insertUser(User user);
}


5. 编写 SQL 映射文件 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="UserMapper">

  <!-- 查询 -->
  <select id="selectUserById" resultType="User">
    SELECT id, name, age FROM users WHERE id = #{id}
  </select>

  <!-- 插入 -->
  <insert id="insertUser" parameterType="User">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
  </insert>

</mapper>


6. 使用 MyBatis

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;

public class MyBatisDemo {
    public static void main(String[] args) throws Exception {
        // 读取配置
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

        try (SqlSession session = sqlSessionFactory.openSession(true)) {
            UserMapper mapper = session.getMapper(UserMapper.class);

            // 查询
            User user = mapper.selectUserById(1);
            System.out.println(user.getName());

            // 插入
            User newUser = new User();
            newUser.setName("Tom");
            newUser.setAge(22);
            mapper.insertUser(newUser);
        }
    }
}


三、MyBatis 基本配置[2] SpringBoot 

1、添加依赖

在 pom.xml 中加入:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>

2、配置数据库连接

在 application.yml 或 application.properties 中配置数据库信息。

application.yml 示例:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*.xml   # XML 映射文件位置
  type-aliases-package: com.example.demo.entity # 实体类包路径


3、创建实体类

User.java

package com.example.demo.entity;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    // getter & setter
}

4、创建 Mapper 接口

UserMapper.java

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper  // 让 Spring 管理这个接口
public interface UserMapper {

    // XML 或注解方式都可以,这里先演示注解
    @Select("SELECT id, name, age FROM users WHERE id = #{id}")
    User selectUserById(Integer id);
}

5、XML 配置 SQL(可选)

如果不想用注解,可以写 XML 文件。
在 src/main/resources/mapper/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.mapper.UserMapper">

  <select id="selectUserById" resultType="com.example.demo.entity.User">
    SELECT id, name, age FROM users WHERE id = #{id}
  </select>

  <insert id="insertUser" parameterType="com.example.demo.entity.User">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
  </insert>

</mapper>

6、Service 层

UserService.java

package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserService {

    @Resource
    private UserMapper userMapper;

    public User getUser(Integer id) {
        return userMapper.selectUserById(id);
    }
}

7、Controller 层

UserController.java

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Integer id) {
        return userService.getUser(id);
    }
}

8、启动测试

启动 Spring Boot 应用后,访问:

http://localhost:8080/user/1

四、MyBatis 与 JDBC 的区别

对比点JDBCMyBatis
SQL 管理写在 Java 代码里,字符串拼接写在 XML 或注解中,清晰分离
参数设置需要手动 ps.setXXX()自动映射 #{}
结果处理需要手动 rs.getXXX() 转换为对象自动映射到 Java Bean
代码量冗长、重复代码多简洁,关注 SQL 逻辑即可
事务控制手动管理框架支持
可维护性SQL 和 Java 强耦合,不利于维护SQL 和 Java 解耦,更利于团队协作
扩展性需要自己写工具类插件机制丰富(分页、缓存等)

五、MyBatis 的优势

  1. SQL 与代码分离

    • SQL 写在 XML/注解里,Java 专注业务逻辑。

    • DB 工程师和 Java 工程师分工协作更方便。

  2. 自动映射

    • 参数自动绑定,结果集自动封装成对象。

    • 避免大量 rs.getXXX() 和 ps.setXXX()。

  3. 可维护性强

    • SQL 独立文件,版本控制方便。

    • 修改 SQL 不需要改 Java 代码。

  4. 灵活性

    • 与数据库强绑定(不像 Hibernate 那样完全 ORM)。

    • 复杂 SQL 可以手写,性能可控。

  5. 插件丰富

    • MyBatis-Plus(分页、CRUD 简化)。

    • 缓存机制(一级缓存、二级缓存)。


六、适用场景

✅ MyBatis 更适合:

  • SQL 逻辑比较复杂的项目(报表系统、业务规则复杂)。

  • 团队需要 SQL 与代码解耦,方便数据库工程师和 Java 工程师协作。

  • 强调 性能可控(自己写 SQL,避免 Hibernate 那样的自动 SQL 性能隐患)。

❌ JDBC 适合:

  • 极简单的 Demo、小型项目。

  • 学习底层原理(理解预编译、连接池等)。

✅ Spring Boot + MyBatis 优势:

  • 无需写 mybatis-config.xml,配置直接写在 application.yml。

  • 自动注入 SqlSessionFactory、DataSource,开发者不必手动管理。

  • 用 @Mapper 注解即可自动扫描接口,不用在 XML 中写 <mappers>。

  • 与 Spring 生态无缝整合(事务、IOC、AOP 等)。


✨ 总结:

  • JDBC → 底层 API,繁琐但灵活

  • MyBatis → JDBC 的封装,简化开发,灵活性和性能兼顾

RocketMq面板访问异常 com.alibaba.fastjson.JSONException: not close json text, token : string rocketmq JSONException: not close json text, token : string 问题解决 阅读详情

相关推荐

【SAP PO】SAP PO 接口配置完整教程之一RFC服务发布

SAP RFC开发,PO接口配置

XLevon的博客 2万+

使用Mybatis与直觉用jdbc相比,哪个更有优势?

实话实说,我对Mybatis没有很深入的了解,也仅仅是处于「会用」的阶段上。 为什么没有深入去研究Mybatis的原因很可能是面试其实问的不是特别多,起码我在校招的时候免了很多家公司,也没怎么问我Mybatis的。 Mybatis如果仅仅是要【会用】,入门是非常快的,感觉两三天就可以搞好了。 认识Mybatis 在前阵子已经总结过了JDBC了,无论是什么的ORM框架(Object Relation Mapping)其实都是在JDBC上封装了一层,底层用的都是JDBC的代码。 众所周知,直接写JDBC的代

SQY0809的博客 2804

内存设计指南:01 Xilinx DDR4 design guide解析

最近有很多网友咨询FPGA DDR4为什么速率总是上不去的问题,发现他们的设计确实很随意,都没有遵守一些手册的基本要求,所以今天和大家一起重新读一读DDR4 design guide,看看哪些要求是一定不能忽略的。首次设计一款新的芯片或者内存方案时,可能会无从下手。对于内存设计,官方指导首推JEDEC规范,每一代内存推出时,在JEDEC官网均能找到对应的规范文档、各种内存形式的说明文档如DDR4-JESD79、DDR4 SDRAM UDIMM Design Specification以及内存条DEMO等。

halee_00的博客 3302

JPA和MyBatis和原生JDBC

没有最好的方案,只有最适合的方案。根据项目需求、团队技能和性能要求来选择合适的数据访问层实现方式。

刘皇叔说Java的博客 1046

【SWPUCTF 2021 新生赛】hardrce

对每个字符的ASCII值进行按位取反操作(这种要进行自增马进行绕过。

XiaoHei的博客 460

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1000

【mybatis】mybatis的特性和优势

文章目录MyBatis是什么ORM是什么为什么说Mybatis是半自动ORM映射工具对于传统的JDBC,MyBatis的优势有哪些传统 JDBC 开发存在的问题MyBatis解决JDBC编程的不足MyBatis 的优缺点优点缺点MyBatis 框架适用场景Hibernate 和 MyBatis 的区别相同点不同点结尾 MyBatis是什么 首先我们来说一下mybatis的什么: MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射) 框架,它支持定制化 SQL、存储过程以及高级映射。MyBa

Black_Customer的博客 9477

【ChangeCLIP】Remote sensing change detection with multimodal vision-language representation learning

ChangeCLIP论文及代码使用详解。持续更新变化检测最新论文,欢迎订阅本专栏。

向上生长的程序媛的博客 1336

JDBC和MyBatis的使用

JDBC 就是使用Java语言操作关系型数据库的一套API全称:( Java DataBase Connectivity ) Java 数据库连接我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。

weixin_67201964的博客 3011

SAP BOM反查(可追溯值至顶级)

功能介绍:BOM层数在7层以内的(含7层)的物料,执行后都可以查询到顶级的BOM,逻辑很简单,后期如BOM层数增加,可自行增加查询逻辑。 *&---------------------------------------------------------------------* *& Report ZBOM_CHECK *&---------------------...

SAP阿狸 6060

1.1 了解Spring框架 -《SSM深入解析与项目实战》

文章目录第1篇 基础概念第1章 谈谈SSM框架和Redis1.1 了解Spring框架1.1.1 如何学习Spring1.1.2 IoC(Inversion of Control 控制反转)1.1.3 AOP(Aspect Oriented Programing面向切面编程) 项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm 本章非常形象的介绍了Springn中最核心的两个概念,IoC和AOP,使用了现实中的例子

谙忆-陈浩翔 2135

MyBatis的核心优势

MyBatis,作为Java开发中的佼佼者,以其独特的优势在持久层框架中占据重要地位。以下是MyBatis的几大核心优势:

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6357

【图像超分】论文复现:Pytorch实现ESPCN

论文精读:由于ESPCN没有公布源码,我们选择github上一个高star的项目来复现。准备数据集,以及数据预处理搭建网络模型设置参数并训练测试训练好的模型用训练好的模型测试自己的数据本文我们使用pycharm链接服务器训练。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1万+

Mybatis和JDBC区别

今天面试中问了这个问题,当时答的不好,现在整理一下。 JDBC是Java提供的一个操作数据库的API; MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 MyBatis是对JDBC的封装。相对于JDBC,MyBatis有

cherry_vicent的专栏 6270

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

持久层技术对比:Mybatis 与 JDBC 的区别到底在哪里

通过比较原生 JDBC 和 Mybatis 的开发方式和使用场景,告诉读者在项目中使用持久层框架,开发效率会更高,开发速度会更快。

毛惜时的博客 4051

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JDBC的回顾 与 Mybatis的简介

ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主 要解决数据库数据和 POJO 对象的相互映射。Java对象POJO 对象(Plain Ordinary Java Object): 简单的 Java 对象,实际就是 普通 JavaBeans。映射配置配置分为:类与数据库中表 的映射;对象与表中记录的 映射;类的属性与数据库中 表的字段的映射。数据库。

m0_64481525的博客 1302

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mybatis是什么以及Mybatis和JDBC的关系?

文章目录Mybatis是什么Mybatis和JDBC的关系 Mybatis是什么 mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。 Mybatis使开发者只需要关注sql语句本身,简化JDBC操作,不需要在关注加载驱动、创建连接、处理SQL语句等繁杂的过程。 MyBatis可以通过xml或注解完成ORM映射关系配置。 Mybatis和JDBC的关系 JDBC是Java提供的一个操作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。 MyBat

我真的不会java的博客 9305

Mybatis与Jdbc相比优势在哪?不比不知道,一比吓一跳!网友:Mybatis 牛逼!

两个字:方便 Mybatis应该是国内用得最多的「数据访问层」框架了,我看了我司的好几个系统,基本都是用Mybatis的。 实话实说,我对Mybatis没有很深入的了解,也仅仅是处于「会用」的阶段上。日常的要加张表,加个字段就是写写 DAO/Mapper 。 为什么没有深入去研究Mybatis的原因很可能是面试其实问得不是特别多,起码我在校招的时候面了很多家公司,也没怎么问我Mybatis的。 Mybatis如果仅仅是要「会用」,入门是非常快的,感觉两三天就可以搞好了。 认识Mybatis 在前阵子已经

S11035762的博客 6100

MyBatis与JDBC相比,有哪些优势

MyBatis与JDBC(Java Database Connectivity)相比,在多个方面展现出显著的优势。这些优势使得MyBatis在现代软件开发中成为一个非常受欢迎的选择,特别是在处理数据库交互时。

m0_46552684的博客 1393

使用 MyBatis 原生功能

MyBatis 是一个功能强大的持久层框架,它通过配置文件和映射文件简化了 JDBC 的使用,允许开发者自定义 SQL 语句并映射到 Java 对象。MyBatis 的多数据库支持和环境配置功能使其能够适应不同的开发和生产环境,使其成为 Java 项目中广泛使用的 ORM 工具。当你使用这个注解时,Spring Boot 会在指定的包路径下查找 MyBatis Mapper 接口,并为每个接口创建一个代理 Bean,这样你就可以在应用程序中通过注入的方式使用这些 Mapper。

m0_59112437的博客 739

MyBatis (一)——配置使用及其相对jdbc的优势所在

jdbc存在的问题:1、数据库连接的频繁创建、释放浪费资源进而影响系统性能。2、 sql代码写在 java文件当中,如果在开发过程中我们改动某个sql,就需要去修改java代码,改完之后还需要重新编译。3、 对结果集的解析也是硬编码,sql变化会导致解析结果的代码也跟着变化,系统不易维护......

qq_45830276的博客 274

JDBC、Mybatis原生、Mybatis Mapper的区别到底在哪儿

近日学习了Mybatis,大家都说Mybatis比JDBC简单,但我并不觉得JDBC复杂多少,都要下连接数据库、开连接、关连接、commit的代码,凭啥大家都说JDBC复杂呢? JDBC和Mybatis JDBC连接数据库代码出现在JAVA中,Mybatis连接数据库代码出现在xml中,配置有关的代码放在xml更集中管理,但此处代码量并无多大差异。 JDBC驼峰命名需要自己写,想尝试的可以去试试,我反正没写过。 JDBC中SQL语句出现在JAVA中,MybatisSQL语句出现在xml中,类似第一条。 最

qq_43164408的博客 765

JDBC与Mybatis区别

JDBC与Mybatis 1.JDBC是什么? java data base connectivity java数据库连接,是java连接数据库的标准,由sun公司提供的一组类和一组接口,由给个数据库厂商提供实现类 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WiUSB7dK-1596624067003)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1593584065073.png)]

三少 4529

从queryForList()看Spring JDBC的演进:为什么它比原生JDBC和MyBatis更香?

本文深入探讨了Spring JDBC的queryForList()方法如何简化数据库操作,相比原生JDBC和MyBatis更具优势。通过分析其设计哲学、技术演进及实际应用场景,展示了JdbcTemplate在资源管理、异常处理和代码简洁性方面的突破,为中小型项目提供了高效的持久层解决方案。

weixin_30372371的博客 622

JDBC Mybatis

SQL:insert into user(username,password,name,age) values ('zhouyu','123456','周瑜',20);1、XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)在yaml格式的配置文件中,如果配置项的值是以0开头的,需要使用''引起来,因为以0开头在yml中表示8进制的数据。默认情况下,在Mybatis中,SQL语句执行时,我们并看不到SQL语句的执行日志。

weixin_52342637的博客 899

JDBC和Mybatis

JDBC(Java Database Connectivity)是:Java平台的一部分一组用于数据库访问的接口和类基于X/Open SQL CLI(调用级接口)标准数据库厂商提供具体实现(驱动)半ORM框架:不像Hibernate完全屏蔽SQL,MyBatis让开发者可以灵活控制SQLSQL与代码分离:SQL写在XML或注解中,与Java代码解耦轻量级框架:核心jar包只有几百KB,学习曲线平缓MyBatis作为半自动化ORM框架,在SQL灵活性和开发效率之间取得了良好平衡。它:让开发者能。

sswwsm的博客 954
上一篇: [转载+补充] Typora 2025最新版破解方法 此方法非常简单,仅需修改部分文件内容即可 亲测有效;有.zip包
下一篇: 这是一份从 0 到 1 的「前端拖拽排序实现详解」——覆盖原理、数据结构、事件系统、碰撞算法、动画(FLIP)、自动滚动、可访问性(A11y)、移动端兼容(Pointer Events)、等
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值