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更爽、不用操心数据库连接那些破事"的工具~

相关推荐
c***727436 分钟前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
q***235739 分钟前
配置MyBatis-Plus打印执行的 SQL 语句到控制台或日志文件中
数据库·sql·mybatis
Y***890841 分钟前
Neo4j图数据库学习(二)——SpringBoot整合Neo4j
数据库·学习·neo4j
s***353042 分钟前
SpringBoot集成Prometheus
spring boot·后端·prometheus
不光头强43 分钟前
mybatis中的延迟加载和一二级缓存
java·tomcat·mybatis
奋斗的小乌龟1 小时前
k8s测试环境开启远程调试
java·spring
理人综艺好会1 小时前
MySQL学习之go-mysql
学习·mysql·golang
M***29911 小时前
【Spring Boot】SpringBoot自动装配-Import
java·spring boot·后端
C***u1761 小时前
Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
spring boot·后端·spring