MyBatis基础使用

本文详细介绍了如何在SpringBoot项目中集成MyBatis,包括配置数据库连接,创建Mapper接口,使用XML映射,动态SQL的使用,以及一些常见问题如数据库连接池、Lombok和主键返回等。
摘要由CSDN通过智能技术生成

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1)创建的springboot工程中,在application.properties中配置MyBatis相关连接信息:

#配置数据库的连接信息
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url地址
spring.datasource.url=jdbc:mysql://地址
#连接数据库的用户名
spring.datasource.username=用户名
#连接的密码
spring.datasource.password=密码

2)创建mapper接口类:

/**
 * 三层架构的数据处理层
 */
@Mapper // 表示程序在运行时,会自动生成该接口的实现类对象,将对象交给IOC容器管理
public interface EmpMapper {
​
    /**
     * 定义查询接口
     * @return 所有查询的结果
     */
    @Select("select * from tb_emp")  // 表示该接口是查询接口
    public List<User> insert();
​
    /**
     * 定义删除接口
     * @param id 通过指定的ID删除,#{}最后会被?替代形成预编译sql,${}是拼接有sql注入的风险
     */
    @Delete(value = "delete from tb_emp where id = #{id}")
    public void delete(Integer id);
​
}

3)配置sql提示:

4)配置mybatis日志信息:

# 配置mybatis日志信息,输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

5.1、JDBC介绍

jdbc:就是使用java语言操作关系型数据库的一套API,他只是接口,实现由各个数据库厂商实现,各个厂商实现的又叫数据库的驱动,由于JDBC操作赋值,效率低下,就有mybatis框架进行封装简化开发,提高效率

5.2、数据库连接池

转换数据库连接池时,只需要引入对应的依赖

5.3、lombok

5.4、主键返回

在添加数据成功后,需要获取插入数据库数据的主键,需要在插入数据的方法前面添加@Options(keyProperty="id",useGeneratedKeys=true)进行标识

5.5、数据封装

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

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

解决方法:

5.6、XML映射文件

配置xml映射文件的约束:mybatis官网入门有相关配置,不需要记忆

<?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>

</mapper>

使用IDEA中的mybatisx插件可以标识映射文件

5.7、动态sql

随着用户的输入或外部条件变化也变化的sql语句,称为动态sql

  • <if>:用于判断条件是否成立,使用text属性进行条件判断,如过条件为true,则拼接

  • <where>:where标签只会在子元素有内容的情况下插入where子句,而且还会自动去除子句开头的and或or

  • <set>:动态的在行首插入set关键字,并会删掉额外的逗号

<select id="接口名" resultType="com.springmybatis.pojo.User">
        select *
        from tb_emp
        <where>
            <if test="name != null">name like concat('%', #{name}, '%')</if>
            <if test="gender != null">and gender = #{gender}</if>
            <if test="start != null and end != null">and entryDate between #{start} and #{end}</if>
        </where>
        order by updateTime desc
    </select>
​
    <update id="接口名">
        update tb_emp
        <set>
            <if test="userName != null ">userName=#{userName},</if>
            <if test="name != null ">name=#{name},</if>
            <if test="gender != null ">gender=#{gender},</if>
            <if test="userName != null ">image=#{image},</if>
            <if test="image != null ">job=#{job},</if>
            <if test="entryDate != null ">entryDate=#{entryDate},</if>
            <if test="deptId != null ">dept_id = #{deptId},</if>
            <if test="updateTime != null ">updateTime=#{updateTime}</if>
            where id = #{id}
        </set>
    </update>
  • <forearch>:配合删除多个的时候使用

  • <sql>和<include>:定义重复sql时使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值