MyBatis数据库配置与SQL操作全解析

一.配置数据库

properties

复制代码
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
连接数据库的⽤⼾名
spring.datasource.username=
连接数据库的密码
spring.datasource.password=

yml

复制代码
spring:
  datasource:
  url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
  username: 
  password: 
  driver-class-name: com.mysql.cj.jdbc.Driver

@Mapper注解:表示是MyBatis中的Mapper接⼝

程序运行时, 框架会自动生成接口的实现类对象(代理对象),并给交Spring的IOC容器管理

二.打印MyBatis日志

properties

复制代码
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

yml

复制代码
mybatis:
  configuration: 
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

三.参数传参

⽅法中添加⼀个参数,将方法中的参数,传给SQL语句,#{ } 的方式获取方法中的参数

@Param:设置参数的别名, 如果使用@Param 设置别名, #{ }里面的属性名必须和

@Param 设置的⼀样

1.MyBatis SQL注解形式

增(insert)
复制代码
@Insert("SQL语句")
Integer insert(传入的参数/对象)

获取自增的元素:可以用@Options(useGeneratedKeys = true, keyProperty = "获取的元素")

删(Delete)
复制代码
@Delete("SQL语句")
void delete(传入的参数/对象)
改(Update)
复制代码
@Update("SQL语句")
void update(传入的参数/对象)
查(Select)
复制代码
@Select("SQL语句")
List<数据库类型及对象> 方法名()

方法用对象UserInfo接收返回结果, MySQL查询出来数据为⼀条, 就会自动赋值给对象

方法用List<UserInfo>接收返回结果, MySQL查询出来数据为⼀条或多条时, 也会自动赋值给List

解决MySQL中自动映射问题

数据库中没有驼峰大小写分割只能用下划线分割

1.起别名

查询中使用as来给数据库中的变量名改名,将下划线分割的名字改为Java的驼峰式

2.Results映射

在查询SQL写完后加上@Results注解来进行手动映射

复制代码
@Results(id=" "{
            @Result(column = "数据库中变量名",property = "Java的驼峰式")
})
使⽤ id 属性给该 Results 定义别名,
使⽤ @ResultMap 用来复⽤映射的名字  @ResultMap(value=" ")
3.配置驼峰自动转换
复制代码
yml
mybatis: 
  configuration:
    map-underscore-to-camel-case: true #配置驼峰⾃动转换
驼峰命名规则: abc_xyz => abcXyz_

2.MyBatis XML形式

配置连接
properties
复制代码
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=
#连接数据库的密码
spring.datasource.password=
#配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:文件夹/XML文件名.xml
yml
复制代码
# 数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  #配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
  mybatis:
    mapper-locations: classpath:文件夹/XML文件名.xml
持久层代码

在引用SQL查询的类方法上加入@Mapper

在XML文件里加入

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="XML文件所在的绝对路径">
</mapper>

增(Insert)

复制代码
<insert id="创建接口方法名">
  SQL语句
</insert>

如果创建接口时加上了@Param更改了传入变量的名SQL语句中传入参数就更改为

复制代码
#{更改名.对象中的属性名}

自增属性

复制代码
<insert id="创建接口方法名" useGeneratedKeys="true" keyProperty="id">

删(Delete)

复制代码
<delete id="创建接口方法名">
  SQL语句
</delete>

改(Update)

复制代码
<update id="创建接口方法名">
  SQL语句
</update>

查(Select)

复制代码
<select id="创建接口方法名" resultType="创建传入对象文件所在的绝对路径">
  SQL语句
</select>

解决MySQL中自动映射问题------数据库中没有驼峰大小写分割只能用下划线分割

起别名和配置驼峰自动转换一摸一样

结果映射

复制代码
<resultMap id="BaseMap" type="创建传入对象文件所在的绝对路径">
    #用主键来更好识别唯一数据
    <id column="主键名" property="主键名"></id>
    <result column="数据库中变量名" property="Java的驼峰式"></result>
</resultMap

#{ }是预编译SQL和${ }是即时SQL区别

#{ }使用的是预编译SQL, 通过 ? 占位的方式, 提前对SQL进行编译, 然后把参数填充到SQL语句中

#{ } 会根据参数类型, 自动拼接引号

${ }会直接进行字符替换, ⼀起对SQL进⾏编译,就会有SQL注入的安全性问题

排序功能, 表名, 字段名作为参数时要用到${ }

相关推荐
zcn12617 分钟前
row_number()函数与group by性能比较
数据库·sql优化改写
小K讲AI营销37 分钟前
AI基础设施融资路径的中美比较:资本市场模式与政策金融模式
大数据·数据库·人工智能
净水深流43 分钟前
中国冷链冷库行业数据分析:从规模扩张到技术驱动
大数据·数据库·人工智能·冷库冷链
李兆龙的博客1 小时前
从一到无穷大 #94:ClickHouse TimeSeries——时间线组织与 Prometheus 兼容性
数据库
冰暮流星1 小时前
事务的四个特性(ACID)详解
数据库
byte轻骑兵1 小时前
时序数据库选型全指南|大数据工业场景Apache IoTDB落地实操
大数据·数据库·人工智能·apache iotdb
Sirens.2 小时前
MySQL数据库:JDBC编程
数据库·mysql
蓝速科技2 小时前
会议室门牌签到功能选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
Hrain-AI11 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
净水深流12 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链