mybatis的環境搭建


  mybatis是一個持久層框架,其主要思想就是想將程序中大量的SQL語句剝離出來,配置在配置文件中,實現SQL的靈活配置.

使得SQL與程序代碼分離,即在不修改程序代碼的情況下,直接在配置文件中修改SQL.

mybatis的搭建步驟

下載jar包並部署包

  mybatisjar下載網址:https://github.com/mybatis/mybatis-3/releases,mybatis壓縮包解壓后結構目錄如下

 

此外lib目錄下存放着編譯依賴包如下

最后只需把jar包放入項目的此lib 目錄下即可

或者選中項目右鍵 build path

進入此窗口

單擊第二個按鈕直接從本地進行添加jar,亦或者按下按鈕從此工作空間的項目中選擇jar進行添加

編寫mybatis核心配置文件

在此之前需要調整下xml的代碼提示(引入dtd文件)

  請先看第6點

  1. 選擇window →  preferences
  2. 搜索xml →  xml catalog出現如下窗口
  3.  add → file system 選擇你所需要的文件dtd

    這兩個文件都是經常使用的所以都添加進去

  4. key 需要與配置文件中的 此部分相同

    所以key是  -//mybatis.org//DTD Config 3.0//EN,那么dtd文件到哪里找呢?

  5. 所需的dtd文件都在mybatis解壓后的 mybatis-3.4.4\org\apache\ibatis\builder\xml 下面如圖

創建核心配置文件

  1. 找到如下窗口 → next
  2. 選擇第一個 → next 
  3.  選擇第二個 → 選擇config → next→finish即可

  4. 此時創建好的xml文件便會自動生成如下代碼

編寫核心配置文件

  話不多說直接上代碼

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4     "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 引入database.propeerties -->
 7     <properties resource="database.properties"/>
 8     <!-- 配置mybatis的log實現log4j -->
 9     <settings>
10         <setting name="logImpl" value="LOG4J"/>
11     </settings>
12     <typeAliases>
13         <package name="cn.smbms.pojo"/>
14     </typeAliases>
15     <!-- 配置mybatis多套運行環境 -->
16     <environments default="development">
17         <environment id="development">
18             <!-- 配置事物管理,采用jdbc的事物管理 -->
19             <transactionManager type="JDBC"/>
20             <!-- POOLED:mybatis自帶的數據源,jndi:基於Tomcat的數據源 -->
21             <dataSource type="POOLED">
22                 <property name="driver" value="${driver}"/>
23                 <property name="url" value="${url}"/>
24                 <property name="username" value="${user}"/>
25                 <property name="password" value="${pwd}"/>
26             </dataSource>
27         </environment>
28     </environments>
29     <!-- 將mapper文件加入到配置文件中 -->
30     <mappers>
31         <mapper resource="cn/smbms/dao/UserMapper.xml"/>
32     </mappers>
33 </configuration>
屬性 作用
configuration 配置文件的根元素節點
propertes 通過resource屬性從外表知道properties屬性文件,該屬性文件描述數據庫的相關配置
settings 設置mybatis運行中的一些行為,比如此處設置mybatis的log日志實現為LOG4J,即使用log4j實現日志功能
environments 表示配置mybatis的多套運行環境,將SQL映射到多個不同的數據庫上,元素節點中可配置多個,但必須指定默認運行環境
environment 配置mybatis的一套運行環境,需指定運行環境id,事務管理,數據源配置等相關信息
mappers 作用是告訴mybatis去哪里找SQL映射文件(該內容是開發者定義的映射SQL語句),整個項目可以有1個或多個
mapper mappers的子元素節點,具體知道SQL映射文件的路徑,其中resource屬性表SQL映射文件的路徑

 

創建實體類並為其創建DAO接口

  結構如下

創建sql映射文件

  代碼如下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="cn.smbms.dao.UserMapper">
 6     <!-- 查詢用戶表記錄數 -->
 7     <select id="count" resultType="int">
 8         select count(1) as count from smbms_user
 9     </select>
10     <!-- 查詢用戶列表 -->
11     <select id="getUserList" resultType="User">
12         select * from smbms_user    
13     </select>
14 </mapper>

 

  1. mapper:映射文件的根元素節點,只有一個屬性namespace
    1. namespace:用於區分不同的mapper,全局唯一.
  2. select:表示查詢語句,是mybatis最常用的元素之一,常用屬性如下
    1. id屬性:改命名空間下唯一標識符
    2. resultType屬性:表示SQL語句返回值類型,第一個select返回的是int,后者則是user類型

編寫測試類運行

   工具類代碼如下

 1 package cn.smbms.utils;
 2 
 3 import java.io.InputStream;
 4 
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class MyBatisUtil {
11     private static SqlSessionFactory factory;
12     static {
13         try {
14             //獲取mybatis-config.xml文件的輸出流
15             InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
16             factory=new SqlSessionFactoryBuilder().build(is);
17         } catch (Exception e) {
18             e.printStackTrace();
19         }
20     }
21     
22     public static SqlSession createSqlSession() {
23         return factory.openSession(false);    //默認true自帶提交事務
24     }
25     public static void  closeSqlSession(SqlSession sqlSession) {
26         if(null!=sqlSession) {
27             sqlSession.close();
28         }
29     }
30 }

測試類代碼方法一 基於mapper接口方式操作如下

public static void main(String[] args) {
        Logger logger = Logger.getLogger(Test.class);
        SqlSession sqlSession =null;
        List<User> userList = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.createSqlSession();
            userList = sqlSession.getMapper(UserMapper.class).getUserList();
            for (User user : userList) {
                logger.debug("testGetUserList UserCode:"+user.getUserCode()+"and userName:"+user.getUserName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
    }

基於mapper接口方式操作此接口必須對應select映射SQL語句中的id對應

測試類代碼方法二 運行映射SQL語句

public static void main(String[] args) {
        Logger logger = Logger.getLogger(Test.class);
        SqlSession sqlSession =null;
        List<User> userList = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.createSqlSession();
            //直接運行已映射的SQL語句
            userList = sqlSession.selectList("cn.smbms.dao.UserMapper.getUserList");
            for (User user : userList) {
                logger.debug("testGetUserList UserCode:"+user.getUserCode()+"and userName:"+user.getUserName());
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e);
        }finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
    }

 在使用SQLsession實例執行已映射的語句,沒有與id所對應的方法也不會出錯,即使UserMpper這個接口沒有也不會影響運行結果.


免責聲明!

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



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