【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(四)——入門增刪改查程式”。