Mybatis是一款开源的数据持久层框架,其内部封装了通过JDBC访问数据库的操作。它极大地简化了数据库操作,支持普通的SQL查询、存储过程和高级映射。
Mybatis具有以下主要特点:
- 定制化SQL:Mybatis允许用户直接编写SQL语句,这提供了极大的灵活性和控制能力。
- 存储过程和高级映射:除了基本的SQL查询,Mybatis也支持存储过程和高级映射。
- 半自动化ORM框架:Mybatis是一个半ORM(对象关系映射)框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。
- 简化配置和映射:Mybatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO (Plain Old Java Object,普通老式Java对象)为数据库中的记录。
JDBC,全称Java Database Connectivity,是一套基于Java语言的关系数据库编程接口规范。它由Sun公司于1996年推出,用于为Java程序提供访问数据库的标准接口。
JDBC的主要作用是作为Java程序与数据库之间的桥梁,允许Java程序通过发送SQL语句来操作远端数据库。基于JDBC,开发人员可以在Java应用中执行SQL语句,完成对数据库的查询、更新等操作。
使用jdbc操作数据库:
@Test
public void testJdbc() throws ClassNotFoundException, SQLException {
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取连接对象
String username = "root";
String password = "chen";
String url = "jdbc:mysql://localhost:3306/mybatis";
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");
int age = resultSet.getInt("age");
int gender = resultSet.getInt("gender");
String phone = resultSet.getString("phone");
System.out.println(id + "\t" + name + "\t" + age + "\t" + (gender == 1 ? "男":"女") + "\t" + phone);
}
}
使用Mybatis操作数据库:
配置文件:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=chen
@Test
public void testListUser() {
List<User> userList = userMapper.list();
userList.stream().forEach(user -> {
System.out.println(user);
});
}
Mybatis和JDBC都是用于操作数据库的技术,但它们在实现和使用方式上存在一些显著的区别。
以下是它们之间的主要对比:
-
层次关系:JDBC是较底层的持久层操作方式,而MyBatis则是在JDBC的基础上进行了封装,使其更加方便程序员对持久层的操作。
-
代码量:与JDBC相比,使用MyBatis可以减少50%以上的代码量,因为它消除了JDBC中大量冗余的代码,并且不需要手动开关连接。
-
数据库兼容性:由于MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库,MyBatis也都支持。
-
缓存机制:MyBatis提供了一级和二级缓存,这有助于提高程序的性能。
-
动态SQL:MyBatis使用动态SQL语句,这使得SQL维护变得更加简单,特别是当使用XML进行配置时。
-
学习曲线:对于初学者来说,MyBatis可能比JDBC更容易上手,因为它提供了更多的功能并且相对简化了数据库操作。