MyBatis教程介绍了MyBatis框架的基本概念、特点和优势,涵盖了环境搭建、基本CRUD操作及动态SQL等内容,帮助读者快速掌握MyBatis的使用方法。
MyBatis教程:新手快速入门指南 MyBatis简介MyBatis是什么
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 可以通过简单的 XML 或注解进行配置,将 Java 对象映射到数据库表列。
MyBatis的特点和优势
- 简化开发流程:MyBatis 通过 XML 或注解的方式,将 SQL 语句与 Java 代码分离,使得 SQL 语句的维护更加方便,同时简化了开发流程。
- 强大的映射功能:MyBatis 提供了灵活的结果集映射功能,可以将查询结果映射到 Java 对象的任意属性上。
- 支持自定义 SQL 语句:MyB endpointsBatis 允许开发者编写自定义的 SQL 语句,并通过 XML 或注解的方式进行配置,使得 SQL 语句的灵活性大大提高。
- 易于维护:由于 SQL 语句的配置与 Java 代码分离,使得维护变得更加方便,同时也提高了代码的可读性和可维护性。
MyBatis与Hibernate等ORM框架的区别
- SQL 语句的编写:MyBatis 需要手动编写 SQL 语句,而 Hibernate 则使用 JPA 规范,可以自动生成 SQL 语句。
- 映射方式:MyBatis 使用 XML 或注解的方式进行映射配置,而 Hibernate 使用注解或 XML 方式进行映射配置。
- 灵活性:MyBatis 提供了更多的自定义 SQL 语句支持,使得灵活度更高,而 Hibernate 更侧重于提供一种统一的 ORM 规范。
- 性能:MyBatis 由于提供了直接操作 SQL 的方式,因此在某些场景下性能更优,而 Hibernate 则由于其自动化的机制,在某些情况下可能性能稍差。
开发环境准备
开发 MyBatis 应用程序需要准备以下几个环境:
- JDK 1.8 或以上版本
- Apache Maven 或其他构建工具
- MySQL 数据库
添加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 应用程序,我们需要以下几个步骤:
- 配置数据库连接信息:编写
mybatis-config.xml
文件,并设置数据库连接信息。 - 编写实体类:创建一个表示数据库表的 Java 类。
- 编写映射文件:编写映射文件(Mapper XML 文件)以定义 SQL 语句。
- 编写测试代码:编写 Java 类来使用 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>
<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);
}
}
}
MyBatis核心概念
SqlSessionFactory和SqlSession
- SqlSessionFactory:SqlSessionFactory 是创建 SqlSession 的工厂类。创建 SqlSessionFactory 的实例需要一个配置文件(XML 或注解)作为输入。
- SqlSession:SqlSession 是执行数据库操作的接口。SqlSession 用于执行持久层的 CRUD 操作,如增删改查等。
映射文件(Mapper XML)
映射文件(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 + '\'' +
'}';
}
}
基本CRUD操作
查询操作(select)
查询操作使用 <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)
插入操作使用 <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)
更新操作使用 <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)
删除操作使用 <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);
动态SQL
if条件语句
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选择语句
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循环语句
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配置文件的结构
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 课程。
共同学习,写下你的评论
评论加载中...
作者其他优质文章