javaweb-mybatis

发布于:2024-04-29 ⋅ 阅读:(18) ⋅ 点赞:(0)

Mybatis

介绍

Java程序操作数据库,现在主流的方式是:Mybatis。

MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。

官网:https://mybatis.org/mybatis-3/zh/index.html

现在使用Mybatis操作数据库,就是在Mybatis中编写SQL查询代码,发送给数据库执行,数据库执行后返回结果。

操作

Mybatis操作数据库的步骤:

  1. 准备工作(创建springboot工程、数据库表、实体类)

  2. 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

  3. 编写SQL语句(注解/XML)

第一步

导入 mybatis的起步依赖、mysql的驱动包。

        <!-- mybatis起步依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.0</version>
        </dependency>

        <!-- mysql驱动包依赖 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

第二步 

连接数据库的四大参数:

  • MySQL驱动类

  • 登录名

  • 密码

  • 数据库连接字符串

基于上述分析,在Mybatis中要连接数据库,同样也需要以上4个参数配置。

//在springboot项目中,可以编写application.properties文件,配置数据库连接信息。

配置

application.properties:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234

第三步

创建一个包 mapper

Mybatis的持久层接口规范一般都叫 XxxMapper

然后就可以连接

JDBC

java语言操作数据库呢,只能通过一种方式:使用sun公司提供的 JDBC 规范

Mybatis框架,就是对原始的JDBC程序的封装。

JDBC: ( Java DataBase Connectivity )

就是使用Java语言操作关系型数据库的一套API

直接基于JDBC程序来操作数据库,代码实现非常繁琐,通常会使用Mybatis这类的高级技术来操作数据库,从而简化数据库操作、提高开发效率。

数据库连接池

mybatis中,使用了数据库连接池技术,避免频繁的创建连接、销毁连接而带来的资源浪费。

数据库连接池的好处:

  1. 资源重用

  2. 提升系统响应速度

  3. 避免数据库连接遗漏

常见的数据库连接池:

  • C3P0

  • DBCP

  • Druid

  • Hikari (springboot默认)追光者

如果我们想把默认的数据库连接池切换为Druid数据库连接池,只需要完成以下两步操作即可:

参考官方地址:druid/druid-spring-boot-starter at master · alibaba/druid · GitHub

  1. 在pom.xml文件中引入依赖

<dependency>
    <!-- Druid连接池依赖 -->
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>
  1. 在application.properties中引入数据库连接配置

方式1:

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.druid.username=root
spring.datasource.druid.password=1234

方式2:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=1234

lombok

Lombok是一个实用的Java类库,可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。

通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

使用

第一步

在pom.xml文件中引入依赖

<!-- 在springboot的父工程中,已经集成了lombok并指定了版本号,故当前引入依赖时不需要指定version -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

第二步

在实体类上添加注解

// 说明:@Data注解中不包含全参构造方法,通常在实体类上,还会添加上:全参构造、无参构造
@Data //getter方法、setter方法、toString方法、hashCode方法、equals方法
@NoArgsConstructor //无参构造
@AllArgsConstructor//全参构造

日志输出

在Mybatis当中我们可以借助日志,查看到sql语句的执行、执行传递的参数以及执行结果。具体操作如下:

  1. 打开application.properties文件

  2. 开启mybatis的日志,并指定输出到控制台

#指定mybatis输出日志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

预编译SQL

性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)

更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

主键返回

在数据添加成功后,需要获取插入数据库数据的主键。

 //会自动将生成的主键值,赋值给emp对象的id属性
    @Options(useGeneratedKeys = true,keyProperty = "id")

驼峰命名 

  • 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。

  • 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

开启驼峰命名(推荐):如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射

驼峰命名规则: abc_xyz => abcXyz

  • 表中字段名:abc_xyz

  • 类中属性名:abcXyz

# 在application.properties中添加:
mybatis.configuration.map-underscore-to-camel-case=true

XML配置文件

在resources目录下,创建和接口一样的包名

xml映射文件中的dtd约束,直接从mybatis官网复制即可

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
 
</mapper>

 XML映射文件的namespace属性为Mapper接口全限定名

返回类型

resultType

 <select id="list" resultType="com.itheima.pojo.Emp">

MybatisX

一款基于IDEA的快速开发Mybatis的插件,为效率而生

MybatisX快速定位。

Mybatis动态SQL

<if>

        用于判断条件是否成立,如果条件为true,则拼接SQL

        形式:

        <if test="name != null"> … </if>

<where>

        where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR

<set>

        动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)

<foreach>  

<foreach collection="集合名称" item="集合遍历出来的元素/项" separator="每一次遍历使用的分隔符" 
         open="遍历开始前拼接的片段" close="遍历结束后拼接的片段">
</foreach> 

SQL片段: 抽取重复的代码

<sql id="commonSelect">
    select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp
</sql>

 <include> 标签在原来抽取的地方进行引用

<include refid="commonSelect"/>