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注入的安全性问题

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

相关推荐
itfallrain32 分钟前
Spring 构造器循环依赖排查:@RequiredArgsConstructor + @Lazy 到底有没有生效
数据库·python·spring
Database_Cool_1 小时前
AnalyticDB MySQL vs StarRocks/ByteHouse:云数仓选型指南——全托管 vs 自建方案
数据库·数据仓库·mysql·阿里云
Omics Pro1 小时前
「自兹以往」动物肠道微生物组
数据库·人工智能·机器学习·语言模型·自然语言处理
zzz_23681 小时前
【Redis】分布式锁完整演进
数据库·redis·分布式
mN9B2uk172 小时前
数据库的约束简介
java·数据库·sql
计算机安禾2 小时前
【数据库系统原理】第4篇:关系数据结构的形式化定义:域、笛卡尔积与关系模式
数据结构·数据库·算法
Henry-SAP2 小时前
SAP(ERP) BOM变更实时同步MRP方案
数据库·云原生
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题 第99题】【Mysql篇】第29题:如何选择合适的分布式主键方案?
java·数据库·分布式·mysql·面试
倔强的石头_3 小时前
kingbase备份与恢复实战(七)—— 恢复演练与验收:从“能恢复”到“可交付预案”
数据库
满昕欢喜3 小时前
第2章 SQL Server 2019服务器管理
数据库·sqlserver