目录
[DAO 接口(UserMapper.java)](#DAO 接口(UserMapper.java))
[使用 MyBatis](#使用 MyBatis)
MyBatis简介
MyBatis 是一个开源的持久化框架,用于简化数据库操作的开发。它提供了一种将 SQL 查询、插入、更新和删除等操作与 Java 对象之间的映射关系的方式,从而方便地进行数据持久化操作。
MyBatis 的核心理念是将 SQL 语句与 Java 代码解耦,通过 XML 或注解的配置方式,将 SQL 语句独立于代码之外,并通过映射文件或注解将查询结果映射到对应的 Java 对象上。
MyBatis使用流程
MyBatis 的使用流程一般包括以下几个步骤:
-
配置 MyBatis:首先需要配置 MyBatis,包括数据库连接信息、映射文件的路径等。可以通过 XML 配置文件或 Java 代码进行配置。
-
创建 SqlSessionFactory:根据配置信息创建一个 SqlSessionFactory 对象,SqlSessionFactory 是 MyBatis 的核心对象,用于创建 SqlSession。
-
定义映射文件:创建一个或多个映射文件,映射文件中定义了 SQL 语句与 Java 对象的映射关系,以及其他配置信息。
-
创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象,SqlSession 提供了操作数据库的方法,包括查询、插入、更新和删除等。
-
执行 SQL 操作:使用 SqlSession 调用相应的方法执行 SQL 操作。可以直接调用方法,也可以通过映射文件中定义的 SQL 语句进行操作。
-
处理结果:根据 SQL 操作的返回结果,进行相应的处理。MyBatis 会将查询结果映射为 Java 对象,通过对象返回给调用方。
-
关闭资源:在完成数据库操作后,需要关闭 SqlSession,释放相关资源。
示例:
配置文件(mybatis-config.xml)
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
映射文件(UserMapper.xml)
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
DAO 接口(UserMapper.java)
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
User getUserById(int id);
}
使用 MyBatis
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代理
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 的配置中心,用于定义 MyBatis 的全局配置信息、数据源信息、映射器、插件等。它是一个 XML 文件,通常命名为 mybatis-config.xml
MyBatis 核心配置文件包括以下几个部分:
-
configuration:MyBatis 根元素,包含了所有的配置信息。
-
settings:MyBatis 的全局配置项,包括缓存配置、日志配置、延迟加载配置、默认语句超时时间等。
-
typeAliases:类型别名配置,用于定义别名以便在映射文件中使用。
-
typeHandlers:类型处理器配置,用于将数据库中的数据类型转换为 Java 类型。
-
environments:环境配置,可以定义多个环境,每个环境包含一个数据源和一个事务管理器。
-
environment:单个环境定义,包含一个数据源和一个事务管理器。
-
transactionManager:事务管理器配置,用于控制事务。
-
dataSource:数据源配置,包含一些必须的属性,例如驱动类、连接 URL、用户名和密码等。
-
mappers:映射器配置,用于定义映射器的位置和加载方式。
-
mapper:单个映射器定义,可以通过 resource、url 或 class 属性指定映射器的位置或类文件。
MyBatis参数类型和传递
单个参数:
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集合中默认的键名,并使用修改后的名称来获取值,这样代码可读性更高。
CURD操作
查询操作
在 MyBatis 中进行查询操作主要涉及以下几个方面
-
查询所有 & 结果映射:
- 首先,在映射文件(Mapper.xml)中定义 SQL 语句,如 SELECT * FROM table_name。
- 在映射文件中配置结果映射,将查询结果映射为 Java 对象。可以使用 resultType 或 resultMap 进行结果映射配置。
-
单项查询:
- 在映射文件中定义具体的 SQL 查询语句,可使用 WHERE 子句和条件参数进行筛选。
- 使用 selectOne 方法执行查询,并传入查询参数。
-
条件查询:
- 在映射文件中定义带有条件的 SQL 查询语句,例如 SELECT * FROM table_name WHERE column = #{value}。
- 使用 selectList 方法执行查询,并传入查询参数。
-
动态条件查询:
- 在映射文件中使用
<where>
元素和<if>
元素实现动态条件查询。 <where>
元素用于包裹查询条件,可以根据条件动态拼接 WHERE 子句。<if>
元素用于判断条件是否满足,如果满足则拼接对应的查询条件。- 可以结合使用
<choose>
元素、<when>
元素和<otherwise>
元素实现多条件判断。
- 在映射文件中使用
注意结果映射中:
resultMap
中,column
和 property
是用于指定查询结果的列名和 Java 对象的属性名之间的映射关系。
column
:表示数据库表中的列名。它指定了查询结果集中的列,用于与 Java 对象的属性进行对应。property
:表示 Java 对象的属性名。它指定了将查询结果中的列值映射到 Java 对象中的哪个属性上。
通过在 resultMap
中定义多个 <result>
元素,可以实现对查询结果的不同列和 Java 对象属性之间的映射。
举例:
<resultMap id="userResultMap" type="com.example.model.User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="age" column="user_age"/>
<result property="email" column="user_email"/>
</resultMap>
添加操作
在 MyBatis 中进行增加操作,通常通过 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。
举例:
SQL 映射文件(UserMapper.xml)中定义插入操作的 SQL 语句
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO user (name, age, email) VALUES (#{name}, #{age}, #{email})
</insert>
</mapper>
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("john@example.com");
userMapper.insertUser(user);
修改操作
在 MyBatis 中进行修改操作与增加操作类似,同样需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。
举例:
SQL 映射文件(UserMapper.xml)中定义更新操作的 SQL 语句
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<update id="updateUser" parameterType="com.example.model.User">
UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id}
</update>
</mapper>
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("newemail@example.com");
userMapper.updateUser(user);
删除操作
在 MyBatis 中进行删除操作也需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。
举例:
SQL 映射文件(UserMapper.xml)中定义删除操作的 SQL 语句
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
DAO 接口(UserMapper.java)定义删除操作的方法
package com.example.mapper;
public interface UserMapper {
void deleteUser(int id);
}
在应用程序中调用 DAO 接口的删除方法
int userId = 1; // 根据需要删除的用户ID设置
userMapper.deleteUser(userId);