Mybatis是如何封裝Jdbc的?


JDBC六個步驟

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1. 加載驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2. 獲取連接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC", "root", "123456");
            //3. 創建PreparedStatement  【設置參數】
            ps = conn.prepareStatement("select * from user");
            //4. 執行sql  ==》executeXxx()
            rs = ps.executeQuery();
            //5. 遍歷結果集
            while(rs.next()) {
                System.out.println(rs.getString(2)); // 數據庫第2列數據
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //6. 關閉連接
            try {
                rs.close();
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }

數據庫連接池

問題1:頻繁的建立連接釋放連接,造成資源的浪費。

數據庫連接池,用來解決建立與釋放連接的問題。
但是數據庫連接池有dbcp連接池,c3p0連接池,druid連接池,不可能為每一個連接池實現一種連接方式。所以使用DataSource實現隔離解耦。

    public static ComboPooledDataSource dataSource = new ComboPooledDataSource(); 

    // 通過C3p0 配置數據源 DataSource,以后想要使用其它的連接池,只需改動如何獲取DataSource,不需要改動連接。
    public static void dataSource(){
        try {
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/qianfeng?serverTimezone=UTC");
            dataSource.setUser("root");
            dataSource.setPassword("123456");
            dataSource.setInitialPoolSize(3);
            dataSource.setMaxPoolSize(10);
            dataSource.setMinPoolSize(3);
            dataSource.setAcquireIncrement(3);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }

    // 通過數據源,獲取連接 Connection
    public static Connection conn() {
        Connection conn = null;
        dataSource();
        try {
            conn = dataSource.getConnection();
            //Unknown system variable 'tx_isolation' : 可能原因是數據庫版本太高,mysql-connector-java版本太低
            //conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

在Mybatis中,配置druid數據源

    <environments default="development-mysql">
        <environment id="development-mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="com.config.DruidDataSourceFactory">
                <property name="url" value="${jdbc.jdbcUrl}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

Mybatis

關鍵技術點 SqlSession:執行Sql

            String resource = "conf/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //2. SqlSessionFactoryBuilder
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //1. 構建SqlSessionFactory
            SqlSessionFactory factory = builder.build(inputStream);
            //3. 構建session
            SqlSession session = factory.openSession();
            /** 第一種方式:以前原生的方式 */
            //Student s = session.selectOne("com.shang.mybatis.mapper.StudentMapper.queryStudentById", 1);
            //System.out.println(s);

            /** 第二種方式:演變出來的*/
            StudentMapper mapper = session.getMapper(StudentMapper.class); // mapperProxyFactory ==> mapper的代理對象
            Student s = mapper.queryStudentById(1);
            System.out.println(s);

MyBatis是如何封裝JDBC的呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM