本文详细介绍了MyBatis资料,包括MyBatis的基本概念、优点和应用场景,以及如何快速入门并搭建开发环境。文章还深入讲解了MyBatis的核心配置、映射器、动态SQL和高级特性,帮助读者全面掌握MyBatis的使用方法。
MyBatis入门教程:快速掌握MyBatis基础 MyBatis简介MyBatis是什么
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 传递给 SQL 语句。
MyBatis的优点和应用场景
MyBatis的优点包括:
- 简化了 JDBC 代码:MyBatis 完全消除了 JDBC 代码的样板和重复性劳动。
- 灵活性高:支持自定义 SQL 语句和存储过程。
- 易于维护:SQL 语句与 Java 代码分离,便于维护和升级。
- 高性能:与 Jdbc 相比,MyBatis 直接操作数据库,省去了 Jdbc 的大量封装。
MyBatis的应用场景包括:
- 需要与数据库进行复杂交互的应用程序,如金融系统、物流系统等。
- 需要频繁修改 SQL 语句的应用程序,如电子商务系统。
- 需要高度定制化 SQL 语句的应用程序,如大数据分析系统。
环境搭建
要搭建 MyBatis 开发环境,需要引入 MyBatis 的依赖。以下是 Maven 配置中的依赖配置示例,确保项目中已经配置了 Maven。
<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.23</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<!-- 其它依赖 -->
</dependencies>
接下来,需要配置 SqlMapConfig.xml
,该文件用来配置数据库连接信息和其它核心配置。以下是完整的 SqlMapConfig.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>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
``
### 第一个MyBatis程序
首先,创建数据库表 `user`,如下:
```sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`password` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
``
然后编写 `User` 类及其属性:
```java
public class User {
private int id;
private String username;
private String password;
// Getters and Setters
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;
}
}
``
接下来创建 `SqlMapConfig.xml` 配置文件,该文件用来配置数据库连接信息。
```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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
``
接下来创建 `UserMapper.xml` 映射文件,该文件用来定义 SQL 语句。
```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.domain.User">
SELECT id, username, password FROM user WHERE id = #{id}
</select>
</mapper>
最后编写 Java 代码来测试以上配置是否有效:
public class Main {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
User user = session.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
System.out.println(user);
}
}
通过以上步骤,MyBatis 第一个程序成功运行。
MyBatis核心配置配置文件详解
MyBatis 的配置文件 SqlMapConfig.xml
是整个 MyBatis 运行的基础,它包含数据库连接信息、事务管理器类型、环境配置等。
以下是一些常用的配置标签:
<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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- mappers配置,指定映射文件的路径 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
<!-- 其它配置,如类型处理器、缓存配置等 -->
</configuration>
数据库连接配置
数据库连接配置主要在 <environment>
标签中的 <dataSource>
标签内进行。<dataSource>
标签有三种类型:UNPOOLED、POOLED 和 JNDI。POOLED 类型的连接池是 MyBatis 中比较常用的连接池。
<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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
以上配置中,<property>
标签用于设置数据源属性。
映射文件编写
MyBatis 映射文件,通常以 .xml
为扩展名,用于定义 SQL 语句。映射文件中的根元素 <mapper>
应该有一个 namespace
属性,该属性用于映射文件中 SQL 语句的唯一命名空间。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="com.example.domain.User">
SELECT id, username, password FROM user WHERE id = #{id}
</select>
</mapper>
常用的SQL语句映射
MyBatis 支持多种 SQL 语句的映射,包括 select
、insert
、update
和 delete
。
select
<select id="selectUserById" resultType="com.example.domain.User">
SELECT id, username, password FROM user WHERE id = #{id}
</select>
insert
<insert id="insertUser" parameterType="com.example.domain.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
update
<update id="updateUser" parameterType="com.example.domain.User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
delete
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
MyBatis动态SQL
if、choose、when、otherwise标签用法
MyBatis 支持使用 if
、choose
、when
、otherwise
标签来编写动态 SQL 语句。这些标签在 XML 映射文件中非常有用,可以实现条件分支和循环。
使用 if
标签:
<select id="selectUserByCondition" resultType="com.example.domain.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>
使用 choose
、when
、otherwise
标签:
<select id="selectUserByCondition" resultType="com.example.domain.User">
SELECT id, username, password FROM user
<where>
<choose>
<when test="username != null">
AND username = #{username}
</when>
<when test="password != null">
AND password = #{password}
</when>
<otherwise>
AND id = 1
</otherwise>
</choose>
</where>
</select>
foreach标签用法
foreach
标签用于遍历列表或数组,常用于 SQL 的 IN
子句。
使用 foreach
标签:
<select id="selectUsersByIds" resultType="com.example.domain.User">
SELECT id, username, password FROM user WHERE id IN
<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
#{item}
</foreach>
</select>
其中,item
表示当前遍历的元素,index
表示当前元素的索引,collection
表示要遍历的集合,open
和 close
定义了遍历序列的起始和结束符号。
分页查询
MyBatis 的分页查询可以通过 RowBounds
和 PageHelper
插件来实现。
使用 RowBounds
:
public List<User> getUsers(RowBounds rowBounds) {
return sqlSession.selectList("com.example.mapper.UserMapper.getUsers", null, rowBounds);
}
使用 PageHelper
插件:
首先,引入 PageHelper
依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
配置 PageHelper
插件:
PageHelper.startPage(1, 5);
List<User> users = sqlSession.selectList("com.example.mapper.UserMapper.getUsers");
以下是 SqlMapConfig.xml
中启用 PageHelper
插件的完整配置示例:
<configuration>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
<property name="reasonable" value="true"/>
<property name="params" value="count=countSql"/>
</plugin>
</plugins>
</configuration>
缓存机制
MyBatis 提供了一级缓存和二级缓存的机制,可以显著提高查询性能。
一级缓存:
一级缓存是 SqlSession 级别的缓存,同一个 SqlSession 中的相同 SQL 不会重复执行。
二级缓存:
二级缓存是 Mapper 级别的缓存,同一个命名空间的相同 SQL 在不同的 SqlSession 中也可以实现缓存。
<cache />
在 SqlMapConfig.xml
配置文件中添加 <cache>
标签即可启用二级缓存,具体配置如下:
<configuration>
<cacheEnabled>true</cacheEnabled>
<cache>
<type>PERPETUAL</type>
<flushInterval>60000</flushInterval>
<size>512</size>
<blocking>true</blocking>
</cache>
</configuration>
通过以上介绍,你已经了解了 MyBatis 的基本概念、快速入门、核心配置、映射器、动态 SQL 和高级特性。通过这些内容,可以快速掌握 MyBatis 的使用方法,希望对你有所帮助。
共同学习,写下你的评论
评论加载中...
作者其他优质文章