JDBC连接数据库
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", "123456");
// 执行查询
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();
}
}
JDBC连接的缺点
- 手动关闭资源;
- 手动处理结果集;
- 业务逻辑与数据库操作的代码耦合;
- 代码重复
Spring JDBC
@Autowired
JdbcTemplate jdbcTemplate;
@Test
public void myTest(){
List list = jdbcTemplate.query("select * from tbl_emp",new EmployeeRowMapper());
System.out.println(list);
List list1 = jdbcTemplate.query("select * from tbl_emp", new BaseRowMapper(Employee.class));
System.out.println(list1);
}
Spring JDBC 优缺点
优点
- 方法封装:实现RowMapper接口,数据库字段可转换为实体类
- 连接数据源
- 映射结果集
缺点
没有解决
- SQL硬编码
- 参数只能顺序插入
- 没有缓存功能
- 没有实现实体类到数据库记录的反射
ORM框架
hibernate
hibernate 是重量级关系数据库。
通过hbr.xml 或者 注解 使用。
问题:
- 不能指定部分字段
- 不支持动态sql
- 不支持自定义sql
Mybatis
特性:
- 支持连接池
- SQL与代码分离,集中管理
- 支持参数映射和动态sql
- 结果集映射
- 缓存管理
- 重复sql的提取
- 插件机制
如何选择ORM框架?
- 简单项目选择hibernate
- 需要灵活的sql,可以使用Mybatis
- 对性能要求高,可以使用JDBC
- Spring JDBC 可以和ORM框架混用