当前位置: 首页 > article >正文

【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis

mybatis 的常用配置

配置数据库连接

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root

打印⽇志 

#指定mybatis输出⽇志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

开启驼峰命名 

mybatis:
configuration:
map-underscore-to-camel-case: true #配置驼峰⾃动转换

MyBatis 的 XML ⽂件配置 

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

Spring 通过注解方式操作 mybatis 

MyBatis 是一个强大的 Java 数据持久化框架,可通过注解简化 SQL 操作。下面将详细介绍几个常用的 MyBatis 注解及其用法,包括 @Mapper@Select@Insert@Options@Delete@Update@Results 和 @ResultMap

1. @Mapper

@Mapper 注解用于标识一个接口为 MyBatis 的 Mapper 接口。该注解使 MyBatis 能够找到并生成实现类。

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    // 方法定义
}

2. @Select

@Select 注解用于定义 SQL 查询。可以在接口方法上直接指定查询语句。

import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper {
    
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(int id);
}

3. @Insert

@Insert 注解用于执行插入操作。与 @Select 类似,可以在方法上直接编写插入 SQL 语句。

import org.apache.ibatis.annotations.Insert;

@Mapper
public interface UserMapper {

    @Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
    void insertUser(User user);
}

4. @Options

@Options 注解用于配置执行 SQL 语句时的选项,比使用生成的主键值、指定更新用的 SQL 类型等。

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;

@Mapper
public interface UserMapper {

    @Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertUser(User user);
}

5. @Delete

@Delete 注解用于定义删除操作的 SQL 语句。

import org.apache.ibatis.annotations.Delete;

@Mapper
public interface UserMapper {

    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(int id);
}

6. @Update

@Update 注解用于定义更新操作的 SQL 语句。

import org.apache.ibatis.annotations.Update;

@Mapper
public interface UserMapper {

    @Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")
    void updateUser(User user);
}

7. @Results

@Results 注解用于定义查询结果的映射关系。通常与 @Select 一起使用,可以指定将 SQL 查询结果中的列映射到对象的属性。

import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM users WHERE id = #{id}")
    @Results({
        @Result(property = "name", column = "name"),
        @Result(property = "age", column = "age")
    })
    User getUserById(int id);
}

8. @ResultMap

@ResultMap 注解可以用来引用已定义的结果集映射。它提供了一种更灵活的方式来重用映射,特别是在多个查询中使用相同的结果映射时。

import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;

@Mapper
public interface UserMapper {

    @Results(id = "userResultMap", value = {
        @Result(property = "id", column = "id"),
        @Result(property = "name", column = "name"),
        @Result(property = "age", column = "age")
    })
    User getUserById(int id);

    @Select("SELECT * FROM users WHERE age > #{age}")
    @ResultMap("userResultMap")
    List<User> getUsersOlderThan(int age);
}

Spring 通过XML方式操作 mybatis

使用 MyBatis 通过 XML 方式进行数据库操作是一个常见的模式。以下是通过 XML 配置 MyBatis 的基本步骤和示例,包括如何配置 MyBatis、映射 SQL 语句以及进行数据库操作的步骤。

1. 添加 MyBatis 依赖

如果你使用 Maven,可以在 pom.xml 中添加 MyBatis 的依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version> <!-- 请根据需要选择版本 -->
</dependency>

2. 创建 MyBatis 配置文件

创建一个 mybatis-config.xml 文件,用于 MyBatis 的全局配置。

<?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/your_database"/>
                <property name="username" value="your_username"/>
                <property name="password" value="your_password"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="path/to/YourMapper.xml"/>
    </mappers>
</configuration>

3. 创建 Mapper XML 文件

创建一个 Mapper XML 文件,例如 YourMapper.xml,定义 SQL 语句和对应的映射。

<?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.YourMapper">

    <select id="selectUserById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

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

</mapper>

4. 创建实体类

创建一个与数据库表对应的实体类,例如 User.java

package com.example.model;

public class User {
    private int id;
    private String name;
    private int age;

    // Getters and Setters
}

5. 创建 Mapper 接口

为了使用 MyBatis 提供的方法,需要创建一个 Mapper 接口,例如 YourMapper.java

