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

MyBatis操作数据库(1)

1. MyBatis 简介

MyBatis 是一款持久层框架,简化了 JDBC 的复杂操作,通过配置和映射文件将 Java 对象与数据库表关联。核心优势:

  • 自动管理资源:无需手动关闭连接、释放资源。

  • 动态 SQL:支持参数绑定、条件查询等。

  • 灵活映射:支持结果集与 Java 对象的自动映射。

2. 快速入门
2.1 准备工作
  1. 创建 Spring Boot 工程,添加依赖:

<!-- MyBatis 依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

2.数据库表准备

CREATE TABLE `user_info` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(127) NOT NULL,
    `password` VARCHAR(127) NOT NULL,
    `age` TINYINT NOT NULL,
    `gender` TINYINT DEFAULT '0' COMMENT '1-男 2-女 0-默认',
    `phone` VARCHAR(15) DEFAULT NULL,
    `delete_flag` TINYINT DEFAULT '0' COMMENT '0-正常 1-删除',
    `create_time` DATETIME DEFAULT NOW(),
    `update_time` DATETIME DEFAULT NOW() ON UPDATE NOW(),
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.实体类

@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}
2.2 配置数据源

在 application.yml 中配置数据库连接:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&characterEncoding=utf8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
3. 注解方式操作数据库
3.1 查询操作

Mapper 接口

@Mapper
public interface UserInfoMapper {
    @Select("SELECT username, password, age, gender, phone FROM user_info")
    List<UserInfo> queryAllUser();
}

测试类

@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;

    @Test
    void queryAllUser() {
        List<UserInfo> userList = userInfoMapper.queryAllUser();
        System.out.println(userList);
    }
}
3.2 参数传递

使用 #{参数名} 动态传参:

@Select("SELECT * FROM user_info WHERE id = #{id}")
UserInfo queryById(Integer id);
3.3 插入操作

返回自增主键:

@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO user_info (username, password) VALUES (#{username}, #{password})")
Integer insert(UserInfo userInfo);
4. XML 方式操作数据库
4.1 配置 XML 路径

在 application.yml 中指定 XML 文件位置:

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
4.2 编写 XML 文件

UserInfoMapper.xml

<mapper namespace="com.example.mapper.UserInfoMapper">
    <select id="queryAllUser" resultType="UserInfo">
        SELECT * FROM user_info
    </select>

    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO user_info (username, password)
        VALUES (#{username}, #{password})
    </insert>
</mapper>
4.3 结果映射

解决字段名与属性名不一致问题:

<resultMap id="userMap" type="UserInfo">
    <id column="id" property="id"/>
    <result column="delete_flag" property="deleteFlag"/>
    <result column="create_time" property="createTime"/>
    <result column="update_time" property="updateTime"/>
</resultMap>
5. 常见问题与解决方案
5.1 字段名映射
  1. 开启驼峰命名(推荐)

mybatis:
  configuration:
    map-underscore-to-camel-case: true

   2. 手动别名

SELECT delete_flag AS deleteFlag FROM user_info
5.2 #{} 与 ${} 的区别
  • #{}:预编译 SQL,防止 SQL 注入。

  • @Select("SELECT * FROM user_info WHERE username = #{name}")
    UserInfo queryByName(String name);

    ${}:直接拼接 SQL,适用于动态排序或表名:

@Select("SELECT * FROM user_info ORDER BY ${sortKey}")
List<UserInfo> queryBySort(@Param("sortKey") String sortKey);
5.3 模糊查询

使用 CONCAT 函数避免 SQL 注入:

@Select("SELECT * FROM user_info WHERE username LIKE CONCAT('%', #{key}, '%')")
List<UserInfo> queryByKeyword(String key);
6. 多表查询示例

实体类

@Data
public class ArticleInfo {
    private Integer id;
    private String title;
    private String content;
    private Integer userId;
    private String username; // 关联用户表字段
}

Mapper 接口

@Select("SELECT a.*, u.username FROM article_info a LEFT JOIN user_info u ON a.user_id = u.id WHERE a.id = #{id}")
ArticleInfo getArticleWithUser(Integer id);
7. 数据库连接池

Spring Boot 默认使用 Hikari,切换为 Druid

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.21</version>
</dependency>
8. 总结
  • 核心功能:MyBatis 通过注解或 XML 简化 SQL 操作,支持动态 SQL 和结果映射。

  • 最佳实践

    • 优先使用 #{} 防止 SQL 注入。

    • 开启驼峰命名简化字段映射。

    • 复杂 SQL 使用 XML 配置,简单操作使用注解。

  • 企业规范:表名小写下划线分隔,必备字段 idcreate_timeupdate_time

http://www.dtcms.com/a/112147.html

相关文章:

  • linux安装redis
  • PyTorch使用(7)-张量常见运算函数
  • AIGC实战——CycleGAN详解与实现
  • NVIDIA AgentIQ 详细介绍
  • 从Keep-Alive到页面关闭:解决Vue和React生命周期函数不触发的实战技巧
  • 相干光信号处理的一些基础知识
  • Spring依赖注入最佳实践:应对接口多实现的挑战
  • Centos7.9怎样安装Mysql 5.7
  • MySQL数据库如何在线修改表结构及字段类型?
  • FreeRTOS/任务创建和删除的API函数
  • HTML表单属性1
  • 线程同步与互斥(上)
  • 计算机通识
  • NB-IoT单灯控制器:智慧照明的“神经末梢”
  • 蓝桥杯嵌入式第15届真题-个人理解+解析
  • 【系统】换硬盘不换系统,使用WIN PE Ghost镜像给电脑无损扩容换硬盘
  • Python3.13安装教程-2025最新版超级详细图文安装教程(附所需安装包环境)
  • PhotoShop学习04
  • 详解大模型四类漏洞
  • Vue2+Vue3 45-90集学习笔记
  • P12013 [Ynoi April Fool‘s Round 2025] 牢夸 Solution
  • CMAKE中使用外部动态库
  • C++中,应尽可能将引用形参声明为const
  • Smart Link 技术全面解析
  • 使用人工智能大模型腾讯元宝和ttsmp3工具,免费使用文字进行配音
  • Python入门(6):Python序列结构-元组
  • FastAPI-Cache2: 高效Python缓存库
  • Linux系统调用编程
  • 嵌入式开发中栈溢出的处理方法
  • MySQL学习笔记(一)——MySQL下载安装配置