配置数据库连接
#驱动类名称
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
MyBatis 是一个强大的 Java 数据持久化框架,可通过注解简化 SQL 操作。下面将详细介绍几个常用的 MyBatis 注解及其用法,包括@Mapper
、@Select
、@Insert
、@Options
、@Delete
、@Update
、@Results
和@ResultMap
。
@Mapper
注解用于标识一个接口为 MyBatis 的 Mapper 接口。该注解使 MyBatis 能够找到并生成实现类。
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
// 方法定义
}
@Select
注解用于定义 SQL 查询。可以在接口方法上直接指定查询语句。
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(int id);
}
@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);
}
@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);
}
@Delete
注解用于定义删除操作的 SQL 语句。
import org.apache.ibatis.annotations.Delete;
@Mapper
public interface UserMapper {
@Delete("DELETE FROM users WHERE id = #{id}")
void deleteUser(int id);
}
@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);
}
@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);
}
@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 getUsersOlderThan(int age);
}
使用 MyBatis 通过 XML 方式进行数据库操作是一个常见的模式。以下是通过 XML 配置 MyBatis 的基本步骤和示例,包括如何配置 MyBatis、映射 SQL 语句以及进行数据库操作的步骤。
如果你使用 Maven,可以在pom.xml
中添加 MyBatis 的依赖:
org.mybatis
mybatis
3.5.7
创建一个mybatis-config.xml
文件,用于 MyBatis 的全局配置。
创建一个 Mapper XML 文件,例如YourMapper.xml
,定义 SQL 语句和对应的映射。
INSERT INTO users (name, age) VALUES (#{name}, #{age})
创建一个与数据库表对应的实体类,例如User.java
:
package com.example.model;
public class User {
private int id;
private String name;
private int age;
// Getters and Setters
}
为了使用 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);
}
在你的主程序中,使用 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();
}
}
}
在 MyBatis 中,通过 XML 文件定义数据库字段和 Java 属性的映射是实现数据持久化的重要步骤。这个映射过程允许你将 SQL 结果集中的列与 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;
}
}
在 Mapper XML 文件中,使用resultMap
元素来定义 SQL 查询结果与 Java 对象字段之间的映射关系。下面是一个示例的UserMapper.xml
文件:
INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})
resultMap
: 用于定义一组映射规则,id
为映射的唯一标识符,type
指定要映射到的 Java 对象的全限定类名。id
和result
:
指定了主键的映射关系。property
对应 Java 对象的属性名,column
对应数据库表中的列名。
表示将数据库中username
列的值映射到 Java 对象的username
属性上。