MyBatis教程:新手快速入门指南
2024/11/20 4:34:15
本文主要是介绍MyBatis教程:新手快速入门指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MyBatis教程介绍了MyBatis框架的基本概念、特点和优势,涵盖了环境搭建、基本CRUD操作及动态SQL等内容,帮助读者快速掌握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); } } }
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 + '\'' + '}'; } }
查询操作(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);
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-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 课程。
这篇关于MyBatis教程:新手快速入门指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南
- 2024-11-20负载均衡教程:新手入门必备指南