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文件。


相关文章
|
22天前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
27 10
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
132 0
|
3月前
|
XML Java 数据库连接
Mybatis 模块拆份带来的 Mapper 扫描问题
Mybatis 模块拆份带来的 Mapper 扫描问题
43 0
|
4月前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
|
4月前
|
Java 数据库连接 Maven
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
|
5月前
|
SQL Java 数据库连接
Mybatis如何使用mapper代理开发
Mybatis如何使用mapper代理开发
|
5月前
|
XML 关系型数据库 数据库
使用mybatis-generator插件生成postgresql数据库model、mapper、xml
使用mybatis-generator插件生成postgresql数据库model、mapper、xml
462 0
|
5月前
|
SQL Java 数据库连接
Mybatis中一对多mapper配置
Mybatis中一对多mapper配置