從零開始搭建Mybatis框架
Mybatis是一個基於java的持久型框架,有了Mybatis,終於可以不用寫jdbc程式碼這種東西了,寫個搭建Mybatis框架過程,就當做個筆記吧。
(一)新建一個web專案,起好專案名之後一路next,finish。下面是專案建好後的工程目錄(圖中用的Eclipse工具,專案名FirstMybatis)
(二)加入Mybatis框架需要的jar包,我這裡添加了4個,分別是:
jstl-1.2.jar //jstl標準標籤庫,後面使用jsp頁面來顯示資料
log4j-1.2.17.jar //日誌包
mybatis-3.2.0.jar //Mybatis的jar包,必須加入上面log4j-1.2.17.jar這個jar包,否則會報錯,Mybatis更高的版本可能不用
mysql-connector-5.1.8.jar //mysql驅動包,要連線mysql資料庫必須加入
把上面的jar包放WebContent/WEB-INF/lib下新增依賴
為了便於管理,我在src下新建了5個包,包名可以自己定義
這裡的Controller包用來存放控制器類,Service包用來處理業務,Pojo包存放實體類,Mapper包作為資料訪問層,Utils包作為工具包
在src目錄下再新建一個mybatis-config.xml檔案,用來配置Mybatis的各種配置
下面貼圖
(三)下面就是mybatis的各種配置了
開啟mybatis-config.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> <!-- environments即環境 --> <!-- 為了方便資料庫配置,使用多種配置environment時,可以通過environments中的default 來宣告預設使用哪種配置 --> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"/> <!-- pooled即池,配置連線池 --> <dataSource type="POOLED"> <!-- 配置驅動 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <!-- 配置連線地址 --> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <!-- 配置資料庫使用者名稱 --> <property name="username" value="root"/> <!-- 配置資料庫密碼 --> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 關聯配置對映檔案 --> <mappers> <!-- 包掃描關聯對映檔案 --> <package name="Mapper"/> </mappers> </configuration>
配置檔案中的連線地址、使用者名稱、密碼改成自己的
其中的<mappers></mappers>標籤用來關聯對映檔案,因為要在Mapper包下建立對映檔案來進行資料操作,所以要關聯的對映檔案就直接寫上這個包名就可以了,它會自動掃描這個包下所有的用到Mybatis的檔案。
配置檔案已經完成了,對於上面的配置,還可以用另一種方式配置
如果覺得麻煩的話可以忽略下面內容,直接跳到(四)
在src目錄下建個字尾為properties的檔案,比如我新建一個db.properties
db.properties檔案中寫你的配置引數
比如我的資料庫配置引數
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hibernatedb
username=root
password=123456
然後在mybatis-config.xml檔案的<configuration>標籤中加入這句程式碼
<!-- 載入全域性配置檔案 -->
<properties resource="db.properties"></properties>
申明db.properties檔案作為全域性配置
配置完成後我們就可以用${driver}(表示db.properties中driver對應的值)來配置資料庫了
例如可以將上面的資料庫配置寫成下面這樣
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<!-- pooled即池,配置連線池 -->
<dataSource type="POOLED">
<!-- 配置驅動 -->
<property name="driver" value="${driver}"/>
<!-- 配置連線地址 -->
<property name="url" value="${url}"/>
<!-- 配置資料庫使用者名稱 -->
<property name="username" value="${username}"/>
<!-- 配置資料庫密碼 -->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environment>
這樣,在資料庫配置引數有所變動時,也可以直接在db.properties中修改
(四)然後再來寫個工具類,用來獲取SqlSession的連線工廠
在Utils包下新建一個SqlSessionFactoryUtils.class,名字自定義
程式碼如下
public class SqlSessionFactoryUtils {
//定義一個變數儲存mybatis框架的連線工廠
private static SqlSessionFactory sqlSessionFactory;
//初始化連線工廠
//靜態程式碼塊,與類一起載入,訪問類的時候與類一起載入
//讀取配置檔案來做Mybatis連線工廠
static {
try {
String resource = "mybatis-config.xml";
//讀取配置檔案,自動到src類路徑下尋找配置檔案
InputStream inputStream = Resources.getResourceAsStream(resource);
//將inputStream轉換成Mybatis的連線工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//定義一個獲取連線的方法
public static SqlSession getSqlSession()
{
return sqlSessionFactory.openSession();
}
//釋放連線,關閉資源
public static void close(SqlSession sqlSession)
{
if(sqlSession!=null)sqlSession.close();
}
}
(五)...一大堆配置完成了,後面是具體的使用
首先在Pojo中新建一個User類,儲存使用者資訊,這裡示範的資料庫名為test,有一張user表,id,name,address三個欄位
User類用來存放從user表中取出來的資料,欄位必須對應
public class User {
int id;
String name;
String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
在Mapper包下面新建一個介面類UserMapper.java(必須在Mapper包下,之前配置檔案中配置掃描此包,不寫在這裡是找不到這個檔案的)
在介面類中寫一個用來查詢資料的方法
為這個方法加上註解(@Select註解:執行查詢操作,寫入查詢的sql語句)
public interface UserMapper {
@Select("select * from user")
public List<User> findAll();
}
(六)在Service包下新建一個UserService.java作為使用者的業務處理類
public class UserService {
public List<User> findAll()
{
//從sqlSession工具類中獲取SqlSession
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
//從sqlSession中獲取對映檔案
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//呼叫userMapper中的findAll方法,執行查詢語句,並返回一個List<User>資料
return userMapper.findAll();
}
}
終於到最後一部分了...
接下來要新建一個控制器,再呼叫UserService業務類中的finAll方法,拿到資料,再綁到jsp頁面中顯示
先到Controller包下建一個servlet控制器,比如我這裡叫UserController.java
在Get方法中呼叫UserService中的findAll方法,獲得返回的資料,跳轉到jsp頁面展示資料
@WebServlet("/UserController")
public class UserController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
UserService userService = new UserService();
//獲取返回的資料
request.setAttribute("users", userService.findAll());
//跳轉頁面顯示
request.getRequestDispatcher("/WEB-INF/jsp/user.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
在WEB-INF目錄下新建個jsp資料夾,在其中建立個user.jsp檔案
把請求的資料繫結到jsp頁面上
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 這裡要用到jstl標籤庫中的標籤,必須加上下面這行程式碼 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<!-- 使用forEach標籤迴圈繫結資料 -->
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.address}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
(七)最後,啟動伺服器,在瀏覽器中輸入http://localhost:8080/FirstMyBatis/UserController(寫你自己的專案名和地址)
資料表中新增幾條資料用於測試,頁面正常顯示,搭建成功
對於UserMapper類中的增刪改查,與註解@Select同理,改成@Insert、@Update、@Delete即可。
UserMapper類中的資料操作除了可以用註解方式實現外,還可以通過xml檔案來實現,有空再補充上去。。。
最後,貼一張完整的專案路徑圖