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

news/2025/1/22 1:56:00/

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 能够找到并生成实现类。

java">import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {// 方法定义
}

2. @Select

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

java">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 语句。

java">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 类型等。

java">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 语句。

java">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 语句。

java">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 查询结果中的列映射到对象的属性。

java">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 注解可以用来引用已定义的结果集映射。它提供了一种更灵活的方式来重用映射,特别是在多个查询中使用相同的结果映射时。

java">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 语句以及进行数据库操作的步骤。

mybatis-依赖">1. 添加 MyBatis 依赖

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

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

mybatis-配置文件">2. 创建 MyBatis 配置文件

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

java"><?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 语句和对应的映射。

java"><?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

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

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);
}

mybatis-进行数据库操作">6. 使用 MyBatis 进行数据库操作

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

java">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);// 获取 SqlSessiontry (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 对象的属性相对应,确保数据在两者之间正确转换。

数据库表和-java-实体类">1. 创建数据库表和 Java 实体类

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

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

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

java">package com.example.model;public class User {private int id;private String username;private String password;private String email;// Getters and Setterspublic 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 文件:

java"><?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.ppmy.cn/news/1565103.html

相关文章

2024最新版本idea SpringBoot创建web项目(详细介绍如何搭建和配置spring boot web,以及写出一个简单的前后端交互界面)

1.创建springboot项目: 新建项目 -> Spring Boot ->自定义写你的项目名称、项目位置等、语言java、类型选择maven&#xff0c;最后选择JDK版本&#xff0c;这里推荐17以上&#xff0c;对应Java也一样&#xff0c;最后选jar包 -> next 首先选择springboot版本&#xff…

蓝桥杯 单词重排

问题描述 解题思路 这个问题可以通过计算排列数来解决。由于字符串 "LANQIAO" 由7个不同的字母组成&#xff0c;我们可以使用排列公式 P(n,n)n! 来计算&#xff0c;其中 n 是字母的数量。但是&#xff0c;由于字符串中存在重复的字母&#xff0c;我们需要对重复的字…

人工智能核心知识:AI Agent的四种关键设计模式

导读&#xff1a;AI Agent是指能够在特定环境中自主执行任务的人工智能系统&#xff0c;不仅接收任务&#xff0c;还自主制定和执行工作计划&#xff0c;并在过程中不断自我评估和调整&#xff0c;类似于人类在创造性任务中的思考和修正过程。AI Agent的四种关键设计模式是实现…

C 语言雏启:擘画代码乾坤,谛观编程奥宇之初瞰

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一课主要是让大家初步了解C语言&#xff0c;了解我们的开发环境&#xff0c;main函数&#xff0c;库…

怎样使用树莓派自己搭建一套ADS-B信号接收系统

0 我们知道&#xff0c;ADS-B全称广播式自动相关监视系统&#xff0c;其实就是飞机发出的广播信号&#xff0c;用明码来对外发送自己的位置、高度、速度、航向等信息&#xff0c;是公开信息。连续接收到一架飞机发出的ADS-B信息后&#xff0c;可以通过其坐标点来描绘出飞机的航…

为什么相关性不是因果关系?人工智能中的因果推理探秘

目录 一、背景 &#xff08;一&#xff09;聚焦当下人工智能 &#xff08;二&#xff09;基于关联框架的人工智能 &#xff08;三&#xff09;基于因果框架的人工智能 二、因果推理的基本理论 &#xff08;一&#xff09;因果推理基本范式&#xff1a;因果模型&#xff0…

麒麟v10 安装php5.6

1.麒麟v10 安装php5.6 1.修改仓库 #有网络的&#xff0c;加DNS就行 #添加访问互联路由 cat > /etc/resolv.conf <<EOF nameserver 114.114.114.114 nameserver 223.5.5.5 nameserver 8.8.8.8 EOFcat /etc/resolv.conf#没有网络的使用本地镜像 mkdir -p /etc/yum.repo…

第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)

1.ThreadGroup 与 Thread 在Java程序中&#xff0c; 默认情况下&#xff0c; 新的线程都会被加入到main线程所在的group中&#xff0c; main线程的group名字同线程名。如同线程存在父子关系一样&#xff0c; Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…