文章目录
简介
之后我们不能一直在图形化界面来操作数据库
需要用Java来操作数据库
对应的框架技术就是-Mybatis
Mybatis用于简化JDBC(java程序操作数据库)开发
Mybatis快速入门
我们是在SpringBoot中使用Mybatis的
新建模块
选择Mybatis相关依赖
然后定义实体类pojo中的user和我们的数据库中的表对应
一般推荐建实体类用包装类,int就用Integer
对应tinyint用Short(Java不支持无符号,所以要多一个字节的short)
在然后配置Myabtis
在我们resource下的application.properties中存储
这四个格式是固定的
#驱动类名称
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=123456
最后第三步编写sql语句
Mapper,@Mappper会将接口交给IOC容器
IOC容器会生成实现接口的类
@Select里面就是注释语句呗
在test测试类进行测试
此时用DI(依赖注入)的@AutoWired就可以得到userMapper对象
然后调用即可
输出成功
小插曲
中间报错很多次
主要是
mybatis和jdk的版本不合
还有spring版本和jdk版本不合
需要在pom.xml里更改
我用的JDK11,对应依赖
<dependencies>
<dependency>
<!--mysql起步依赖-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<!--mysql驱动包-->
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<!--springboot单元测试-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>2.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
这个是那个框架版本(继承的spring框架)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
配置SQL提示
当我们写这个语句的时候是没有提示的
如果让它变的有提示呢?
需要进行配置
这样的话就有提示了
可能错的地方
配置一下数据库就可以
注意:必须是连接到对应的数据库
到指定的数据库,而不是只到localhost:3306
当然到DMBS这层可以像mybatis.user这写表
这样就不会报错了
JDBC介绍
之前写过文章,这里不详细写了
主要是mybatis和JDBC的联系
这就是JDBC程序
也是mybatis的底层
@Test
public void testJdbc() throws Exception {
//1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取连接对象
String url = "jdbc:mysql://localhost:3306/mybatis";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
//3. 获取执行SQL的对象Statement,执行SQL,返回结果
String sql = "select * from user";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
//4. 封装结果数据
List<User> userList = new ArrayList<>();
while (resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
short age = resultSet.getShort("age");
short gender = resultSet.getShort("gender");
String phone = resultSet.getString("phone");
User user = new User(id,name,age,gender,phone);
userList.add(user);
}
//5. 释放资源
statement.close();
connection.close();
}
JDBC和mybatis对比
JDBC弊端:硬编码
重复获取连接和释放连接,资源浪费,性能降低
获取字段过程繁琐
关于mybatis怎么解决重复获取和释放连接问题(其他两个问题都看得出来吧)
就是建立了一个数据库连接池,用的时候拿
不用的时候归还给连接池
数据库连接池之后会单独了解
在springboot里面用mybatis我们需要注意的点
在正确的导入依赖后(记得检查版本号是否匹配)
基本就这两个点,一个是数据库连接配置信息
还有一个就是Mapper代理开发
数据库连接池
简介
初始化一定连接对象
当有sql语句执行从连接池获取连接,sql语句执行完把语句归还给连接池
是归还和调用的关系(更高效)
而不是建立和释放的关系
且当有客户端获取连接,但该连接一直空闲,数据库连接池会检测该连接空闲时间,当超过一个阈值就会把连接收回
实现
后面两个连接池常用
想要更换成druid连接池
有两种方式
1.在pom.xml导入依赖
2.如图更改下配置文件
如果访问的话
把配置信息改成下面这种形式!
# 2. 配置相关信息
# 第一种配置方法:通过spring.datasource.type配置druid
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver # mysql 驱动
# url: jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&serverTimezone=UTC # 连接数据库
# username: root # 数据库账户
# password: root # 数据库密码
# type: com.alibaba.druid.pool.DruidDataSource
# 第二种配置方法:druid 专用配置(推荐)
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver # mysql 驱动
url: jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&serverTimezone=UTC # 连接数据库
username: root # 数据库账户
password: root # 数据库密码
关于配置时区的解释
在Spring Boot中,当我们整合Druid作为数据库连接池时,设置serverTimezone=UTC是为了解决时区的问题。
这是因为Druid默认使用UTC时间作为数据库的时区,而如果不设置serverTimezone=UTC
可能会导致在使用数据库时出现时间偏移的情况。
通过设置serverTimezone=UTC,我们告诉Druid使用UTC作为服务器的时区
这样可以确保在与数据库进行时间相关操作时,使用统一的时区,避免产生时间偏移。
需要注意的是,如果你的应用程序所在的服务器时区不是UTC
你还需要在应用程序的配置文件中设置对应的时区,确保应用程序和数据库使用相同的时区。
这样才能保证时间的一致性。
lombok工具包
为了简化实体类来的一种技术
只需要在对应sql的实体类上加一个注解
@Data
即可
且不止这种方法
这里是lombok的全部注解
@data不包括无参构造和全参构造
使用
还是先导入依赖
这样即可
target存储编译后的字节码文件
编译后就把对应的注解生成对应的代码了