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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值