携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
JDBC编程
在聊Mybatis之前,先来了解下比较传统的JDBC
所谓JDBC,就是SUN公司定义的一套接口规范。具体的实现都是交给各个数据库厂商去实现。一般Java程序连接数据库,底层都是通过JDBC连接的。
我们来看看用JDBC操作数据库的代码
/**
* jdbc原生sql执行方式
* @throws ClassNotFoundException
*/
private void jdbcConnDb() throws ClassNotFoundException {
// 加载驱动到JVM内存
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/mybatis_study?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
String sql = "select * from t_user where id = ?";
// JDK1.8新特性,try块中自动关闭资源
try ( // 建立数据库连接
Connection connection = DriverManager.getConnection(url);
// 获取预编译sql执行会话
PreparedStatement preparedStatement = connection.prepareStatement(sql)){
// 设置参数
preparedStatement.setLong(1,2L);
// 执行预编译sql,获得结果对象
ResultSet rs = preparedStatement.executeQuery();
// 需要先判断结果集是否有值,在进行赋值操作
while (rs.next()){
long id = rs.getLong("id");
String name = rs.getString("name");
User user = User.builder().id(id).name(name).build();
System.out.println(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
从代码也可以看到,用JDBC操作数据库大致分为以下几步
- 注册驱动,获取数据库连接
- 操作数据库连接对象,打开Statement对象
- 对Statement设置参数后执行sql,返回resultSet结果对象
- 从resultSet读取数据,根据需要转换为对应的对象
- 关闭打开的数据库资源
由此,就会发现,传统的JDBC操作数据库每次执行事务都需要经过上述步骤,很是繁琐,随后ORM模型就随之出现了。
ORM模型
简单来说,就是对象映射模型。程序中的实体类对应着数据库中的表。
全自动映射ORM框架
Hibernate
这个框架了解不深,也不是今天的主角,就简单的介绍下。
优点
- 大大简化了开发,甚至连sql都不用写,提高开发效率
- 对象化,开发者只需要面向对象的方式进行数据库的操作
缺点
- 全表映射带来很多不便,比如更新的时候会发送所有的字段信息去更新
- 无法根据不同的条件组装不同的sql
- 对多表关联或者复杂sql的查询支持较差;需要自己编写sql,并且最后还需要自己将数据组装成对象返回
- 不能有效的支持存储过程
- 对于一些需要进行sql优化的场景,不能很好的支持,缺乏灵活性
Mybatis Plus
Mybatis Plus是一个Mybatis的增强工具,号称只对Mybatis进行增加,并不对核心功能进行修改,为简化开发,提升效率而生。
具体使用和特性请参考:baomidou.com/
半自动映射ORM框架
Mybatis
那么,今天的正主来了--Mybatis,一个半自动映射ORM框架。
他的出现解决Hibernate缺少灵活性的缺点
半自动映射的体现
因为需要手动匹配对象,sql及数据库表信息的映射关系
映射文件包含:
- 实体对象
- sql
- 映射规则
mybatis的使用场景
由于互联网发展的迅速,项目的业务和技术难度愈发的大,我觉得mybatis适用市场的大部分场景。
虽然他对比Hibernate而言,相对开发难度较大。
但是Mybatis解决了Hibernate致命的缺点:难以动态变化sql,对于sql的灵活性较差。这也就造成了Hibernate不太适应业务比较复杂且对性能有一定要求的场景中,最好使用Mybatis。
所以我觉得学习Mybatis框架是一件比较有性价比的事情,从今天开始准备写一个关于mybatis的专栏,和xdm一起学习。
结语
觉得写的不错的xdm,可以点波小赞。
文章难免有疏漏,也欢迎xdm指正。
一起学习,一起成长!