一、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的步骤(极简版)
-
引入MyBatis和数据库驱动的依赖(比如MySQL驱动)。
-
写数据库配置(地址、账号、密码)。
-
定义实体类(对应数据库表的字段)。
-
定义Mapper接口(声明要执行的方法,比如查列表、查详情)。
-
写XML映射文件(把接口方法和SQL对应起来)。
四、关键注意点
-
SQL里的参数名要和方法参数名对应,不然会报错"找不到参数"。
-
数据库字段和Java属性名字不一样时,要么配自动驼峰映射,要么在XML里写 <Result> 标签指定对应关系。
简单说:MyBatis就是"让你写SQL更爽、不用操心数据库连接那些破事"的工具~
