MyBatis教程介绍了MyBatis框架的基本概念、特点和优势,涵盖了环境搭建、基本CRUD操作及动态SQL等内容,帮助读者快速掌握MyBatis的使用方法。
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 可以通过简单的 XML 或注解进行配置,将 Java 对象映射到数据库表列。
开发 MyBatis 应用程序需要准备以下几个环境:
在 Maven 项目中,需要在 pom.xml
文件中添加 MyBatis 的依赖。
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies>
为了创建一个简单的 MyBatis 应用程序,我们需要以下几个步骤:
mybatis-config.xml
文件,并设置数据库连接信息。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.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration>
创建一个表示 User
表的 Java 类:
package com.example.entity; public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
创建 UserMapper.xml
文件,定义 SQL 语句:
<?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"> <select id="selectUserById" resultType="com.example.entity.User"> SELECT id, username, password FROM user WHERE id = #{id} </select> </mapper>
编写测试代码来使用 MyBatis 进行数据库操作:
package com.example.test; import com.example.entity.User; 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 MyBatisTest { public static void main(String[] args) throws IOException { // 读取配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 创建 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSession try (SqlSession session = sqlSessionFactory.openSession()) { // 获取 Mapper 接口 UserMapper mapper = session.getMapper(UserMapper.class); // 调用方法 User user = mapper.selectUserById(1); System.out.println(user); } } }
映射文件(Mapper XML)用于定义 SQL 语句和结果集的映射关系。映射文件通常位于 src/main/resources
目录下,并且命名方式为 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"> <select id="selectUserById" resultType="com.example.entity.User"> SELECT id, username, password FROM user WHERE id = #{id} </select> </mapper>
实体类用于表示数据库表中的数据。在 MyBatis 中,可以通过配置文件将数据库中的列映射到实体类的属性上。
创建一个实体类 User
:
package com.example.entity; public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
查询操作使用 <select>
标签来定义 SQL 语句,并通过 resultType
属性来指定返回值类型。
定义一个查询用户的方法:
<select id="selectAllUsers" resultType="com.example.entity.User"> SELECT id, username, password FROM user </select>
在 Java 代码中调用:
UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectAllUsers(); for (User user : users) { System.out.println(user); }
插入操作使用 <insert>
标签来定义 SQL 语句,并通过 useGeneratedKeys
属性来获取自增主键。
定义一个插入用户的方法:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user (username, password) VALUES (#{username}, #{password}) </insert>
在 Java 代码中调用:
User user = new User(); user.setUsername("test"); user.setPassword("123456"); int rows = mapper.insertUser(user); System.out.println("Rows inserted: " + rows);
更新操作使用 <update>
标签来定义 SQL 语句。
定义一个更新用户的方法:
<update id="updateUser" parameterType="com.example.entity.User"> UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id} </update>
在 Java 代码中调用:
User user = new User(); user.setId(1); user.setUsername("testupdate"); user.setPassword("newpassword"); int rows = mapper.updateUser(user); System.out.println("Rows updated: " + rows);
删除操作使用 <delete>
标签来定义 SQL 语句。
定义一个删除用户的方法:
<delete id="deleteUserById" parameterType="int"> DELETE FROM user WHERE id=#{id} </delete>
在 Java 代码中调用:
int rows = mapper.deleteUserById(1); System.out.println("Rows deleted: " + rows);
if
条件语句用于根据参数的存在与否来决定是否包含 SQL 语句中的某些部分。
定义一个查询用户的方法,根据参数是否存在来决定是否包含过滤条件:
<select id="selectUserByParams" resultType="com.example.entity.User"> SELECT id, username, password FROM user <where> <if test="username != null"> AND username = #{username} </if> <if test="password != null"> AND password = #{password} </if> </where> </select>
在 Java 代码中调用:
UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectUserByParams("test", null); for (User user : users) { System.out.println(user); }
choose
、when
、otherwise
语句用于选择一个分支执行。
定义一个查询用户的方法,根据参数的不同来选择不同的 SQL 语句:
<select id="selectUserByParam" resultType="com.example.entity.User"> SELECT id, username, password FROM user <where> <choose> <when test="id != null"> AND id = #{id} </when> <when test="username != null"> AND username = #{username} </when> <otherwise> AND password = #{password} </otherwise> </choose> </where> </select>
在 Java 代码中调用:
UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectUserByParam(null, null, "123456"); for (User user : users) { System.out.println(user); }
foreach
循环语句用于遍历一个集合或数组,并将结果应用到 SQL 语句中。
定义一个插入多条用户记录的方法:
<insert id="insertUsers" parameterType="java.util.List"> INSERT INTO user (username, password) VALUES <foreach item="item" index="index" collection="list" open="(" separator="),(" close=")"> #{item.username}, #{item.password} </foreach> </insert>
在 Java 代码中调用:
List<User> users = new ArrayList<>(); User user1 = new User(); user1.setUsername("test1"); user1.setPassword("123456"); User user2 = new User(); user2.setUsername("test2"); user2.setPassword("654321"); users.add(user1); users.add(user2); mapper.insertUsers(users);
MyBatis 配置文件通常命名为 mybatis-config.xml
,其结构包括以下几个部分:
<configuration>
根标签<environments>
环境配置<mappers>
映射文件配置<properties>
属性配置<settings>
设置配置<typeAliases>
类型别名配置<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/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> <properties> <property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <property name="jdbc.url" value="jdbc:mysql://localhost:3306/test"/> <property name="jdbc.username" value="root"/> <property name="jdbc.password" value="root"/> </properties> <settings> <setting name="lazyLoadingEnabled" value="true"/> </settings> <typeAliases> <typeAlias alias="User" type="com.example.entity.User"/> </typeAliases> </configuration>
数据源配置用于配置数据库连接信息。在 <environments>
标签中设置数据源属性。
<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/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments>
映射文件配置用于指定 MyBatis 映射文件的位置。
<mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers>
设置配置用于配置 MyBatis 的运行时行为,类型别名配置用于简化 Java 类型的书写。
设置配置:
<settings> <setting name="lazyLoadingEnabled" value="true"/> </settings>
类型别名配置:
<typeAliases> <typeAlias alias="User" type="com.example.entity.User"/> </typeAliases>
以上是 MyBatis 基本的配置和使用方法,希望能够帮助你快速入门并掌握 MyBatis 的核心概念和使用技巧。如果你需要更深入的学习,可以参考 MyBatis 的官方文档或者参加一些在线课程,例如 慕课网 提供的 MyBatis 课程。