柚子班终于在时隔5个月后迎来了第四期,第四期更像是一次老友分别后一次大的团聚,每个人都有了新的变化,但大家追求技术,提升自我的初心没有改变。整个课程内容丰富,涵盖了2050大会的介绍、spring-boot、spring-boot、mybatis-plus、现场白纸写能够直接运行的各种排序代码以及孤尽老师分享作为CTO视角对一些事情的思考,一天下来收获慢慢。尤其自己作为班长组组长接到通知说要分享mybatis-plus的相关知识,于是借着这个机会研究学习了mybatis-plus整个的发展脉络,今在本博客中记录下来。(部分内容借鉴了廖雪峰的网页JDBC编程 - 廖雪峰的官方网站)
一、JDBC
如果没有现在的各种框架的支撑,那么如何去访问数据库,答案就是使用JDBC。使用JDBC时,需要了解什么是Connection,Connection代表一个JDBC连接,它相当于Java程序到数据库的连接(通常是TCP连接)。打开一个Connection,需要准备URL、用户名、口令才能成功连接到数据库。URL是由数据库厂商指定的格式,Mysql的URL是 jdbc:mysql://
//JDBC连接的URL, 不同数据库有不同的格式: String JDBC_URL = "jdbc:mysql://localhost:3306/test"; String JDBC_USER = "root"; String JDBC_PASSWORD = "password"; //1. 获取连接: Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD); //2.数据操作 ListuserList = new ArrayList<>(); try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) { try (Statement stmt = conn.createStatement()) { try (ResultSet rs = stmt.executeQuery("SELECt id, grade, name, gender FROM students WHERe gender=1")) { while (rs.next()) { long id = rs.getLong(1); // 注意:索引从1开始 long grade = rs.getLong(2); String name = rs.getString(3); int gender = rs.getInt(4); // 数据库返回数据和User对应的映射 User user = new User(); user.setGrade(grade); user.setName(name); user.setGender(gender); } } } } // 3.关闭连接: conn.close();
JDBC查询的步骤
1)获取Connection
2)通过Connection.createStatement()获取一个Statement对象
3)执行Statement对象的executeQuery("select * from table")并传入sql语句,执行查询并获取返回的结果集。
4)反复调用ResultSet的next()方法并读取每一行结果。
后面所有的框架DataSource、JDBCTemplate、Hibernate、Mybatis、Mybatis-plus都是在解决两个问题:
1)数据库连接如何管理?
2)数据库查询数据和Java对象如何高效映射?
二、DataSource
定义:JDBC连接池,解决需要自己手动建立连接(TCP连接)、关闭连接、连接复用的问题。JDBC连接池有一个标准的接口javax.sql.DataSource,常用的JDBC连接池有:
• HikariCP • C3P0 • BoneCP • Druid 以HikariCP连接池实现为例:三、JdbcTemplate
有了DataSource连接池后,但也免不了从连接池中取连接以及用完后释放连接的公共过程代码,为了省掉这个公共的代码,JdbcTemplate出现了。例如以下代码:
四、Mybatis
使用JdbcTemplate进行查询,能够使用BeanPropertyRowMapper进行数据库数据和Java bean的映射,但映射方法不够直观和方便,于是出现了Mybatis,通过注解、XML文件实现更自由、更方便的映射。
四、Mybatis-plus
使用Mybatis,无论怎样的数据库操作(例如一些常见的curd操作语句)都需要写对应的sql语句,Mybatis-plus通过Bean字段和数据库字段强关联简化一些常用的curd操作baseMapper实现了一些常用的curd方法。
此外Mybatis-plus还有其他非常实用的增强功能。
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
五、总结
关于数据库的框架各式各样,但我们不要被框架蒙蔽的双眼,时时刻刻要提醒自己说:这个框架是解决数据库连接的问题,还是解决数据库数据和Java bean对象如果高效映射的问题。把握住了这个点,你将不会迷失在繁琐的框架的细节中。



