Mybatis持久层框架学习指南
2024/11/6 23:35:20
本文主要是介绍Mybatis持久层框架学习指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Mybatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射,简化了数据库操作。本文将详细介绍Mybatis的安装与配置、核心概念、环境搭建以及CRUD操作等内容,帮助读者掌握Mybatis持久层框架学习。
Mybatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,使用简单的 XML 或注解进行配置和原始映射,并将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)进行映射,将数据库返回的记录转换成易于操作的 Java 对象。
Mybatis 的核心概念和术语如下:
- SqlSessionFactory:工厂模式,用于创建 SqlSession 的类。
- SqlSession:数据库会话对象,用于执行数据库操作。
- Mapper:映射接口,包含持久化操作的接口。
- Executor:执行器,负责管理和执行映射语句。
- Configuration:配置信息,封装了配置文件中的所有配置信息。
- MappedStatement:映射语句,封装了映射文件中的 SQL 语句。
- ParameterMapping:SQL 语句中的参数映射。
- ResultMap:定义了 SQL 语句结果集的映射规则。
- ResultSetHandler:结果集处理器,负责将数据库查询结果转换为 Java 对象。
示例代码
Java 类示例:
package com.example.dao; public class User { private int id; private String name; private int age; // 构造器、getters 和 setters 方法 }
映射接口示例:
package com.example.mapper; public interface UserMapper { int insert(User user); int delete(int id); int update(User user); List<User> selectAll(); }
安装步骤
- 下载 Mybatis 软件包,解压后放到需要使用的项目中。
- 配置 Mybatis 的全局配置文件
mybatis-config.xml
,该文件位于项目的resources
目录下。 - 配置数据库连接信息,创建数据库连接池。
- 配置数据映射文件
mapper.xml
,该文件用于描述 SQL 语句的执行。
全局配置文件
一个典型的 Mybatis 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> <properties resource="db.properties"/> <typeAliases> <typeAlias type="com.example.dao.User" alias="User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/dao/UserMapper.xml"/> </mappers> </configuration>
数据库连接池配置
数据库连接信息通常放在 db.properties
文件中,如下所示:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis username=root password=root
在 mybatis-config.xml
中引用该文件。
在开发工具中创建一个新的 Java 项目,例如使用 IntelliJ IDEA 或 Eclipse。需要安装 JDK,然后在开发工具中创建一个新的 Java 项目。
Maven项目的创建与配置
使用 Maven 管理项目依赖及构建,示例项目结构如下:
project-root |-- pom.xml |-- src |-- main |-- java |-- resources |-- db.properties |-- mybatis-config.xml |-- mapper |-- UserMapper.xml |-- test |-- java |-- com.example.test |-- UserMapperTest.java
pom.xml 配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>mybatis-demo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> </dependencies> </project>
Mybatis的项目集成
- 将 Mybatis 的配置文件
mybatis-config.xml
放在resources
目录下。 - 引用配置文件中的数据库连接信息并配置 Mybatis 映射文件。
- 创建 Java 类,定义持久化对象的映射接口。
增加数据
创建数据库表:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Java 代码示例:
package com.example.dao; public class User { private int id; private String name; private int age; // 构造器、getters 和 setters 方法 } package com.example.mapper; import com.example.dao.User; public interface UserMapper { int insert(User user); }
Mapper XML:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <insert id="insert" parameterType="com.example.dao.User"> INSERT INTO user(name, age) VALUES (#{name}, #{age}) </insert> </mapper>
删除数据
Java 代码示例:
package com.example.mapper; public interface UserMapper { int delete(int id); }
Mapper XML:
<delete id="delete" parameterType="int"> DELETE FROM user WHERE id = #{id} </delete>
修改数据
Java 代码示例:
package com.example.mapper; public interface UserMapper { int update(User user); }
Mapper XML:
<update id="update" parameterType="com.example.dao.User"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update>
查询数据
Java 代码示例:
package com.example.mapper; import java.util.List; public interface UserMapper { List<User> selectAll(); }
Mapper XML:
<select id="selectAll" resultType="com.example.dao.User"> SELECT * FROM user </select>
映射文件中的标签解析
<insert>
:插入数据。<delete>
:删除数据。<update>
:更新数据。<select>
:查询数据。
映射文件的基本结构
映射文件 UserMapper.xml
的结构如下:
<mapper namespace="com.example.mapper.UserMapper"> <insert id="insert" parameterType="com.example.dao.User"> INSERT INTO user(name, age) VALUES (#{name}, #{age}) </insert> <delete id="delete" parameterType="int"> DELETE FROM user WHERE id = #{id} </delete> <update id="update" parameterType="com.example.dao.User"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update> <select id="selectAll" resultType="com.example.dao.User"> SELECT * FROM user </select> </mapper>
如何编写映射文件
namespace
:映射文件对应的接口。id
:映射文件中的 SQL 语句的唯一标识符。parameterType
:SQL 语句中参数的数据类型。resultType
:结果集映射的 Java 类型。
映射文件中的标签解析
<insert>
:插入数据。<delete>
:删除数据。<update>
:更新数据。<select>
:查询数据。
动态SQL的基本使用
动态 SQL 是 Mybatis 的一个强大特性,它允许你根据条件动态生成 SQL 语句。
Java 代码示例:
package com.example.mapper; import java.util.List; public interface UserMapper { List<User> selectByCondition(User condition); }
Mapper XML:
<select id="selectByCondition" parameterType="com.example.dao.User" resultType="com.example.dao.User"> SELECT * FROM user <where> <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select>
if标签的应用
Java 代码示例:
package com.example.mapper; import java.util.List; public interface UserMapper { List<User> selectByCondition(User condition); }
Mapper XML:
<select id="selectByCondition" parameterType="com.example.dao.User" resultType="com.example.dao.User"> SELECT * FROM user <where> <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select>
choose标签的应用
Java 代码示例:
package com.example.mapper; import java.util.List; public interface UserMapper { List<User> selectByCondition(User condition); }
Mapper XML:
<select id="selectByCondition" parameterType="com.example.dao.User" resultType="com.example.dao.User"> SELECT * FROM user <where> <choose> <when test="name != null"> AND name = #{name} </when> <when test="age != null"> AND age = #{age} </when> <otherwise> AND id = 1 </otherwise> </choose> </where> </select>
foreach标签的应用
Java 代码示例:
package com.example.mapper; import java.util.List; import java.util.ArrayList; public interface UserMapper { List<User> selectByIds(ArrayList<Integer> ids); }
Mapper XML:
<select id="selectByIds" parameterType="java.util.List" resultType="com.example.dao.User"> SELECT * FROM user WHERE id IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
结果集的处理
Mybatis 支持多种结果集的处理方式,例如:
Java 代码示例:
package com.example.mapper; import java.util.List; public interface UserMapper { List<User> selectUsers(); }
Mapper XML:
<select id="selectUsers" resultMap="UserResultMap"> SELECT id, name, age FROM user </select> <resultMap id="UserResultMap" type="com.example.dao.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> </resultMap>
分页查询
可以使用 Mybatis 的 RowBounds
类进行简单的分页查询。
Java 代码示例:
package com.example.mapper; import java.util.List; import org.apache.ibatis.session.RowBounds; public interface UserMapper { List<User> selectByRowBounds(User condition, RowBounds rowBounds); }
Mapper XML:
<select id="selectByRowBounds" parameterType="java.lang.Integer" resultType="com.example.dao.User"> SELECT * FROM user <if test="offset != null and limit != null"> LIMIT #{offset}, #{limit} </if> </select>
事务管理
Mybatis 支持事务管理,可以通过配置文件或编程方式来管理事务。
在 mybatis-config.xml
中配置事务管理器:
<transactionManager type="JDBC"/>
在 Java 代码中执行事务:
package com.example.test; import com.example.mapper.UserMapper; 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 UserMapperTest { private SqlSessionFactory sqlSessionFactory; public UserMapperTest() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } public void testTransaction() { try (SqlSession session = sqlSessionFactory.openSession()) { UserMapper mapper = session.getMapper(UserMapper.class); mapper.insert(new User(1, "Tom", 20)); mapper.insert(new User(2, "Jerry", 25)); // 提交事务 session.commit(); } catch (Exception e) { e.printStackTrace(); } } }
以上是 Mybatis 的基本概念和一些高级特性,通过这些内容,你可以更深入地了解和掌握 Mybatis 的使用。
这篇关于Mybatis持久层框架学习指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南