当前位置: 首页 > news >正文

0x04 jdbc和mybatis

JDBC

简介

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

1740794805475.png

jdbc的使用

public class JdbcTest {
    @Test
    public void testUpdate() throws ClassNotFoundException, SQLException {
        //1. 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取数据库连接
        String url = "jdbc:mysql://localhost:3306/web01";
        String username = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, username, password);
        //3. 获取sql语句执行对象
        Statement statement = connection.createStatement();
        //4. 执行sql
        int i = statement.executeUpdate("update user set age = 25 where id = 1");
        System.out.println("SQL语句执行完影响的记录数为" + i);
        //5. 释放资源
        statement.close();
        connection.close();
    }
}

jdbc执行查询语句

public class JdbcTest {
    @Test
    public void testSelect() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取数据库连接
        String url = "jdbc:mysql://localhost:3306/web01";
        String username = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, username, password);
        //3. 获取sql语句执行对象
        Statement statement = connection.createStatement();
        //4. 执行sql
        ResultSet resultSet = statement.executeQuery("select * from user where username='daqiao'");
        //解析查询到的语句
        while (resultSet.next()) {
            User user = new User(resultSet.getInt("id")
                                ,resultSet.getString("username")
                                ,resultSet.getString("password")
                                ,resultSet.getString("name")
                                ,resultSet.getInt("age")
            );
            System.out.println(user);
        }
        //5. 释放资源
        statement.close();
        connection.close();
    }
}

预编译的sql

1740798444072.png

安全:可以防止SQL注入

性能更高:主要是利用了缓存机制来提高性能

1740798873882.png

MyBatis

简介

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

1740799136080.png

简化代码:

MyBatis几乎免除了所有JDBC代码以及设置参数和获取结果集的工作。

1740799225296.png

mybatis的辅助配置

  1. 配置sql提示

1740813959808.png

1740814002869.png

1740814062045.png

配置mybatis的日志输出

# 配置mybatis的日志输出
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

数据库连接池

数据库连接池是一个容器,负责分配、管理数据库连接。

在没有数据库连接池的情况下执行一条sql语句的过程:

创建连接 --> 执行sql --> 关闭连接 --> 创建连接 --> 执行sql --> 关闭连接 --> ...

在有数据库连接池的情况下

从数据库连接池拿出一个连接 --> 执行sql --> 归还连接 --> 拿出连接 --> 执行SQL --> 归还连接

删除数据

1740817209801.png

XML映射配置

在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句,配置时有一些规则。

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下**(同包同名)**
  2. XML映射文件的namespace属性为Mapper接口全限定名一致
  3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致

1740839269094.png

那么问题来了,有注解和XML映射这两种方式,我们到底用哪个?

这个就是一个见仁见智的问题,spring官方建议的是简单sql使用注解,而复杂sql则使用XML映射

XML映射文件辅助配置

对于上面xml映射配置的第一条规则,如果不放在同一包下,也想让xml可以找到对应的位置就需要在application.properties中进行如下配置

# 指定XML映射配置文件的位置

mybatis.mapper-locations=classpath:mapper/*.xml
# 上面*.xml表示classpath下面的所有xml文件

SpringBoot项目配置文件

SpringBoot项目提供了多种属性配置方式**(properties、yaml、yml)**

properties使用key-value方法臃肿、层级结构不清晰

1740841400195.png

yaml|yml更加简洁、结构清晰

1740841466399.png

格式:

  • 数值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • **#**表示注释

例子

properties文件

spring.application.name=mybatis


spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/web01
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

mybatis.mapper-locations=classpath:mapper/*.xml

yaml/yml

spring:
  application:
    name: mybatis
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/web01
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/*.xml

相关文章:

  • 初阶数据结构(C语言实现)——3顺序表和链表(1)
  • 腾讯游戏完成架构调整 IEG新设五大产品事业部
  • 迷你世界脚本生物接口:Creature
  • Navicat连接虚拟机数据库详细教程
  • PAT乙级(1045 快速排序)C语言详解
  • 基于SpringBoot+Vue的医院挂号管理系统+LW示例参考
  • 【UI设计——陕西红富士苹果海报分享】
  • 【深度学习】Hopfield网络:模拟联想记忆
  • 前端开发常用的加密算法
  • MFC: 控件根据文本内容大小自动调整
  • git配置多个SSH key
  • ES scroll=1m:表示快照的有效时间为1分钟。怎么理解
  • 使用hutool将json集合对象转化为对象
  • 02_NLP文本预处理之文本张量表示法
  • SpringBoot3—核心特性:基础特性
  • Spring 原理(很多面试题)
  • (下:补充——五个模型的理论基础)深度学习——图像分类篇章
  • 【星云 Orbit • STM32F4】03g. 按键玩法七:矩阵键盘单个触发
  • 迷你世界脚本方块接口:Block
  • 力扣hot 100之矩阵四题解法总结
  • 30平米的无障碍酒吧里,我们将偏见折叠又摊开
  • A股午后拉升,沪指收复3400点:大金融发力,两市成交超1.3万亿元
  • 杭州“放大招”支持足球发展:足球人才可评“高层次人才”
  • 硅料收储挺价“小作文”发酵光伏板块罕见大涨,知情人士:确实在谈
  • A股三大股指涨跌互现:银行股领涨,两市成交12915亿元
  • 上海北外滩开发建设五周年交出亮眼答卷,未来五年有何新目标?