MyBatis(简述)

目录

一、MyBatis简介

1,MyBatis是什么?

二、SpringBoot集成Mybatis操作步骤

三、MyBatis编程步骤

四、使用区别

1、#{} 和 ${} 有什么区别?

2、模糊查询 like 语句怎么写?


一、MyBatis简介

1,MyBatis是什么?

1.1 简述

        MyBatis是一个优秀的基于java的持久层框架。它内部封装了JDBC,使开发者只需要关注SQL语句,而不需要花费精力去处理加载驱动、创建连接、创建执行者等复杂的操作。

        MyBatis可以通过简单的xml注解的方式将要执行的各种Statement配置起来,并通过java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句。

  注:(Statement 对象用于将 SQL 语句发送到数据库中;Statement 接口提供了执行语句和获取结果的基本方法。)

1.2 优点

  1. 与JDBC相比,减少了极大的代码量。 

  2. MyBatis是最简单的持久化框架,小巧并且简单易学。 

  3. MyBatis灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。 

  4. 提供XML标签,支持编写动态SQL语句(XML中使用if, else)。  

  5. 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)

1.3缺点

  1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。 

  2. 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>

    未完待续!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值