[2025.2.18 JavaWeb学习]Mybatis

入门

  • MyBatis是一款优秀的持久层(dao)框架,用于简化JDBC的开发
  • 使用:
    • IDEA创建SpringBoot模块,而后勾选MySQL Driver和MyBatis Framework
    • pom.xml引入了mybatis-spring-boot-starter起步依赖、com.mysql依赖包、org.springframework.boot单元测试依赖
    • pojo中,创建实体对象,属性和字段要相对应
    • 需要配置数据库的连接信息(properties):驱动类类名、数据库连接url、用户名、密码
    • @Mapper:在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器进行管理
    • java文测试接口件中使用@Select("select * from user");进行sql查找
    • 配置问题:

image

MyBatis与JDBC对比

  • JDBC(Java Database Connectivity),使用java语言操作关系型数据库的一套api

image

  • 本质:sun公司定义的一套操作所有关系型数据库的规范,即接口
  • 各个数据库可以去实现这套接口,提供数据库驱动jar包
  • 真正执行的代码时驱动jar包中的实现类

数据库连接池

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

image

  • 标准接口:DataSource,功能:获取连接Connection getConnection() throws SQLException

lombook

  • lombook是一个java类库,通过注解的方式自动生成构造器,并自动生成日志变量,简化java开发,可解决实体类定义复杂的问题:

image

image

  • 引入lombook依赖:
<dependency>
	<groupId>org.projectlombook</groupId>
	<artifactId>lombook</artifactId>
</denpendency>
  • lombook在编译时,会自动生成对应的java代码,还需要安装一个lombook插件(IDEA自带)

预编译SQL

  • 性能更高
  • 更安全(防止SQL注入),SQL注入是指:通过操作输入的数据来修改实现定义好的SQL语句,以达到执行代码对服务器进行攻击的方法

MyBatis基本操作

删除

  • 接口方法:
@Delete("delete from emp where id = #{id}")
public void delete(Integer);
  • 如果mapper接口方法形参只有一个普通类型的参数,#{...}里面的属性可以随便写

新增

image

  • 如果有多个参数,可以使用实体类将参数封装起来
  • 主键返回:需要获取数据库数据的主键,方法如下:

image

更新

image

查询

image

  • 数据封装:
    • 实体类属性名和数据库表查询返回的字段名不一致,mybatis会自动封装
    • 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装
    • 解决方案1:给字段起别名:original1 New1, original2 New2
    • 解决方案2:通过mybatis中的@Results@Result注解手动映射封装

image

  • 条件查询:

image

  • 参数名说明(原因:在springboot1.x版本中,变量的名称并不会在编译后的字节码文件中保留,以var x的形式保存,#{}无法获取参数):

image

MybatisXML映射文件配置MySQL

规范

  • XML映射文件名称和Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下

image

  • XML映射文件的namespace属性与Mapper接口全限定名一致
  • XML映射文件中sql语句的id与Mapper接口中方法名一致,并保持返回类型一致

image

  • IDEA注意事项:如果是package,可以使用.进行分隔,如果是directory则需要使用/进行分隔

动态SQL

  • 即随着用户输入或外部条件的变化而变化的SQL语句,称为动态SQL

image

  • <if>:用于判断条件是否成立,使用test属性进行条件判断,如果为true,则拼接SQL
  • <where>:只会在子元素有内容的情况下插入where子句,并且自动抹去子句开头的and和or
  • <set>:动态的在行首插入set关键字,并且删掉额外的逗号
  • <foreach>:循环遍历:

image

  • sql&&include

image

posted @ 2025-02-20 01:49  Luna-Evelyn  阅读(25)  评论(0)    收藏  举报