拥有了JDBC,为什么还要有Hibernate和Mybatis等持久层框架?




JDBC,我想对于学Java的人简直太熟悉了,如果谁说不知道,那么狠遗憾的告诉你,你不是Java人!

这篇文章的主要目的还是想把大家引入后面我们重点要说的内容,那就是Mybatis和Hibernate两个持久层框架。既然要研究这两个框架,那么就该知道为什么会出现这两个框架。


我记得,我刚步入Java的时候,那时候操作数据库是按照找个步骤写的:

(1)注册驱动;

(2)获取数据库连接;

(3)拼接sql语句,设置sql参数;

(4)执行sql语句;

(5)处理sql返回结果;

(6)关闭执行语句和数据库连接;


就像下面的一个简单示例一样:

  1. <span style=“font-family:’KaiTi_GB2312’;font-size:18px;”>private static Connection getConn() {  
  2.     String driver = ”com.mysql.jdbc.Driver”;  
  3.     String url = ”jdbc:mysql://localhost:3306/samp_db”;  
  4.     String username = ”root”;  
  5.     String password = ”“;  
  6.     Connection conn = null;  
  7.     try {  
  8.         Class.forName(driver); //classLoader,加载对应驱动  
  9.         conn = (Connection) DriverManager.getConnection(url, username, password);  
  10.     } catch (ClassNotFoundException e) {  
  11.         e.printStackTrace();  
  12.     } catch (SQLException e) {  
  13.         e.printStackTrace();  
  14.     }  
  15.     return conn;  
  16. }</span>  
private static Connection getConn() {
    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/samp_db";
    String username = "root";
    String password = "";
    Connection conn = null;
    try {
        Class.forName(driver); //classLoader,加载对应驱动
        conn = (Connection) DriverManager.getConnection(url, username, password);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return conn;
}

然后获取到连接后再进行相应的sql操作,这里简单了拿插入语句来说吧:

  1. <span style=”font-family:’KaiTi_GB2312’;font-size:18px;”>private static int insert(Student student) {  
  2.     Connection conn = getConn();  
  3.     int i = 0;  
  4.     String sql = “insert into students (Name,Sex,Age) values(?,?,?)”;  
  5.     PreparedStatement pstmt;  
  6.     try {  
  7.         pstmt = (PreparedStatement) conn.prepareStatement(sql);  
  8.         pstmt.setString(1, student.getName());  
  9.         pstmt.setString(2, student.getSex());  
  10.         pstmt.setString(3, student.getAge());  
  11.         i = pstmt.executeUpdate();  
  12.         pstmt.close();  
  13.         conn.close();  
  14.     } catch (SQLException e) {  
  15.         e.printStackTrace();  
  16.     }  
  17.     return i;  
  18. }</span>  
private static int insert(Student student) {
    Connection conn = getConn();
    int i = 0;
    String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
    PreparedStatement pstmt;
    try {
        pstmt = (PreparedStatement) conn.prepareStatement(sql);
        pstmt.setString(1, student.getName());
        pstmt.setString(2, student.getSex());
        pstmt.setString(3, student.getAge());
        i = pstmt.executeUpdate();
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return i;
}

从上面的语句可以看出来,我们每次都要做大量的相同的操作,并且还要对执行sql语句过程中所出现的各种异常和资源释放进行处理,而真正涉及到业务功能的代码其实很少,这明显影响了效率。

每当这时候都会有牛人出来,帮助大伙解决问题。这时候Hibernate和Mybatis(前身ibatis)变横空出世了。它们帮我们把哪些复杂的重复性的工作进行了抽象,从业务处理逻辑中剥离了,使得我们不需要再写这些我们不想写还非要写的代码。


下面简单说说这两个框架。

Mybatis的前身其实是apache下面的一个开源项目ibatis,后来迁移到了Google Code,并且改名为了Mybatis。再之后,又被迁移到了GitHub。

Hibernate是澳大利亚墨尔本的一个年轻程序员开始的,正是和我们一样他也厌倦了这样写数据库操作,所以写了Hibernate的第一个版本,而后其他成员加入进来共同完善了Hibernate,Hibernate也变得原来越流行,我们常说的SSH中的H指的就是它了。


在接下来的日子里,我将分别开设两个专栏分别讲述Mybatis和Hibernate,从简单的使用用例着手,结合源码来分析其内部实现原理,敬请关注。

            </div>
        </article>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值