目录
一、MyBatis简介
1,MyBatis是什么?
1.1 简述
MyBatis是一个优秀的基于java的持久层框架。它内部封装了JDBC,使开发者只需要关注SQL语句,而不需要花费精力去处理加载驱动、创建连接、创建执行者等复杂的操作。
MyBatis可以通过简单的xml或注解的方式将要执行的各种Statement配置起来,并通过java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句。
注:(Statement 对象用于将 SQL 语句发送到数据库中;Statement 接口提供了执行语句和获取结果的基本方法。)
1.2 优点
-
与JDBC相比,减少了极大的代码量。
-
MyBatis是最简单的持久化框架,小巧并且简单易学。
-
MyBatis灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
-
提供XML标签,支持编写动态SQL语句(XML中使用if, else)。
-
提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)
1.3缺点
-
SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
-
SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
二、SpringBoot集成Mybatis操作步骤
1,引入mybatis和mysql的依赖
在我们的maven的java工程中的pom.xml文件中,引入我们的jar,如下:
<!-- mybatis起步依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!-- mysql驱动 -->
<!-- mysql驱动包依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
2,编写MyBatis核心配置文件,替换连接信息,简化硬编码问题
# 数据库连接信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_xxxx
username: root
password: root
# 文件上传配置
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
# mybatis配置
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
3,用注解或编写Sql映射文件,解决操作sql语句,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="com.xiaoxiang.mapper.UserMapper">
<!--登录:根据用户名称查询用户信息-->
<select id="findByUsername" resultType="com.xiaoxiang.pojo.User">
select id,birthday,gender,username,password,
remark,station,telephone
from t_user
where username = #{username} limit 1;
</select>
</mapper>
规则:
1、Mapper映射文件和Mapper接口在编译后需要在同一个目录【也可以改】
2、Mapper映射文件的namespace属性 写 Mapper接口的全类名
3、Mapper映射文件的id属性 写 Mapper接口的方法名
4、Mapper映射文件的 resultType 写 接口返回值的全类名【如果是集合,写泛型全类名】
4,开发
三、MyBatis编程步骤
1、创建SqlSessionFactory
SqlSessionFactory是 MyBatis 的重要对象之一,是创建 SqlSession的工厂。
2、 通过SqlSessionFactory创建SqlSession
SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行已映射的SQL语句。
3、 通过sqlsession执行数据库操作
4、 调用session.commit()提交事务
5、 调用session.close()关闭会话
四、使用区别
1、#{} 和 ${} 有什么区别?
-
#{}是占位符,预编译处理; ${}是拼接符,字符串替换,没有预编译处理。
-
Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值
-
#{} 可以有效的防止SQL注入,提高系统安全性; ${}不能防止SQL注入
-
#{} 只能操作跟数据字表字段相关的列值,跟列值无关的只能使用 ${}
-
#{}的变量替换是在DBMS中; ${}的变量替换是在DBMS外
-
项目中如何使用这两个符号先用#{},不行再用${}
2、模糊查询 like 语句怎么写?
-
’%${question}%’可能引起 SQL 注入,不推荐
-
"%"#{question}"%"注意:因为#{…}解析成 sql 语句时候,会在变量外侧自动加单引号' ',所以这里%需要使用双引号"",不能使用单引号' ',不然会查不到任何结果。
-
CONCAT(' %’,#{question},' %’)使用CONCAT()函数,推荐
-
使用 bind 标签
<select id="listUserLikeUsername" resultType="com.jourwon.pojo.User"> <bind name="pattern" value="'%' + username + '%'" /> select id,sex,age,username,password from person where username LIKE #{pattern} </select>
未完待续!!