本文中用到的sql语句
CREATE DATABASE
IF
NOT EXISTS mybatis;
USE mybatis;
CREATE TABLE `blog` (
`bid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`author_id` int(11) DEFAULT NULL,
PRIMARY KEY (`bid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `blog` (`bid`, `name`, `author_id`) VALUES (1, 'RabbitMQ延时消息', 1001);
INSERT INTO `blog` (`bid`, `name`, `author_id`) VALUES (2, 'MyBatis源码分析', 1008);
JDBC 是啥
JDBC(Java Database Connectivity): java 数据库连接
JDBC 示例
JDBC 连接的步骤
- Class.forName 注册驱动
- 获取一个Connection, Connection 用来连接数据库
- 创建一个 Statement, Statement 是用来执行sql 语句的
- 通过 statement 的 execute() 方法 执行sql 语句
- 通过ResultSet 获取数据, 给 POJO 赋值
- 关闭资源。
我们来看下代码演示, 代码中用到的数据库 sql 文件, 请参考附件
@Test
public void testJdbc() throws IOException {
Connection conn = null;
Statement stmt = null;
Blog blog = new Blog();
try {
// 注册 JDBC 驱动
Class.forName("com.mysql.jdbc.Driver");
// 打开连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "root");
// 执行查询
stmt = conn.createStatement();
String sql = "SELECT bid, name, author_id FROM blog where bid = 1";
ResultSet rs = stmt.executeQuery(sql);
// 获取结果集
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);
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();
}
}
}
上面的代码看上去有什么问题吗 ?
1 重复代码
- 注册驱动
- 创建连接
- 关闭连接
2 java 代码里面冗余了sql 语句
3 sql 执行结果映射到 java 对象复杂
4 资源管理,管理连接资源的创建和释放等。需要人为处理,容易忘记关闭资源。
针对上面的问题,我们怎么去解决 ? 自己造轮子处理,当然不是啦, 有轮子先看看已有的轮子好不好用(手动狗头)。后面我们会对 工具包,orm 框架分别做简单介绍: 主要有以下内容: 希望我能坚持输出下去,哈哈
工具包
工具包虽然 相对 jdbc 来说简化了我们很多的操作, 但是还是有很多不便之处,具体细节我们在后面介绍。
orm 框架
2.mybatis