package com.example.mapper;

import com.example.model.User;
import java.util.List;

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

6. 使用 MyBatis 进行数据库操作

在你的主程序中,使用 SqlSessionFactory 和 SqlSession 来进行数据库操作。

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class Main {
    public static void main(String[] args) {
        try {
            // 读取 mybatis-config.xml 配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            
            // 获取 SqlSession
            try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
                YourMapper mapper = sqlSession.getMapper(YourMapper.class);

                // 插入用户
                User newUser = new User();
                newUser.setName("Alice");
                newUser.setAge(25);
                mapper.insertUser(newUser);
                sqlSession.commit(); // 提交事务

                // 查询用户
                User user = mapper.selectUserById(1);
                System.out.println(user.getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

定义数据库字段与Java属性的映射

在 MyBatis 中,通过 XML 文件定义数据库字段和 Java 属性的映射是实现数据持久化的重要步骤。这个映射过程允许你将 SQL 结果集中的列与 Java 对象的属性相对应,确保数据在两者之间正确转换。

1. 创建数据库表和 Java 实体类

假设有一个数据库表 users,其结构如下:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(100),
    password VARCHAR(100),
    email VARCHAR(100)
);

我们将创建一个与该表对应的 Java 实体类 User

package com.example.model;

public class User {
    private int id;
    private String username;
    private String password;
    private String email;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

2. 定义 Mapper XML 文件进行映射

在 Mapper XML 文件中,使用 resultMap 元素来定义 SQL 查询结果与 Java 对象字段之间的映射关系。下面是一个示例的 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.mapper.UserMapper">

    <!-- 定义结果映射 -->
    <resultMap id="userResultMap" type="com.example.model.User">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="email" column="email"/>
    </resultMap>

    <!-- 使用结果映射进行查询 -->
    <select id="selectUserById" resultMap="userResultMap">
        SELECT id, username, password, email FROM users WHERE id = #{id}
    </select>

    <!-- 插入用户 -->
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})
    </insert>

</mapper>

3. 解释映射的元素

  • resultMap: 用于定义一组映射规则,id 为映射的唯一标识符,type 指定要映射到的 Java 对象的全限定类名。
  • id 和 result:
    • <id property="id" column="id"/> 指定了主键的映射关系。property 对应 Java 对象的属性名,column 对应数据库表中的列名。
    • <result property="username" column="username"/> 表示将数据库中 username 列的值映射到 Java 对象的 username 属性上。

http://www.kler.cn/a/446094.html

相关文章:

  • RunCam WiFiLink连接手机图传测试
  • 部署开源大模型的硬件配置全面指南
  • 金碟中间件-AAS-V10.0安装
  • Word使用分隔符实现页面部分分栏
  • 【Apache Doris】周FAQ集锦:第 26 期
  • Vue3 的 Teleport 是什么?在什么场景下会用到?
  • react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由
  • [Unity Shader]【图形渲染】【游戏开发】 Unity Shader与原始Shader的区别
  • 电脑除尘更换cpu和显卡硅脂过程及安装win11系统中遇到的问题
  • Django 中的 reverse 【反向/逆转/扭转/逆向】使用详解以及使用案例
  • C# 模式匹配
  • C++打小怪游戏
  • Dhatim FastExcel 读写 Excel 文件
  • MFC/C++学习系列之简单记录3——不同IDE版本和MSFlexGrid的使用
  • java 根据路径下载文件转换为MultipartFile,并且上传到服务器
  • ttf字体文件转化为pf2字体文件
  • 使用 Django 和 AWS ECR 实现容器化应用的管理
  • Qt创建自定义Help文档步骤
  • FFmpeg 安装教程(Windows 系统)
  • 【Mysql】函数有哪些
  • 深度学习模型中增加随机性可以通过多种方式实现,以下是一些可以应用到你的 `TCNAttentionLSTM`
  • 【路径规划】原理及实现
  • ESXi安装【真机和虚拟机】(超详细)
  • 重拾设计模式--状态模式
  • 网络安全概论——虚拟专网VPN技术
  • leetcode:2824. 统计和小于目标的下标对数目(python3解法)