第3课_映射文件基础
热度🔥:65 免费课程
授课语音
学习MyBatis映射文件的编写与配置
MyBatis是一个持久化框架,旨在简化数据库操作,并通过XML或注解映射SQL语句与Java对象之间的关系。在MyBatis中,映射文件用于配置SQL语句和Java对象之间的映射关系。本节将介绍如何编写和配置MyBatis映射文件。
1. MyBatis映射文件的作用
MyBatis映射文件(Mapper XML文件)是MyBatis中非常重要的组成部分,主要用于配置SQL语句、SQL语句与Java对象之间的映射关系以及输入输出参数的处理。
- SQL语句映射:将SQL语句与Java方法关联起来。
- 参数映射:将Java方法的参数映射到SQL语句的占位符中。
- 结果映射:将SQL查询结果映射为Java对象。
1.1 映射文件的结构
映射文件通常由<mapper>
根元素开始,其中包含多个<select>
, <insert>
, <update>
, <delete>
等SQL操作标签。每个SQL操作都关联一个Java方法,并通过id
属性进行标识。
2. MyBatis映射文件的基本编写
MyBatis映射文件通常包含以下部分:
mapper
:根元素,定义映射文件。select
:执行查询操作。insert
:执行插入操作。update
:执行更新操作。delete
:执行删除操作。
2.1 编写基本的Mapper XML文件
2.1.1 映射文件结构
<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.example.mapper.UserMapper">
<!-- 查询用户信息 -->
<select id="selectUser" 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>
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="com.example.model.User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
代码解释:
namespace
属性指定映射文件对应的Java接口的全限定类名。<select>
,<insert>
,<update>
,<delete>
标签用于定义SQL操作,id
属性与Java方法进行映射。parameterType
属性指定传入参数的Java类型,resultType
属性指定返回结果的Java类型。
3. MyBatis配置文件的编写
除了映射文件,MyBatis还需要一个配置文件(mybatis-config.xml
),用于配置MyBatis的全局设置和与数据库的连接信息。
3.1 MyBatis配置文件示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 数据源配置 -->
<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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<!-- Mapper映射文件 -->
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
代码解释:
environment
标签定义了事务管理器和数据源类型。POOLED
表示使用连接池。dataSource
中配置了数据库连接的驱动、URL、用户名和密码。mappers
标签中指定了映射文件的位置,可以使用resource
属性加载XML映射文件。
4. MyBatis的参数和结果映射
MyBatis支持将Java对象作为输入参数传递给SQL语句,也支持将查询结果映射到Java对象。参数和结果的映射是通过#{}
和${}
表达式来实现的。
4.1 参数映射
MyBatis允许通过#{}
语法将Java方法的参数传递到SQL语句中。例如,在<select>
语句中,可以使用#{}
来引用传入的方法参数。
<select id="selectUser" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
代码解释:
parameterType="int"
:指定传入参数的类型为int
。#{id}
:将传入的id
参数映射到SQL查询语句中的id
字段。
4.2 结果映射
MyBatis根据查询结果的列名自动将其映射为Java对象的属性。例如,查询结果中的id
列会自动映射到User
对象的id
属性。
<select id="selectUser" resultType="com.example.model.User">
SELECT id, name, age FROM users WHERE id = #{id}
</select>
代码解释:
resultType="com.example.model.User"
:指定查询结果的类型为User
对象,MyBatis会根据查询结果的列名自动映射到User
对象的属性。
5. 完整的代码示例
以下是一个完整的示例,演示如何使用MyBatis进行数据库操作:
5.1 UserMapper接口
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
// 查询用户
User selectUser(int id);
// 插入用户
void insertUser(User user);
// 更新用户
void updateUser(User user);
// 删除用户
void deleteUser(int id);
}
5.2 User类
package com.example.model;
public class User {
private int id;
private String name;
private int age;
// Getter和Setter方法省略
}
5.3 MyBatis的Main类
package com.example;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisExample {
public static void main(String[] args) {
// 获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(MyBatisExample.class.getResourceAsStream("/mybatis-config.xml"));
// 获取SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
// 获取UserMapper接口的代理对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 查询用户
User user = userMapper.selectUser(1);
System.out.println("用户信息:" + user);
// 插入新用户
User newUser = new User();
newUser.setName("John");
newUser.setAge(30);
userMapper.insertUser(newUser);
// 提交事务
session.commit();
}
}
}
6. 总结
- MyBatis映射文件:用于配置SQL语句和Java对象的映射关系,通过
<select>
,<insert>
,<update>
,<delete>
标签定义SQL操作。 - 参数和结果映射:通过
#{}
语法传递参数,通过resultType
或resultMap
将查询结果映射为Java对象。 - 配置文件:MyBatis的
mybatis-config.xml
配置文件定义了数据源、事务管理以及映射文件的位置。
通过使用MyBatis,我们能够更加简洁、安全地执行数据库操作,并且通过映射文件实现Java对象与SQL语句之间的高效映射。