一:介绍
MyBatis是一种基于Java的持久层框架,它通过简化数据库操作和SQL编写,帮助开发人员更轻松地管理数据库交互。其底层实现采用了面向SQL的编程思想,即开发者可以直接在XML文件或注解中编写SQL语句,而不需要使用繁琐的JDBC代码。
1.1MyBatis的优点包括:
-
简化数据库操作:MyBatis封装了JDBC的操作,提供了简洁的API,使得开发者能够更轻松地执行数据库操作,减少了重复的代码。
-
灵活的SQL编写:MyBatis支持在XML文件或注解中编写SQL语句,使得SQL与Java代码分离,提高了代码的可维护性和可读性。
-
强大的映射功能:MyBatis提供了灵活的结果集映射功能,可以将数据库查询结果映射为Java对象,简化了数据的处理和转换过程。
-
多种配置方式:MyBatis支持多种配置方式,包括XML配置和注解配置,开发者可以根据项目需求选择最适合的配置方式。
MyBatis解决了传统JDBC操作数据库时需要编写大量重复代码、SQL与Java代码混合、SQL可读性差等问题,使得数据库操作更加简单高效。
1.2 Mybatis框架执行流程
-
读取MyBatis 配置文件mybatis-config.xml,加载数据源、事务等
-
加载映射文件mapper.xml
-
定义SQL语句,在上一步的文件中加载。
-
创建会话工厂。(SqlSessionFactory)
-
创建会话(SqlSession)
-
通过Executor 操作数据库
-
输入参数和输出结果
二:Mybatis的使用
2.1环境配置
1.创建一个Maven项目。
2.添加相关依赖,找到maven项目根目录下的pom.xml文件,添加以下依赖
<dependencies>
<!--添加mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql的数据库驱动jar-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--添加junit测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
3.在resources目录下创建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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<!-- 可以配置多个environment -->
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/shopdb" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
</configuration>
注意:如果mysql依赖的版本为8,则url的值为 value="jdbc:mysql://localhost:3306/shopdb?serverTimezone=Asia/Shanghai"
2.2Mapper代理模式的实现
-
编写一个实体类,如User
package com.fs.entity;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private int id;
private String username;
private String password;
private String sex;
private Date brithday;
private String address;
}
-
编写Mapper接口,如UserMapper,在接口中编写所需要的方法。
package com.fs.dao;
import com.fs.entity.User;
import java.util.List;
public interface StudentMapper {
public User selectById(int id);
public List<User> selectAll();
public int deleteById(int id);
public int updataById(int id);
}
-
编写sql映射文件,如UserMapper.xml,在映射文件中编写相应方法的sql语句,且一个Mapper接口对应一个映射文件。
<?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">
<!-- namespace命名空间,作用就是对sql进行分类管理
注意:使用mapper代理方法开发时,namespace学习阶段命名随意
parameterType:输入参数类型,如果是基本数据类型可以不写该参数,如果是类类型则一定要写如 包名.类名;
resultType:输出类型参数将结果映射成某个Java类型;
-->
<mapper namespace="com.fs.dao.User">
<select id="selectById" parameterType="int" resultType="com.fs.entity.User">
select * from t_user where sid=#{sid}
</select>
</mapper>
三:Mybatis的注意事项
-
SQL注入:在编写动态SQL时,需要避免拼接SQL字符串,而应该使用参数化查询或者使用MyBatis提供的动态SQL功能,以防止SQL注入攻击。
-
映射配置:确保正确配置了SQL语句和结果集的映射关系,避免出现结果集与Java对象不匹配的情况。
-
事务管理:在需要保证数据一致性的操作中,务必正确配置事务管理,确保操作的原子性和一致性。
-
缓存使用:MyBatis提供了一级缓存和二级缓存,开发者在使用缓存时需要注意缓存的生命周期、更新策略等,避免数据不一致或内存泄漏等问题。
-
日志配置:为了方便排查问题和性能调优,建议配置合适的日志级别和日志输出方式,以便及时发现和解决潜在问题。
-
数据库连接管理:确保正确配置数据库连接池,避免因连接泄漏或连接池配置不当导致的性能问题或数据库资源耗尽。
-
错误处理:及时捕获并处理MyBatis操作中可能抛出的异常,以保证系统的稳定性和可靠性。
-
版本兼容性:在使用MyBatis时,需要注意选择与项目中其他组件版本兼容的MyBatis版本,以避免出现不必要的兼容性问题。