【Mybatis】简介
JDBC操作数据库
代码示例
@Test
public void testJdbc() throws IOException {
Connection conn = null;
Statement stmt = null;
Blog blog = new Blog();
try {
// 1.注册JDBC驱动
// Class.forName("com.mysql.jdbc.Driver");
// 2.打开连接,获取一个Connection
conn = DriverManager.getConnection("jdbc:mysql://192.168.247.130:3306/gupao_mybatis", "root", "123456");
// 3.创建一个Statement
stmt = conn.createStatement();
String sql = "SELECT bid, name, author_id FROM blog where bid = 1";
// 4.执行查询
ResultSet rs = stmt.executeQuery(sql);
// 5.获取ResultSet结果集,并给POJO赋值
while (rs.next()) {
Integer bid = rs.getInt("bid");
String name = rs.getString("name");
Integer authorId = rs.getInt("author_id");
blog.setAuthorId(authorId);
blog.setBid(bid);
blog.setName(name);
}
System.out.println(blog);
// 5.关闭数据库相关资源资源
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException se2) {
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}
}
}
存在的问题
- 重复代码
- 资源管理
- 结果集处理
- SQL耦合
JDBC轻量级封装
解决的问题
- 重复代码:对操作数据库的增删改查的方法进行封装
- 资源管理:无论是QueryRunner还是JdbcTemplate都可以传入一个数据源进行初始化,也就是资源管理可以交给专门的数据源组件去做,不用我们手动创建和关闭
- 结果集处理:无论是ResultSetHandler还是RowMapper都可以帮助我们映射结果集,无论是List,Map还是POJO
存在的不足
- SQL耦合:SQL语句都是写死在代码里面,依旧存在硬编码的问题
- 传参只能按照固定位置顺序
- 只能把结果集映射成POJO,不能直接把POJO映射成数据库记录
- 查询没有缓存功能,性能不够好
例子
Apache DbUtils
官网:https://commons.apache.org/proper/commons-dbutils/
评论区