MyBatis 是一个优秀的持久层框架,支持自定义 SQL 查询、存储过程和高级映射,旨在简化 Java 应用中的数据库操作。它具有简单易用、强大的映射功能以及良好的扩展性和兼容性,适用于需要灵活控制 SQL 语句和频繁进行数据库操作的场景。
MyBatis简介MyBatis 是一个优秀的持久层框架,它支持自定义 SQL 查询,存储过程以及高级映射。MyBatis 的设计目标是降低 JDBC 开发中的重复性代码,使得开发人员可以更加关注于 SQL 语句的编写和应用程序的逻辑实现。
MyBatis的特点和优势- 简单易用:MyBatis 的配置和映射文件非常简洁,易于理解和上手。
- 基于SQL的动态性:MyBatis 支持动态 SQL 语句,可以根据不同的业务需求生成不同的 SQL 语句。
- 强大的映射:MyBatis 能够将 Java 方法映射到 SQL 语句,使得 SQL 语句的处理更加方便。
- 支持多种数据库:MyBatis 支持多种主流的数据库,如 MySQL、Oracle、SQL Server 等。
- 易于扩展:MyBatis 提供了插件机制,用户可以根据需要扩展其功能。
- 兼容多种持久化框架:MyBatis 可以与 Spring、Hibernate 等框架无缝集成。
- 需要灵活控制 SQL 语句的场景。
- 需要频繁进行数据库操作的场景。
- 需要简化数据库操作的场景。
你可以从 MyBatis 的官方网站下载 MyBatis 的最新版本。下载完成后,解压文件,可以开始使用 MyBatis。
创建MyBatis项目在本节中,我们将使用 IntelliJ IDEA 创建一个新的 Maven 项目。以下是创建步骤:
- 打开 IntelliJ IDEA,选择
File > New > Project
。 - 在 Project SDK 中选择你的 JDK 版本。
- 在左侧列表中选择
Maven
,然后点击Next
。 - 在
GroupId
和ArtifactId
位置填入相关信息,例如GroupId
为com.example
,ArtifactId
为mybatis-demo
,然后点击Next
。 - 点击
Finish
完成创建项目。
在 src/main/resources
目录下创建 mybatis-config.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.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapping/UserMapper.xml"/>
</mappers>
</configuration>
配置pom.xml
在 src/main/resources
目录下的 pom.xml
文件中,添加 MyBatis 和数据库驱动的依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
MyBatis基本概念
SqlSessionFactory和SqlSession
SqlSessionFactory 是 MyBatis 的核心接口之一,它是线程安全的,可以安全地存储和复用。SqlSessionFactory 由 SqlSessionFactoryBuilder 创建,配置文件中的每一个 <mapper>
都映射为一个 SqlSession。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
映射文件(Mapper XML文件)
映射文件定义了 SQL 语句和 Java 方法的映射关系。映射文件通常放在 src/main/resources
目录下。下面是一个简单的映射文件示例:
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
实体类和结果映射
实体类通常表示数据库表中的记录,每个实体类与表中的字段相对应。结果映射描述了如何将数据库中的数据映射到 Java 对象中。
public class User {
private int id;
private String username;
private String password;
// getters and setters
}
<resultMap id="UserResultMap" type="com.example.model.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
</resultMap>
MyBatis常用操作
增加数据(INSERT)
在 MyBatis 中,插入数据可以通过配置文件中的 <insert>
标签来实现。
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
User user = new User();
user.setUsername("test");
user.setPassword("123456");
session.insert("com.example.mapper.UserMapper.insertUser", user);
查询数据(SELECT)
查询数据可以通过配置文件中的 <select>
标签来实现。
<select id="selectUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
User user = session.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
更新数据(UPDATE)
更新数据可以通过配置文件中的 <update>
标签来实现。
<update id="updateUser" parameterType="com.example.model.User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
User user = new User();
user.setId(1);
user.setUsername("testUpdate");
user.setPassword("654321");
session.update("com.example.mapper.UserMapper.updateUser", user);
删除数据(DELETE)
删除数据可以通过配置文件中的 <delete>
标签来实现。
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
session.delete("com.example.mapper.UserMapper.deleteUserById", 1);
MyBatis动态SQL
MyBatis 提供了多种标签来实现动态 SQL 语句,包括 if
、choose
、set
、foreach
等。
if
标签用于条件分支判断。
<select id="selectUserByCondition" resultType="com.example.model.User">
SELECT * FROM user
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="username != null">
AND username = #{username}
</if>
</where>
</select>
Map<String, Object> params = new HashMap<>();
params.put("id", 1);
params.put("username", "test");
List<User> users = session.selectList("com.example.mapper.UserMapper.selectUserByCondition", params);
choose标签
choose
标签类似于 Java 中的 switch
语句,可以根据不同的条件选择不同的 SQL 语句执行。
<select id="selectUserByCondition" resultType="com.example.model.User">
SELECT * FROM user
<where>
<choose>
<when test="id != null">
AND id = #{id}
</when>
<when test="username != null">
AND username = #{username}
</when>
<otherwise>
AND 1 = 1
</otherwise>
</choose>
</where>
</select>
set标签
set
标签用于更新字段时,根据条件动态生成 SQL 语句。
<update id="updateUserSelective" parameterType="com.example.model.User">
UPDATE user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="password != null">
password = #{password},
</if>
</set>
WHERE id = #{id}
</update>
User user = new User();
user.setId(1);
user.setUsername("testUpdate");
user.setPassword("654321");
session.update("com.example.mapper.UserMapper.updateUserSelective", user);
foreach标签
foreach
标签用于循环遍历集合或数组,并生成 SQL 语句。
<insert id="insertUsers" parameterType="java.util.List">
INSERT INTO user (username, password)
VALUES
<foreach item="item" index="index" collection="list" separator="," open="(" close=")">
#{item.username}, #{item.password}
</foreach>
</insert>
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setUsername("test1");
user1.setPassword("123456");
User user2 = new User();
user2.setUsername("test2");
user2.setPassword("654321");
userList.add(user1);
userList.add(user2);
session.insert("com.example.mapper.UserMapper.insertUsers", userList);
MyBatis与Spring集成
MyBatis-Spring简介
MyBatis-Spring 是 MyBatis 和 Spring 的集成库,它提供了 Spring 风格的数据访问层支持,使得 MyBatis 在 Spring 框架下的使用更加便捷。
配置MyBatis与Spring集成为了集成 MyBatis 和 Spring,需要引入 MyBatis-Spring 的依赖,并配置相关的 Bean。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
在 Spring 的配置文件中,配置 SqlSessionFactoryBean 和 MapperScannerConfigurer。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
使用注解开发MyBatis映射器
MyBatis-Spring 支持使用注解来编写映射器接口。
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);
@Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
void insertUser(User user);
@Update("UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}")
void updateUser(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
void deleteUser(int id);
}
使用SqlSessionTemplate和SqlSessionDaoSupport
SqlSessionTemplate
和 SqlSessionDaoSupport
提供了线程安全的 SqlSession 代理对象,使得在 Spring 中使用 MyBatis 更加方便。
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
@Override
public User getUserById(int id) {
return super.getSqlSession().selectOne("com.example.mapper.UserMapper.getUserById", id);
}
@Override
public void insertUser(User user) {
super.getSqlSession().insert("com.example.mapper.UserMapper.insertUser", user);
}
@Override
public void updateUser(User user) {
super.getSqlSession().update("com.example.mapper.UserMapper.updateUser", user);
}
@Override
public void deleteUser(int id) {
super.getSqlSession().delete("com.example.mapper.UserMapper.deleteUser", id);
}
}
通过以上步骤,你可以轻松地将 MyBatis 集成到 Spring 项目中,并利用 MyBatis 的强大功能进行数据库操作。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章