zoukankan      html  css  js  c++  java
  • mybaties总结+hibernate总结

    一、对原生态jdbc程序中问题总结

    1.1 jdbc程序

    需求:使用jdbc查询mysql数据库中用户表的记录

    statement:向数据库中发送一个sql语句

    预编译statement:好处:提高数据库性能。

       预编译statement向数据库中发送一个sql语句,数据库编译sql语句,并把编译的结果保存在数据库砖的缓存中。下次再发sql时,如果sql相同,则不会再编译,直接使用缓存中的。

    jdbc编程步骤:

    1. 加载数据库驱动

    2. 创建并获取数据库链接

    3. 创建jdbc statement对象

    4. 设置sql语句

    5. 设置sql语句中的参数(使用preparedStatement)

    6. 通过statement执行sql并获取结果

    7. 对sql执行结果进行解析处理

    8.  释放资源(resultSet、preparedstatement、connection)

    复制代码
    复制代码
    public class JDBCTest {
        public static void main(String[] args) {
            Connection connection = null;
            // 预编译的Statement,使用预编译的Statement提高数据库性能
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            try {
                // 加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 通过驱动管理类获取数据库链接
                connection = DriverManager.getConnection(
                                "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",
                                "root", "root");
                // 定义sql语句 ?表示占位符
                String sql = "select * from t_user where username = ?";
                //获取预处理statement
                preparedStatement = connection.prepareStatement(sql);
                // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
                preparedStatement.setString(1, "王五");
                // 向数据库发出sql执行查询,查询出结果集
                resultSet = preparedStatement.executeQuery();
                // 遍历查询结果集
                while (resultSet.next()) {
                    System.out.println(resultSet.getString("id") + "  "+ resultSet.getString("username"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //释放资源
                if (resultSet != null) {
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (preparedStatement != null) {
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    复制代码
    复制代码

    1.2问题总结

    上面代码的问题总结:

    1.数据库连接,使用时就创建,不使用就释放,对数据库进行频繁的连接开启和关闭,造成数据库资源浪费,影响数据库性能。

      解决方案:使用数据库连接池管理数据库连接。

    2.将sql语句硬编码到Java代码中,如果sql语句修改,需要重新编译java代码,不利于系统维护。

      解决方案:将sql语句配置在xml配置文件中,即使sql变化,不需要对Java代码进行重新编译。

    2.MyBatis框架

    2.1MyBatis是什么?

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

    Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

  • 相关阅读:
    视频智能分析系统EasyCVR视频流媒体安防监控云服务实现城市视频智能化应用
    Windows/Android/iOS平台H265编码视频播放器EasyPlayerRTSP中socket选项之keepalive设置介绍
    【解决方案】人脸识别/车牌识别RTSP/GB28181/SDK/Ehome协议视频平台EasyCVR搭建美丽乡村视频监控系统方案
    【操作说明】新版网络穿透+云端组网+远程运维+视频流拉转推平台EasyNTS上云网关管理平台如何安装?
    Windows/Android/iOS平台H265编码视频播放器EasyPlayerPro支持高码率视频播放和D3D画面旋转代码参考
    【操作说明】人脸识别/车牌识别系统视频智能分析平台EasyCVR如何配置开启HTTPS协议?
    程序员们 不要想一辈子靠技术混饭吃
    jsonObject的使用
    程序员们 不要想一辈子靠技术混饭吃
    从 iBatis 到 MyBatis
  • 原文地址:https://www.cnblogs.com/ycmxm/p/7161246.html
Copyright © 2011-2022 走看看