Mybatis01

一、MyBatis核心知识点

1. 数据库字段与Java属性映射

  • 问题场景:数据库字段是下划线格式(如 delete_flag ),Java实体类属性是小驼峰格式(如 deleteFlag ),直接查询会导致映射失败。

  • 解决方式:

  • 方式1:SQL中用 AS 别名映射(不推荐):

sql

SELECT delete_flag AS deleteFlag FROM user_info

  • 方式2:MyBatis映射文件中用 <Result> 标签指定映射(灵活):

xml

<ResultMap id="userMap" type="UserInfo">

<Result column="delete_flag" property="deleteFlag"/>

<Result column="create_time" property="createTime"/>

</ResultMap>

<select id="selectList" resultMap="userMap">

SELECT * FROM user_info

</select>

  • 方式3:配置文件开启自动驼峰映射(推荐):

yaml

mybatis:

configuration:

map-underscore-to-camel-case: true # 下划线自动转小驼峰

2. MyBatis参数传递规则

  • 单参数:SQL中参数名可任意写(如 #{任意名} ):

java

// Mapper接口

UserInfo selectById(Integer id);

xml

<select id="selectById" resultType="UserInfo">

SELECT * FROM user_info WHERE id = #{param}

</select>

  • 多参数:

  • 规则:SQL中参数名必须与方法参数名一致(或用 @Param 指定别名)。

  • 错误示例(参数名不匹配):

java

List<UserInfo> selectByAgeAndGender(Integer age, Integer gender);

xml

<!-- 错误:SQL中用了param,但方法参数是age/gender -->

<select id="selectByAgeAndGender" resultType="UserInfo">

SELECT * FROM user_info WHERE age = #{param} AND gender = #{param2}

</select>

  • 正确示例1(参数名一致):

xml

<select id="selectByAgeAndGender" resultType="UserInfo">

SELECT * FROM user_info WHERE age = #{age} AND gender = #{gender}

</select>

  • 正确示例2(用 @Param 别名):

java

List<UserInfo> selectByAgeAndGender(@Param("ageParam") Integer age, @Param("genderParam") Integer gender);

xml

<select id="selectByAgeAndGender" resultType="UserInfo">

SELECT * FROM user_info WHERE age = #{ageParam} AND gender = #{genderParam}

</select>

3. MyBatis与JDBC的关系

  • MyBatis是JDBC的封装框架,简化了JDBC的重复代码(如连接创建、Statement创建、结果集映射等)。

  • 使用MyBatis仍需引入数据库驱动:

xml

<!-- 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>

<scope>runtime</scope>

</dependency>

4. 数据库配置注意事项

  • 密码为空时,配置文件中密码需用空字符串( password: "" )。

  • 密码为纯数字时,需用引号包裹( password: "123456" )。

yaml

spring:

datasource:

url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false

username: root

password: "123456" # 纯数字密码用引号

driver-class-name: com.mysql.cj.jdbc.Driver

二、接口设计与日志

1. 接口统一返回格式

  • 接口返回通常设计为对象,包含状态码、错误信息、真实数据:

java

public class Result<T> {

private Integer code; // 状态码(如200=成功,500=失败)

private String msg; // 错误原因

private T data; // 真实数据

// 省略构造器、getter/setter

}

2. 日志配置(Logback)

  • 日志作用:发现问题、定位问题、解决问题。

  • 配置示例(指定日志级别、输出路径):

yaml

logging:

level:

com.biti.controller: trace # 包级别日志

file:

name: loggers/app.log # 日志文件路径+名称

logback:

rollingpolicy:

max-file-size: 200MB # 单个日志文件最大大小

三、代码片段

1. MyBatis Mapper接口+映射文件

java

// Mapper接口

public interface UserInfoMapper {

List<UserInfo> selectList();

UserInfo selectById(Integer id);

List<UserInfo> selectByAgeAndGender(@Param("age") Integer age, @Param("gender") Integer gender);

Integer insertUser(UserInfo userInfo);

}

xml

<!-- 映射文件UserInfoMapper.xml -->

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3//apper.dtd">

<mapper namespace="com.biti.mapper.UserInfoMapper">

<resultMap id="userMap" type="com.biti.entity.UserInfo">

<result column="delete_flag" property="deleteFlag"/>

<result column="create_time" property="createTime"/>

<result column="update_time" property="updateTime"/>

</resultMap>

<select id="selectList" resultMap="userMap">

SELECT * FROM user_info

</select>

<select id="selectById" resultType="com.biti.entity.UserInfo">

SELECT * FROM user_info WHERE id = #{id}

</select>

<select id="selectByAgeAndGender" resultType="com.biti.entity.UserInfo">

SELECT * FROM user_info WHERE age = #{age} AND gender = #{gender}

</select>

<insert id="insertUser" parameterType="com.biti.entity.UserInfo">

INSERT INTO user_info (username, password, age) VALUES (#{username}, #{password}, #{age})

</insert>

</mapper>

2. 统一返回结果类

四、小结

别慌!MyBatis其实就是帮你简化数据库操作的工具,核心是"少写重复代码,专注写SQL"。

一、MyBatis是啥?

它是Java里的数据库操作框架,把JDBC(原生数据库操作)的重复步骤(连数据库、传参数、转结果)都封装好了,你只需要写SQL和定义实体类。

二、核心功能(解决的问题)

1. 字段自动映射:

数据库字段是 delete_flag (下划线),Java类属性是 deleteFlag (小驼峰),MyBatis能自动对应(配个 map-underscore-to-camel-case: true 就行)。

2. 参数传递:

  • 传1个参数:SQL里写 #{随便名} 都能用。

  • 传多个参数:SQL里的参数名要和方法参数名一模一样,或者用 @Param("别名") 指定。

3. 写SQL的方式:

可以在XML文件里写SQL(推荐,好维护),也可以在接口方法上用注解写(简单SQL用)。

三、用MyBatis的步骤(极简版)

  1. 引入MyBatis和数据库驱动的依赖(比如MySQL驱动)。

  2. 写数据库配置(地址、账号、密码)。

  3. 定义实体类(对应数据库表的字段)。

  4. 定义Mapper接口(声明要执行的方法,比如查列表、查详情)。

  5. 写XML映射文件(把接口方法和SQL对应起来)。

四、关键注意点

  • SQL里的参数名要和方法参数名对应,不然会报错"找不到参数"。

  • 数据库字段和Java属性名字不一样时,要么配自动驼峰映射,要么在XML里写 <Result> 标签指定对应关系。

简单说:MyBatis就是"让你写SQL更爽、不用操心数据库连接那些破事"的工具~

相关推荐
鬼蛟5 分钟前
Spring MVC
java·spring·mvc
qq_256247055 分钟前
Docker 部署 OpenClaw 踩坑实录:Web UI 访问、飞书配对及自定义模型配置
后端
困惑阿三7 分钟前
全栈部署排雷手册:从 405 报错到飞书推送成功
服务器·前端·后端·nginx·阿里云·node.js·飞书
2501_918126919 分钟前
学习所有6502写游戏动作的语句
汇编·嵌入式硬件·学习·游戏·个人开发
bug攻城狮11 分钟前
为什么 Spring Boot 要单元测试?
spring boot·后端·单元测试
iPadiPhone11 分钟前
性能之基:Java IO 体系深度解析、面试陷阱与实战指南
java·开发语言·后端·面试
夏日听雨眠12 分钟前
文件学习9
数据结构·学习·算法
野犬寒鸦13 分钟前
从零起步学习JVM|| 第二章:JVM基本组成及JVM内存区域详解
服务器·开发语言·后端·学习·面试·职场和发展
云烟成雨TD14 分钟前
Spring AI Alibaba 1.x 系列【2】架构、特性与生产级演示案例
java·人工智能·spring
iPadiPhone15 分钟前
Java NIO 核心原理解析、性能调优与大厂面试精要
java·后端·面试·nio