1. 程式人生 > >【Mybatis】深入淺出Mybatis(三)——環境搭建

【Mybatis】深入淺出Mybatis(三)——環境搭建

一、前言

      前一篇部落格向大家介紹了Mybatis的架構——【Mybatis】深入淺出Mybatis(二)——Mybatis的框架,在這篇我們就開始通過一個例子來搭建一下Mybatis的環境。

二、環境要求

  • mybatis-3.2.7.jar

  • eclipse

  • mysql資料庫

  • mysql資料庫驅動,mysql-connector-java-5.1.7-bin.jar

三、搭建過程

3.1 建立mysql資料庫

      這裡咱們建立一個名字為mybatis的資料庫,建立一個名為user的表。表的欄位如下:

這裡寫圖片描述

      在資料庫中插入一些測試資料,這個過程自己處理就好,沒有必要和小編相同:

這裡寫圖片描述

3.2 建立java工程

      使用eclipse建立java工程,新建,java Project:

這裡寫圖片描述

      建立完的效果如下:

這裡寫圖片描述

      右擊專案新增資料夾,命名為lib,用於加入mybatis核心包、依賴包、資料驅動包。效果圖如下:

這裡寫圖片描述

3.3 加入jar包

      要加入的jar包包括: mybatis核心包、依賴包、資料驅動包。如果要進行單元測試,需要新增junit.jar。這裡小編用單元測試,添加了junit-4.9.jar。

這裡寫圖片描述

      把jar包 Add to Build Path中:

這裡寫圖片描述

3.4 log4j.properties

      mybatis預設使用log4j作為輸出日誌資訊。右擊src->new->File,新建名為log4j.properties的檔案。

這裡寫圖片描述 這裡寫圖片描述

      在其中輸入下面的程式碼:

log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout
.ConversionPattern=%5p [%t] - %m%n

      效果如下:

這裡寫圖片描述

3.5 SqlMapConfig.xml

      SqlMapConfig.xml是mybatis核心配置檔案,上邊檔案的配置內容為資料來源、事務管理。

      在src下建立SqlMapConfig.xml,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 和spring整合後 environments配置將廢除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事務管理-->
            <transactionManager type="JDBC" />
        <!-- 資料庫連線池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

</configuration>

      效果如下:

這裡寫圖片描述

      好的,到這步我們的環境基本就完成了,

四、測試JDBC連線

      在src下建立一個名為cn.itcast.mybatis.test的包,在包裡面建立一個名為JdbcTest的類,新增如下的程式碼:

package cn.itcast.mybatis.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 通過單獨的jdbc程式,總結其中的問題
 * @author Ares
 * 2017年3月6日14:43:57
 */
public class JdbcTest {

/**
*步驟
*1、 載入資料庫驅動
*2、 建立並獲取資料庫連結
*3、 建立jdbc statement物件
*4、 設定sql語句
*5、 設定sql語句中的引數(使用preparedStatement)
*6、 通過statement執行sql並獲取結果
*7、 對sql執行結果進行解析處理
*8、 釋放資源(resultSet、preparedstatement、connection)*/

    public static void main(String[] args) {
        //資料庫連線
        Connection connection = null;
        //預編譯的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", "123456");
            //定義sql語句 ?表示佔位符
            String sql = "select * from 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) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(preparedStatement!=null){
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

}

      執行結果:

這裡寫圖片描述

      在這個測試程式中我們使用的是最傳統的與資料庫互動的方式,使用preparedStatement向佔位符傳遞引數,使用傳統的JDBC的時候會有一些問題:

       1. 資料庫連結建立、釋放頻繁造成系統資源浪費。從而影響系統性能,如果使用資料庫連線池可以解決此問題。

       2. Sql語句在程式碼中寫死了。如小編的“select * from user where username = ?”,為硬編碼。造成程式碼不易維護,實際應用sql變化可能較大,sql變動需要改變java程式碼。

       3. 使用preparedStatement向佔位符傳遞引數存在硬編碼。因為sql語句的where條件不一定,可能多也可能少,修改sql還要修改程式碼,系統不易維護。

       4. 輸出的結果集解析存在硬編碼。sql變化導致解析程式碼變化,系統不易維護,如果將資料庫揭露封裝成pojo物件解析比較簡單。

五、小結

      在這篇部落格中向大家配置了一下環境,基本上還是比較好理解的。另外也通過傳統的JDBC的方法訪問了一下資料庫,分析了一下傳統JDBC的不足,這些就是Mybatis要完善的地方,具體怎麼完善這些不足,小編會在後面的部落格向大家介紹。

      下一篇部落格會向大家帶來“深入淺出Mybatis(四)——入門增刪改查程式”。