Mybatis简介与基本配置
发布时间: 2024-03-28 15:47:17 阅读量: 6 订阅数: 17
# 1. Mybatis简介
Mybatis 是一款优秀的持久层框架,它是支持自定义 SQL、存储过程以及高级映射的优秀持久层框架。与 Hibernate 等 ORM 框架不同,Mybatis 不会做过多的封装,SQL 语句直接编写在 XML 文件中,使开发者可以更灵活地控制 SQL 语句的执行过程。接下来,我们将深入了解 Mybatis 的优点、特点以及和其他 ORM 框架的比较。
# 2. Mybatis的核心组件
Mybatis作为一个优秀的持久层框架,其核心组件包括SqlSessionFactory、SqlSession和Mapper接口。接下来我们将逐一介绍它们的作用和使用方法。
# 3. Mybatis的基本配置
在使用Mybatis进行数据持久化操作之前,我们需要进行一些基本的配置。接下来,我们将详细介绍Mybatis的基本配置内容。
#### 3.1 配置文件详解
Mybatis的配置主要通过一个XML文件进行,通常命名为`mybatis-config.xml`。在该配置文件中,我们可以进行数据库连接信息、插件配置、别名设置等各种配置,保证Mybatis可以正常运行。
```xml
<?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/mybatis_db"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
```
#### 3.2 数据源配置
在配置文件中,我们需要指定数据源的相关信息,包括数据库的驱动名、连接地址、用户名和密码等。这些信息将在Mybatis运行时被使用,确保能够正确连接数据库。
#### 3.3 日志配置
Mybatis支持不同级别的日志输出,可以帮助我们在调试时更轻松地理解Mybatis的运行情况。通过配置日志输出级别,我们可以控制日志的详细程度。
#### 3.4 缓存配置
Mybatis内置了缓存机制,可以提高查询性能。在配置文件中,我们可以对缓存进行相关设置,包括缓存的类型、缓存的大小等。
#### 3.5 编写Mapper接口及XML映射文件
最后一步是编写Mapper接口及对应的XML映射文件,定义SQL语句的映射关系。在Mapper接口中定义SQL方法,在XML映射文件中配置SQL语句及结果集的映射。
通过以上基本配置,我们可以开始使用Mybatis进行数据持久化操作。在接下来的章节中,我们将介绍如何执行CRUD操作,以及一些高级配置的内容。
# 4. Mybatis的CRUD操作
在Mybatis中,CRUD操作是我们经常会用到的功能,本章将介绍如何使用Mybatis进行查询、插入、更新和删除操作。
### 4.1 查询操作
在Mybatis中,查询操作是最常见的操作之一。我们可以通过编写SQL语句或使用Mybatis提供的动态SQL来完成查询操作。下面是一个简单的查询示例:
```java
// 定义Mapper接口
public interface UserMapper {
User selectUserById(int id);
}
// 对应的XML映射文件
<select id="selectUserById" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
// 在代码中调用查询操作
User user = sqlSession.selectOne("UserMapper.selectUserById", 1);
```
### 4.2 插入操作
插入操作用于向数据库中插入新的数据。我们可以通过Mapper接口定义插入操作,然后在对应的XML映射文件中编写SQL语句。以下是一个插入操作的示例:
```java
// 定义Mapper接口
public interface UserMapper {
void insertUser(User user);
}
// 对应的XML映射文件
<insert id="insertUser" parameterType="User">
INSERT INTO users(name, age) VALUES (#{name}, #{age})
</insert>
// 在代码中调用插入操作
User user = new User("Alice", 25);
sqlSession.insert("UserMapper.insertUser", user);
sqlSession.commit();
```
### 4.3 更新操作
更新操作用于修改数据库中已有数据的内容。我们可以通过Mapper接口定义更新操作,然后在XML映射文件中编写相应的SQL语句。以下是一个更新操作的示例:
```java
// 定义Mapper接口
public interface UserMapper {
void updateUser(User user);
}
// 对应的XML映射文件
<update id="updateUser" parameterType="User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
// 在代码中调用更新操作
User user = new User(1, "Bob", 30);
sqlSession.update("UserMapper.updateUser", user);
sqlSession.commit();
```
### 4.4 删除操作
删除操作用于从数据库中删除指定的数据记录。我们同样可以通过Mapper接口定义删除操作,并在XML映射文件中编写相应的SQL语句。以下是一个删除操作的示例:
```java
// 定义Mapper接口
public interface UserMapper {
void deleteUserById(int id);
}
// 对应的XML映射文件
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
// 在代码中调用删除操作
sqlSession.delete("UserMapper.deleteUserById", 1);
sqlSession.commit();
```
通过上述示例,我们可以了解到如何在Mybatis中进行CRUD操作,并且灵活运用Mapper接口和XML映射文件来实现数据库操作。
# 5. Mybatis高级配置
在这一章节中,我们将介绍Mybatis的高级配置,包括动态SQL、参数映射、结果集映射以及批量操作等内容。
### 5.1 动态SQL
动态SQL是指根据不同的条件生成不同的SQL语句,Mybatis提供了丰富的标签来实现动态SQL,例如if、choose、when、otherwise、foreach等。
#### 示例:
```java
// Mapper XML文件
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="status != null">
AND status = #{status}
</if>
</where>
</select>
```
### 5.2 参数映射
Mybatis支持将Java对象与SQL参数进行映射,可以通过parameterType属性指定Java对象的类型,并通过#{属性名}的方式引用Java对象的属性。
#### 示例:
```java
// Java对象
public class User {
private Long id;
private String username;
// getter and setter
}
// Mapper XML文件
<insert id="insertUser" parameterType="User">
INSERT INTO users (id, username)
VALUES (#{id}, #{username})
</insert>
```
### 5.3 结果集映射
Mybatis支持将SQL查询结果映射到Java对象上,可以通过resultType或resultMap属性指定映射的Java对象类型。
#### 示例:
```java
// Java对象
public class User {
private Long id;
private String username;
// getter and setter
}
// Mapper XML文件
<select id="selectUserById" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
```
### 5.4 批量操作
Mybatis支持批量插入、更新和删除操作,可以通过<foreach>标签实现批量操作。
#### 示例:
```java
// Mapper XML文件
<insert id="insertUsers" parameterType="list">
INSERT INTO users (id, username) VALUES
<foreach collection="list" item="user" separator=",">
(#{user.id}, #{user.username})
</foreach>
</insert>
```
通过学习Mybatis的高级配置,可以更灵活地应对实际开发中的复杂场景,提高开发效率和代码质量。
# 6. Mybatis与Spring集成及实例
在本章中,我们将介绍如何将Mybatis与Spring集成,并通过一个实例来演示整合的过程和使用方式。
#### 6.1 配置Spring与Mybatis整合
首先,我们需要添加相关的依赖,比如Mybatis和Spring的依赖,以及Mybatis和Spring整合的插件。接着,在Spring的配置文件中配置数据源、SqlSessionFactory以及MapperScannerConfigurer等Bean。具体配置如下:
```java
<!-- 数据源配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- SqlSessionFactory配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
</bean>
<!-- 配置Mapper接口扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao" />
</bean>
```
#### 6.2 编写基于Mybatis的DAO
接下来,我们需要编写基于Mybatis的DAO接口,定义数据访问方法,并编写对应的Mapper XML映射文件。下面是一个简单的示例:
```java
// UserDao接口
public interface UserDao {
User getUserById(int id);
void addUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
// UserDao的Mapper XML映射文件
<mapper namespace="com.example.dao.UserDao">
<select id="getUserById" resultType="User" parameterType="int">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="addUser" parameterType="User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<update id="updateUser" parameterType="User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
```
#### 6.3 通过Spring进行事务管理
在Spring中,可以通过@Transactional注解来实现事务管理,保证数据操作的一致性。比如以下示例:
```java
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void updateUserAndAddUser(User user1, User user2) {
userDao.updateUser(user1);
userDao.addUser(user2);
}
}
```
通过以上配置和代码示例,我们实现了Mybatis与Spring的整合,并完成了一个简单的数据访问操作和事务管理。这样的整合方式可以更好地利用Mybatis和Spring各自的优势,提高开发效率和代码质量。
0
0