mybatis Mapper的概念与实战

简介: MyBatis 是一个流行的 Java 持久层框架,它提供了对象关系映射(ORM)的功能,使得Java对象和数据库中的表之间的映射变得简单。在MyBatis中,Mapper是一个核心的概念,它定义了映射到数据库操作的接口。简而言之,Mapper 是一个接口,MyBatis 通过这个接口与XML映射文件或者注解绑定,以实现对数据库的操作。

MyBatis 是一个流行的 Java 持久层框架,它提供了对象关系映射(ORM)的功能,使得Java对象和数据库中的表之间的映射变得简单。在MyBatis中,Mapper是一个核心的概念,它定义了映射到数据库操作的接口。简而言之,Mapper 是一个接口,MyBatis 通过这个接口与XML映射文件或者注解绑定,以实现对数据库的操作。

Mapper的含义

  • 数据库操作的映射:Mapper提供了一种映射机制,允许开发者在XML文件或接口的注解中定义SQL语句,然后通过接口方法直接调用这些SQL语句。这样,Java代码就与SQL语句解耦了,提高了代码的可维护性和可读性。
  • 接口绑定:Mapper通常是一个接口,每一个Mapper接口对应数据库中的一个表或者一组相关操作。MyBatis 在启动时会自动扫描这些接口,并通过动态代理技术生成这些接口的实现类,开发者通过调用这些接口方法就可以执行相应的SQL语句。

Mapper的作用

  1. 简化数据库操作:开发者无需编写具体的JDBC代码,只需要定义接口方法和对应的SQL映射即可直接操作数据库。
  2. 提升开发效率:Mapper的使用大大减少了数据库操作代码的重复编写工作,让开发者可以将更多的精力集中在业务逻辑上。
  3. 保障SQL和Java代码的分离:将SQL语句写在XML文件或通过注解与接口方法绑定,实现了SQL语句与Java代码的物理分离,提升了代码的可读性和可维护性。

Mapper的实现

MyBatis 支持两种方式来实现Mapper:

  • XML映射文件:最传统的方式,开发者在XML文件中定义Mapper接口的命名空间和对应的SQL语句,然后在接口中定义相应的方法。MyBatis 通过读取这些XML文件,自动将接口方法和SQL语句绑定。
  • 注解:为简化开发,MyBatis 也支持在Mapper接口的方法上直接使用注解来定义SQL语句,这样可以不需要编写XML映射文件。但是,对于复杂的SQL语句,使用注解方式可能会使接口方法变得较为混乱。

综上所述,MyBatis 的 Mapper 是实现ORM功能的关键,它通过简单的接口绑定机制,让数据库操作变得更加直观和便捷。


为了演示在实战中如何使用MyBatis的Mapper,我们将通过一个简单的例子:一个用户信息管理系统,来展示如何定义一个UserMapper接口,使用XML映射文件来编写SQL语句,并通过这个接口来执行数据库操作。

步骤1:创建数据库和表

首先,你需要一个数据库表来存储用户信息。下面是一个简单的SQL脚本来创建这样一个表:

sql复制代码CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(50) NOT NULL,    email VARCHAR(50) NOT NULL,    password VARCHAR(50) NOT NULL);

复制

步骤2:创建MyBatis配置文件

在你的项目资源目录(例如src/main/resources)中,创建MyBatis的全局配置文件mybatis-config.xml

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.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/>                <property name="username" value="root"/>                <property name="password" value="password"/>            </dataSource>        </environment>    </environments>     <mappers>        <mapper resource="mappers/UserMapper.xml"/>    </mappers></configuration>

复制

请确保数据库URL、用户名和密码与你的设置相匹配。

步骤3:定义Mapper接口

在你的项目源代码目录(例如src/main/java)中,创建一个新的Java接口UserMapper.java

java复制代码package com.example.mapper;import com.example.model.User;import java.util.List;public interface UserMapper {    User selectUserById(Integer id);    List<User> selectAllUsers();    void insertUser(User user);    void updateUser(User user);    void deleteUser(Integer id);}

复制

步骤4:创建XML映射文件

在你的资源目录中(与mybatis-config.xml相同的目录),创建一个新的XML文件mappers/UserMapper.xml

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.mapper.UserMapper">    <select id="selectUserById" resultType="com.example.model.User">        SELECT * FROM users WHERE id = #{id}    </select>     <!-- Add more SQL mappings here --></mapper>

复制

这个文件定义了一个与UserMapper接口绑定的SQL查询。你需要根据接口中定义的方法来添加更多的SQL映射。

步骤5:使用Mapper

最后,你可以在你的应用程序中通过MyBatis的SqlSession来使用UserMapper接口:

java复制代码try (SqlSession session = sqlSessionFactory.openSession()) {    UserMapper mapper = session.getMapper(UserMapper.class);    User user = mapper.selectUserById(1);    System.out.println(user.getUsername());    // 更多操作...}

复制

请注意,这只是一个基本示例,旨在展示如何设置和使用MyBatis的Mapper。在实际项目中,你可能需要更复杂的SQL语句、事务管理等。此外,对于更简洁的配置,MyBatis也支持注解方式来定义SQL映射,而不是使用XML文件。


相关文章
|
2月前
|
Java 数据库连接 Maven
使用mybatis插件generator生成实体类,dao层和mapper映射
使用mybatis插件generator生成实体类,dao层和mapper映射
55 0
|
4月前
|
SQL Java 数据库连接
mybatis常见分页技术和自定义分页原理实战
mybatis常见分页技术和自定义分页原理实战
|
3月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
204 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
18天前
|
SQL Java 数据库连接
MyBatis精髓揭秘:Mapper代理实现的黑盒探索
MyBatis精髓揭秘:Mapper代理实现的黑盒探索
22 1
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
4月前
|
Java 数据库连接 mybatis
|
4月前
|
Java 数据库连接 微服务
Java程序员必学知识:高并发+微服务+数据结构+Mybatis实战实践
BATJ最全架构技术合集:高并发+微服务+数据结构+SpringBoot 关于一线互联网大厂网站的一些特点:用户多,分布广泛、大流量,高并发、海量数据,服务高可用、安全环境恶劣,易受网络攻击、功能多,变更快,频繁发布、从小到大,渐进发展、以用户为中心。 如果你工作中够仔细,你会发现这些特点跟高并发、分布式、微服务、Nginx这些技术密切相关的,是因为只要你的公司在上升,用户量级都会与日俱增,高性能、高并发的问题自然避免不了,话不多说往下看。
|
4月前
|
SQL 存储 Java
MyBatis【付诸实践 02】 mapper文件未编译+statementType使用+返回结果字段顺序不一致+获取自增ID+一个update标签批量更新记录
MyBatis【付诸实践 02】 mapper文件未编译+statementType使用+返回结果字段顺序不一致+获取自增ID+一个update标签批量更新记录
36 0
|
4月前
|
SQL IDE Java
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
60 0