当前位置: 首页 > 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的灵活性和强大功能,提升数据库操作效率和代码可维护性。


http://www.mrgr.cn/news/98593.html

相关文章:

  • 实用类题目
  • 【软件工程大系】净室软件工程
  • SageAttention2
  • 基于AD9767高速DAC的DDS信号发生器
  • C++学习之工厂模式-套接字通信
  • 【本地图床搭建】宝塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”图床方案
  • IDEA202403 常用设置【持续更新】
  • LWIP学习笔记
  • Android studio打包uniapp插件
  • 【NLP 59、大模型应用 —— 字节对编码 bpe 算法】
  • 使用 Vitis Model Composer 生成 FPGA IP 核
  • 【QT】 QT定时器的使用
  • 常见的 14 个 HTTP 状态码详解
  • 如何在 Windows 安卓子系统 (WSA) 上安装小红书应用
  • rce漏洞学习
  • Ubuntu2404装机指南
  • 【Docker-13】Docker Container容器
  • 虚幻基础:碰撞帧运算
  • UWB定位技术面临的主要挑战
  • go中我遇到的问题总结