目录
MyBatis简介
MyBatis使用流程
配置文件(mybatis-config.xml)
映射文件(UserMapper.xml)
DAO 接口(UserMapper.java)
使用 MyBatis
Mapper代理
MyBatis核心配置文件
MyBatis参数类型和传递
单个参数:
多个参数:
建议:
CURD操作
查询操作
添加操作
修改操作
删除操作
MyBatis 是一个开源的持久化框架,用于简化数据库操作的开发。它提供了一种将 SQL 查询、插入、更新和删除等操作与 Java 对象之间的映射关系的方式,从而方便地进行数据持久化操作。
MyBatis 的核心理念是将 SQL 语句与 Java 代码解耦,通过 XML 或注解的配置方式,将 SQL 语句独立于代码之外,并通过映射文件或注解将查询结果映射到对应的 Java 对象上。
MyBatis 的使用流程一般包括以下几个步骤:
配置 MyBatis:首先需要配置 MyBatis,包括数据库连接信息、映射文件的路径等。可以通过 XML 配置文件或 Java 代码进行配置。
创建 SqlSessionFactory:根据配置信息创建一个 SqlSessionFactory 对象,SqlSessionFactory 是 MyBatis 的核心对象,用于创建 SqlSession。
定义映射文件:创建一个或多个映射文件,映射文件中定义了 SQL 语句与 Java 对象的映射关系,以及其他配置信息。
创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象,SqlSession 提供了操作数据库的方法,包括查询、插入、更新和删除等。
执行 SQL 操作:使用 SqlSession 调用相应的方法执行 SQL 操作。可以直接调用方法,也可以通过映射文件中定义的 SQL 语句进行操作。
处理结果:根据 SQL 操作的返回结果,进行相应的处理。MyBatis 会将查询结果映射为 Java 对象,通过对象返回给调用方。
关闭资源:在完成数据库操作后,需要关闭 SqlSession,释放相关资源。
示例:
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
User getUserById(int id);
}
import com.example.mapper.UserMapper;
import com.example.model.User;
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.InputStream;
public class MyBatisExample {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Mapper 代理开发是 MyBatis 中一种便捷的数据库操作方式,它通过动态代理技术自动生成 DAO(Data Access Object)接口的实现类。开发人员只需编写接口,并在 XML 配置文件中定义 SQL 映射关系,无需编写具体的实现类,就可以直接调用 DAO 接口中定义的方法进行数据库操作。
具体使用:
1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
4.编码:①通过SqlSession的getMapper方法获取Mapper接口的代理对象 ②调用对应方法完成sql的执行
MyBatis 核心配置文件是 MyBatis 的配置中心,用于定义 MyBatis 的全局配置信息、数据源信息、映射器、插件等。它是一个 XML 文件,通常命名为 mybatis-config.xml
MyBatis 核心配置文件包括以下几个部分:
configuration:MyBatis 根元素,包含了所有的配置信息。
settings:MyBatis 的全局配置项,包括缓存配置、日志配置、延迟加载配置、默认语句超时时间等。
typeAliases:类型别名配置,用于定义别名以便在映射文件中使用。
typeHandlers:类型处理器配置,用于将数据库中的数据类型转换为 Java 类型。
environments:环境配置,可以定义多个环境,每个环境包含一个数据源和一个事务管理器。
environment:单个环境定义,包含一个数据源和一个事务管理器。
transactionManager:事务管理器配置,用于控制事务。
dataSource:数据源配置,包含一些必须的属性,例如驱动类、连接 URL、用户名和密码等。
mappers:映射器配置,用于定义映射器的位置和加载方式。
mapper:单个映射器定义,可以通过 resource、url 或 class 属性指定映射器的位置或类文件。
1.POJO类型:直接使用,实体类属性名和参数占位符名称一致
2.Map集合:直接使用,键名和参数占位符名称一致
3.Collection:封装为Map集合
map.put("collection",collection集合);
map.put("arg0",collection集合);
4.List:封装为Map集合
map.put("collection",list集合);
map.put("list",list集合);
map.put("arg0",list集合);
5.Array:封装为Map集合
map.put("array",数组);
map.put("arg0",数组);
6.其他类型:直接使用
封装为Map集合
map.put("arg0",参数值1);
map.put("param1",参数值1);
map.put("arg1",参数值2);
map.put("param2",参数值2);
使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样代码可读性更高。
在 MyBatis 中进行查询操作主要涉及以下几个方面
查询所有 & 结果映射:
单项查询:
条件查询:
动态条件查询:
元素和
元素实现动态条件查询。
元素用于包裹查询条件,可以根据条件动态拼接 WHERE 子句。
元素用于判断条件是否满足,如果满足则拼接对应的查询条件。
元素、
元素和
元素实现多条件判断。注意结果映射中:
resultMap
中,column
和 property
是用于指定查询结果的列名和 Java 对象的属性名之间的映射关系。
column
:表示数据库表中的列名。它指定了查询结果集中的列,用于与 Java 对象的属性进行对应。property
:表示 Java 对象的属性名。它指定了将查询结果中的列值映射到 Java 对象中的哪个属性上。通过在 resultMap
中定义多个
元素,可以实现对查询结果的不同列和 Java 对象属性之间的映射。
举例:
在 MyBatis 中进行增加操作,通常通过 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。
举例:
SQL 映射文件(UserMapper.xml)中定义插入操作的 SQL 语句
INSERT INTO user (name, age, email) VALUES (#{name}, #{age}, #{email})
DAO 接口(UserMapper.java)定义插入操作的方法
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
void insertUser(User user);
}
在应用程序中调用 DAO 接口的插入方法
User user = new User();
user.setName("John");
user.setAge(25);
user.setEmail("[email protected]");
userMapper.insertUser(user);
在 MyBatis 中进行修改操作与增加操作类似,同样需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。
举例:
SQL 映射文件(UserMapper.xml)中定义更新操作的 SQL 语句
UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id}
DAO 接口(UserMapper.java)定义更新操作的方法
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
void updateUser(User user);
}
在应用程序中调用 DAO 接口的更新方法
User user = new User();
user.setId(1); // 根据需要更新的用户ID设置
user.setName("John Doe");
user.setAge(30);
user.setEmail("[email protected]");
userMapper.updateUser(user);
在 MyBatis 中进行删除操作也需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。
举例:
SQL 映射文件(UserMapper.xml)中定义删除操作的 SQL 语句
DELETE FROM user WHERE id = #{id}
DAO 接口(UserMapper.java)定义删除操作的方法
package com.example.mapper;
public interface UserMapper {
void deleteUser(int id);
}
在应用程序中调用 DAO 接口的删除方法
int userId = 1; // 根据需要删除的用户ID设置
userMapper.deleteUser(userId);