当前位置: 首页 > news >正文

MyBatis 如何使用

1. 环境准备
  1. 添加依赖(Maven)
    在 pom.xml 中添加 MyBatis 和数据库驱动依赖:

    <dependencies><!-- MyBatis 核心库 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MySQL 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
    </dependencies>

      2.创建数据库表
        示例用户表 user: 

CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,email VARCHAR(100)
);

2. 配置文件

  mybatis-config.xml
      配置数据源、事务管理器和映射文件路径:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

3. 实体类和Mapper接口
  1. 实体类 User.java

    public class User {private Integer id;private String name;private Integer age;private String email;// Getter和Setter方法省略
    }

      2.Mapper接口 UserMapper.java 

public interface UserMapper {User selectUserById(Integer id);void insertUser(User user);void updateUser(User user);void deleteUser(Integer id);List<User> selectUsersByCondition(User user);
}

4. XML映射文件

  UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><!-- 结果映射 --><resultMap id="userResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><result property="email" column="email"/></resultMap><!-- 查询用户 --><select id="selectUserById" resultMap="userResultMap">SELECT * FROM user WHERE id = #{id}</select><!-- 插入用户 --><insert id="insertUser" parameterType="User">INSERT INTO user (name, age, email)VALUES (#{name}, #{age}, #{email})</insert><!-- 更新用户 --><update id="updateUser" parameterType="User">UPDATE userSET name = #{name}, age = #{age}, email = #{email}WHERE id = #{id}</update><!-- 删除用户 --><delete id="deleteUser">DELETE FROM user WHERE id = #{id}</delete><!-- 动态SQL查询 --><select id="selectUsersByCondition" resultMap="userResultMap">SELECT * FROM user<where><if test="name != null and name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if><if test="age != null">AND age = #{age}</if></where></select>
</mapper>

5. 使用MyBatis API执行操作
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.InputStream;
import java.util.List;public class MyBatisDemo {public static void main(String[] args) throws Exception {// 加载配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获取SqlSessiontry (SqlSession session = sqlSessionFactory.openSession()) {// 获取Mapper接口实例UserMapper mapper = session.getMapper(UserMapper.class);// 插入用户User newUser = new User();newUser.setName("张三");newUser.setAge(25);newUser.setEmail("zhangsan@example.com");mapper.insertUser(newUser);session.commit(); // 提交事务// 查询用户User user = mapper.selectUserById(1);System.out.println("查询结果:" + user);// 动态查询User condition = new User();condition.setName("张");List<User> users = mapper.selectUsersByCondition(condition);System.out.println("动态查询结果:" + users);// 更新用户user.setEmail("new_email@example.com");mapper.updateUser(user);session.commit();// 删除用户mapper.deleteUser(2);session.commit();}}
}

6. 动态SQL示例解析
  • <where> 标签:自动处理条件前的 AND 或 OR,避免语法错误。

  • <if> 标签:根据条件动态拼接 SQL 片段。

    <select id="selectUsersByCondition" resultMap="userResultMap">SELECT * FROM user<where><if test="name != null and name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if><if test="age != null">AND age = #{age}</if></where>
    </select>


7. 缓存配置
  1. 开启二级缓存
    在 UserMapper.xml 中添加 <cache/> 标签:

    <mapper namespace="com.example.mapper.UserMapper"><cache/><!-- 其他SQL配置 -->
    </mapper>

    2.实体类序列化
       确保 User 类实现 Serializable 接口: 

public class User implements Serializable {// 属性和方法
}

8. 与Spring集成
  1. 添加MyBatis-Spring依赖

    <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
    </dependency>

     2.配置数据源
       在 application.properties 中配置: 

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456

     3.Mapper扫描
        在启动类添加 @MapperScan

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

9. 常见问题解决

    1.SQL注入风险

  • 使用 #{} 占位符代替字符串拼接(${})。

    2.字段名与属性名不一致

  • 使用 <resultMap> 显式映射字段和属性。

   3.事务管理

  • 在需要事务的方法上添加 @Transactional 注解。


总结

通过以上步骤,可以掌握MyBatis的基本使用,包括配置、CRUD操作、动态SQL、缓存及与Spring集成。实际开发中应结合具体需求,合理利用MyBatis的灵活性和强大功能,提升数据库操作效率和代码可维护性。

相关文章:

  • Navicat导入JSON数据到MySQL表
  • 安卓环境搭建开发工具下载Gradle下载
  • git在分支上会退到某个指定的commit
  • 在边缘端进行tensorflow模型的部署(小白初探)
  • 今日算法题
  • 安装 MySQL8.0.17
  • Selenium2+Python自动化:利用JS解决click失效问题
  • GitHub开源项目esp32小智AI语音代码详解
  • 【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解
  • 力扣 双指针算法(一)
  • 每日一题-力扣-2537. 统计好子数组的数目 0416
  • Java高频面试之并发编程-03
  • Qt QML实现Windows桌面颜色提取器
  • JVM:类加载子系统
  • android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化
  • 基于多模态深度学习的亚急性脊髓联合变性全流程预测与个性化管理技术方案
  • JVM:对象的实例化、直接内存
  • cfd笔记【1】简介
  • vue js 上传文件 form data
  • 一个含有 n 个顶点的连通且无环的简单无向图,在其邻接矩阵存储结构中共有几个零元素?
  • 介绍做网站的标题/seo网络优化公司
  • 下列关于网站开发中网页上传/网络销售挣钱吗
  • 新手怎么做网站/徐州网站建设方案优化
  • 今日头条开放api接口/seo黑帽培训骗局
  • 独立商城网站建设/百度投诉平台在哪里投诉
  • web前端自己做网站/微信营销号