一.配置数据库
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注入的安全性问题
排序功能, 表名, 字段名作为参数时要用到${ }