作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
回答
Mybatis 是一款优秀的持久层框架。它支持自定义 SQL、存储过程以及高级映射。
Mybatis 简化了 JDBC 代码操作,它通过 XML 或注解配置将原始类型、接口和 Java POJO(Plain Old Java Objects)映射为数据库中的记录。

扩展
Mybatis 优点
- 半 ORM 框架,Mybatis 内部封装了 JDBC 操作,研发人员仅需关注 SQL 本身。
// 1. 加载配置文件
Properties pro = new Properties();
pro.load(new FileReader("resource/jdbc.properties"));
// 2. 获取配置文件中连接数据库的信息
String url = pro.getProperty("url");
String user = pro.getProperty("user");
String password = pro.getProperty("password");
String driver = pro.getProperty("driver");
// 3. 加载数据库的驱动
Class.forName(driver);
// 4. 创建数据库的连接
Connection conn = DriverManager.getConnection(url, user, password);
// 5. sql 语句
String sql = "select * from t_user where username=? and password=?";
// 6. 创建执行sql的对象
ps = conn.prepareStatement(sql);
// 7. 给 ?赋值
ps.setString(1, username);
ps.setString(2, password);
// 8. 执行sql
ResultSet rs = ps.executeQuery();
// 9. 如果查询出数据,则返回该条数据
if (rs.next()) {
Admin admin = new Admin();
admin.setUsername(rs.getString("username"));
admin.setPassword(rs.getString("password"));
return admin;
// 10. 否则返回空
} else {
return null;
}
- 灵活性,Mybatis 将 SQL 写在 XML 或注解中,解耦 SQL 语句与业务代码,。
- 兼容性,Mybatis 基于 JDBC 连接数据库,故 JDBC 支持的数据库,Mybatis 同样支持。
Mybatis 不足
- 代码冗余,维护大量 Java POJO 对象与数据库字段映射。
<resultMap id="userMap" type="com.prospect.model.User">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
</resultMap>
- 可移植性差,Mybatis 直接使用 SQL 操作数据库,SQL 语句强依赖数据库,导致数据库移植性差。
628

被折叠的 条评论
为什么被折叠?



