前言
愿以梦为马,沐光而行。共勉。
一、简介
MyBatis是一款应用于持久层的框架,用于简化JDBC开发。
- 持久层,又称数据访问层,对应web开发三层结构(Controller,Service,Dao)中的Dao层。
- JDBC(Java Database Connectivity)是Java语言访问关系型数据库的标准API。它允许Java程序使用标准的SQL语句来访问和操作数据库。
二、MyBatis的快速入门
假如我们希望实现对数据库中某张表格全部数据的查询工作,则在之前都是通过数据库图形化工具来进行操作,我们输入以下命令:select * from t1
,然后图形化界面访问数据库,数据库在执行完操作并取到期望数据后再返回给图形化界面进行展示。
如果我们希望在java中实现这一操作就需要按照以下的步骤进行执行:
- 创建一个实体类User
这个实体类的属性应该尽可能和数据库中表的属性保持一致,MyBatis会将表中的一条记录自动封装为一个User对象
//假如我们导入以下SQL语句以生成测试数据
-- 用户表
create table user(
id int unsigned primary key auto_increment comment 'ID',
name varchar(100) comment '姓名',
age tinyint unsigned comment '年龄',
gender tinyint unsigned comment '性别, 1:男, 2:女',
phone varchar(11) comment '手机号'
) comment '用户表';
-- 测试数据
insert into user(id, name, age, gender, phone) VALUES (null,'逃夭夭',18,'1','15200000000');
insert into user(id, name, age, gender, phone) VALUES (null,'桃夭夭',19,'1','15200000001');
insert into user(id, name, age, gender, phone) VALUES (null,'夭夭',20,'1','15200000002');
insert into user(id, name, age, gender, phone) VALUES (null,'安北北',16,'2','15200000003');
insert into user(id, name, age, gender, phone) VALUES (null,'尚安安',17,'1','15200000004');
则我们在创还能实体类时可以按照如下:
public class User {
private Integer id; //id(主键)
private String name; //姓名
private Short age; //年龄
private Short gender; //性别
private String phone; //手机号
//省略GET, SET方法
}
tips:
1.在创建实体类时,应该尽可能使用基本数据类型的包装类。因为在进行数据查询的时候,如果查询结果为空,会返回null值,而基本数据类型是没有办法接收null值的,会报异常;而且基本数据类型是有默认值的,例如某个字段本身为空,但是在返回时却返回了默认值,也会造成误会。
2.对于属性数据类型的选用要仔细斟酌。以int和short为例,int共占四个字节,如果不考虑符号,表示最大值可以达到43亿,这在开发中使用的极少;而short类型只占用了两个字节,对于开发中常用的数值范围基本可以实现覆盖,在一些情况下使用short代替int就可以避免不必要的存储空间的浪费。
- 引入MyBatis相关依赖
MyBatis是一个外部框架,所以需要导入其对应的依赖,同时,还需要导入对应数据库的驱动依赖,例如我使用的是MySQL,所以需要导入MySQL的驱动依赖;如果使用Oracle,那就导入Oracle的驱动依赖
- 配置连接数据库的相关参数
连接数据库需要给入必要的参数(回想在使用图形化工具的时候,也是需要设置数据源的),主要包括:
1.MySQL驱动类
2.登录名
3.密码
4.数据库连接字符串
在springboot项目中,将上述内容编写到application.properties文件即可。(properties后缀名表明是一个配置文件,其中的内容均是以key = value的形式来进行书写的)
//注意各项配置均是以spring.datasource开头,这是springboot定义的一种配置数据源的标准化规范。
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis //jdbc:mysql 表示使用的mysql数据库; localhost:3306 是访问地址; mybatis:要访问的数据库名称
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234
- 编写SQL语句
在MyBatis中,持久层接口一般叫做xxxMapper,一般存放于和controller、service包平级的位置下mapper包下(用于存放和Dao层相关的代码)
@Mapper //@Mapper注解表明是mybatis中的Mapper接口,当程序运行时会自动生成接口的实现类对象,然后放入IOC容器中交由spring进行管理。
public interface UserMapper {
//查询所有用户数据
@Select("select id, name, age, gender, phone from user")
public List<User> list();
}
tips:
- 通过idea设置,实现SQL语句的自动提示功能
选中sql语句,然后右击选中该选项
搞定!
- 可以通过给idea添加数据库连接来实现表明或者列名的自动识别
问题:
解决:
之后就是图形化工具中的数据库连接部分操作,填写用户名,密码,选择关联的数据库,在此不再赘述。
三、JDBC
1.简介
Java DataBase Connectivity ,是由Sun公司制定的一种使用java操作关系型数据库的规范,其实也就是一套 接口。各个数据库厂商通过实现JDBC接口,提供数据库驱动的jar包。虽然是java编程过程中我们是使用JDBC接口来进行操作的,但实际上真正执行代码的还是驱动jar包中的实现类。
2.直接操作JDBC代码
public class JdbcTest {
@Test
public void testJdbc() throws Exception {
//1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取数据库连接
String url="jdbc:mysql://127.0.0.1:3306/mybatis";
String username = "root";
String password = "1234";
//DriverManager是数据库驱动管理类,主要用于注册驱动以及获取java和数据库之间的连接
Connection connection = DriverManager.getConnection(url, username, password);
//3. 执行SQL
Statement statement = connection.createStatement(); //操作SQL的对象
String sql="select id,name,age,gender,phone from user";
//statement(接口)是指数据库操作对象(执行sql语句的对象),用于向数据库发送sql语句
ResultSet rs = statement.executeQuery(sql);//SQL查询结果会封装在ResultSet(接口)对象中
List<User> userList = new ArrayList<>();//集合对象(用于存储User对象)
//4. 处理SQL执行结果
while (rs.next()){
//取出一行记录中id、name、age、gender、phone下的数据
int id = rs.getInt("id");
String name = rs.getString("name");
short age = rs.getShort("age");
short gender = rs.getShort("gender");
String phone = rs.getString("phone");
//把一行记录中的数据,封装到User对象中
User user = new User(id,name,age,gender,phone);
userList.add(user);//User对象添加到集合
}
//5. 释放资源
statement.close();
connection.close();
rs.close();
//遍历集合
for (User user : userList) {
System.out.println(user);
}
}
}
可以看到直接操作JDBC有三点不足:
- 数据库连接信息都是写在代码中的,如果后期需要修改,就需要对程序源码修改,这样就需要重新编译运行。
- 程序员需要手动的将记录信息从ResultSet对象中取出然后封装到实体对象中。
- 需要频繁的创建和释放数据库连接,消耗资源。
3.MyBatis的优点
针对直接操作JDBC的缺点,MyBatis框架具有以下优势:
- 数据库连接信息时记录在配置文件中的,可以通过动态加载,使程序在运行时动态的加载配置文件,从而避免了每次对连接信息的修改会导致的项目程序的重新编译和部署等。
- MyBatis实现了数据到实体对象的自动映射和封装。
- 在mybatis中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。
总结
开始学习使用MyBatis框架了,希望在学习的过程中也可以辐射性的学习到一些其他或者深一些的内容知识。本文主要供个人学习使用,如果有错误恳请大佬批评指正,如果恰好对你有所帮助,小子深感荣幸。夜深,共勉,晚安。