MyBatis基本操作

MyBatis基础

在这里插入图片描述

入门基础

MyBatis :一款优秀的框架,用于简化JDBC的开发。应用于DAO层

  • 实体类的属性最好用包装类

配置数据库连接信息的四要素代码
在这里插入图片描述

#驱动类名称
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=数据库密码

MyBatis的入门步骤

  • 创建Spring Boot 工程、数据库表,实体类
  • 引入Mabatis的相关依赖,配置Mybatis(数据库连接信息)
  • 编写Sql语句(通过注解的方式)创建一个接口,接口上加@Mapper注解,会自动生成接口的实现类对象,并将该对象交给IOC容器管理

JDBC

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

  • 各个厂商去实现这套接口,提供数据库驱动jar包
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

在这里插入图片描述

JDBC 开发代码过于繁琐,开发效率低下,所以不使用,仅了解

记录第一个Mapper程序

@Mapper//在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理,这样就可以在其他类中通过@Autowired注解实现这个接口
public interface UserMapper {

    @Select("select * from user")//将从user数据表中的数据查询再封装到User类中,表中字段与类的属性一一对应
    public List<User> list();//抽象方法
}

数据库连接池

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许程序复用现有的数据库的连接,而不是重新创建一个
  • 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏
    在这里插入图片描述

lombok

了解就好,添加相关注解可以减少代码量更美观,但是难以修改维护,ptg插件可一键生成
在这里插入图片描述

Mybatis 基础操作CRUD

delete

@Mapper
public interface EmpMapper {

    @Delete("delete from emp where id=#{id}")
    public void delete(Integer id);
}

#{…}占位符,可以接收可变的数据传输,为提高可读性,{}里面的属性应与形参名相同

占位符里面的属性名一定要与实体类的属性名完全一样!!!

测试代码

@Autowired
    private EmpMapper empMapper;

    @Test
    public void testDelete()
    {
        empMapper.delete(17);
    }

#{…}占位符还可以预编译sql,性能更高,使用预编译sql可以使缓存区不需要反复重建,可以防止sql注入
不要使用${…},会存在sql注入问题,改变原先的sql语句
在这里插入图片描述

新增

代码

@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)"+
            "values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptid},#{creatTime},#{updateTime})")
    //新增员工
    public void insert(Emp emp);

注意

  • value占位符李的字段名要与实体类的属性名完全一样,不然无法运行

主键返回
注解代码

@Options(useGeneratedKeys = true,keyProperty="id")//id为指定封装进bean类的某个属性

会自动将生成的主键值赋给emp对象的id属性,id是自增的,没有人为赋值

更新

更新的代码

@Update("update emp set username=#{username},name=#{name},gender=#{gender},image=#{image},job=#{job},entrydate=#{entrydate}," +
            "dept_id=#{deptid},update_time=#{updateTime} where id=#{id}")
    //修改员工
    public void update (Emp emp);

修改的id通过实体类的setId方法进行修改
在这里插入图片描述

查询操作

如果类中的属性名与表中的字段名不一致就不会返回具体的数据.而是返回null

三种解决方法
在这里插入图片描述

条件查询

//条件查询
    @Select("select * from emp where name like concat('%',#{name},'%') and gender=#{gender} and " +
            " entrydate between #{begin} and #{end} order by update_time desc")
    public List<Emp> list(String name,Short gender , LocalDate begin,LocalDate end);

因为#{…}不能直接放到%…%之间,所以需要使用contact()函数进行拼接

XML映射文件

通过配置XML文件实现sql语句,之前是通过注解来实现
规范

  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mpper接口放置在相同的包名下(同包同名)
  • XML映射文件的namespace属性为Mapper接口全限定名一致
  • XML 映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致
    具体见下图
    在这里插入图片描述

xml文件的约基本机构,包括官方约束

<?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="com.itsen.springbootmybatiscrud.mapper.EmpMapper">
    
</mapper>

在这里插入图片描述

mapper配置代码

<mapper namespace="com.itsen.springbootmybatiscrud.mapper.EmpMapper">
<!--    resultType单条记录所封装的类型就是只封装类的全类名-->
    <select id="list" resultType="com.itsen.springbootmybatiscrud.pojo.Emp">
        select * from emp where name like concat('%',#{name},'%') and gender=#{gender} and
        entrydate between #{begin} and #{end} order by update_time desc
    </select>
</mapper>

通过配置xml映射文件,久不需要在接口方法上添加注解

注解和XML文件两种方式的选择
使用Mybatis的注解,主要是来完成一些简单的增删改查功能.如果要实现复杂的SQL功能,建议使用XML来配置SQL语句

动态SQL

if where标签

当客户端要求值需要使用所有条件中的某几个条件进行查询时,就需要使用if语句,对传入的条件不为空的进行查询,查询语句用标签进行包裹,就会自动过滤语句中的and或者是or
代码例子

<select id="list" resultType="com.itsen.springbootmybatiscrud.pojo.Emp">
        select *
        from emp
        <where>
            <if test="name !=null">
                name like concat('%',#{name},'%')
            </if>
            <if test="gender !=null">
                and gender=#{gender}
            </if>
            <if test="begin!=null and end!=null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
        order by update_time desc
    </select>

标签动态地在行首插入SET关键字,并会删掉额外的逗号(用在update语句中)
在这里插入图片描述

foreach标签

按照员工id遍历删除员工信息的xml配置代码

<delete id="deleteByIds">
        delete from emp where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

  • collection:需要遍历的集合
  • item: 遍历出来的元素,一般写成删除依据的字段名
  • separate: 分隔符
  • open: sql语句中遍历开始前拼接的sql片段
  • close: 遍历结束后拼接的sql片段

sql include 标签

将一些通用的sql片段用标签包裹,需要时,用来进行引用对应的sql片段用于提高代码的复用性,便于维护

在这里插入图片描述

以上就是Mybatis的基本操作了,主要包括简单的基于注解或者XML映射文件的CRUD和动态sql的标签

pageHelper分页插件

了解,想用也可以
依赖

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>

操作步骤
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值