Mybatis入門程式,mybatis入門

來源:互聯網
上載者:User

Mybatis入門程式,mybatis入門

作為一個java的學習者,我相信JDBC是大家最早接觸也是入門層級的資料庫連接方式,所以我們先來回憶一下JDBC作為一種用於執行SQL語句的Java API是如何工作的。下面的一段代碼就是最基本的JDBC開發流程。

在上代碼之前要先匯入JDBC的jar包,由於我用的資料庫是mysql,所以要先導

入如下的jar包

 

接下來的就是載入資料庫驅動,擷取資料庫連結之類的工作了,當然了這些工作都是通過代碼來完成的。為了和接下的mybatis設定檔對比,我在這裡採用的預先處理的方式進行查詢,代碼如下:

public class Testjdbc {    public static void main(String[] args) {        Connection connection = null;        PreparedStatement preparedStatement = null;        ResultSet resultSet = null;        try {            // 載入資料庫驅動            Class.forName("com.mysql.jdbc.Driver");            // 通過驅動管理類擷取資料庫連結            connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123456");            // 定義sql語句 ?表示預留位置            String sql = "select * from user where username = ?";            // 擷取預先處理statement            preparedStatement = (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();                }            }        }    }    }

然後用過JDBC的人也都知道它有這樣那樣的缺點,總結下來有以下幾點:

解決方案:使用資料庫連接池管理資料庫

解決方案:將sql語句配置到xml設定檔中,這樣即使sql變化,也不需要對java代碼重新編譯

解決方案:同樣可以將佔位符和參數配置在xml檔案中

解決方案:將查詢的結果集自動對應為java對象

 

說完了JDBC,大家也都看到了JDBC的種種不便,於是Hibernate、Mybatis等等的對象關係映射架構便應運而生,而名義上雖說都是ORM架構,Hibernate和Mybatis在細枝末節上還是有很大不同的,但是本文是探討Mybatis架構。

 

首先Mybatis是什嗎?

 

Mybatis架構:

 

 

 

 

接下來用mybatis寫一個入門程式

 

首先講一下我們的需求,在我的資料庫裡有一張使用者的表,表結構如下

 

 

我現在要做的是根據使用者的id(主鍵)查詢使用者資訊

 

在開始擼代碼之前,先要搭好環境

 

eclipse本人採用的是java EE的版本,然後可以去https://github.com/mybatis/mybatis-3/releases該網站下載mybatis的jar包匯入到工程裡面去

 

再然後就是就是上面已經提到了的mysql的驅動包

除了上面架構圖所提到的sqlMapConfig.xml設定檔外,還需要一個包來存對應檔(對應檔是什麼後面會提到),即sqlMap。

最後建立log4j.properties檔案方便查看日誌

所以整個項目的架構如下

 

為方便查閱,這裡直接貼出整個項目代碼

首先是log4j.properties檔案

# Global logging configurationlog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

然後是SqlMapconfig.xml

 

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//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>

這串設定檔無非是配置交易管理和資料庫連接池,每個ORM架構都是必備的所以不深究

 

緊接著就是我們的重頭戲對應檔

對應檔命名:

User.xml, 而在mapper代理開發對應檔名稱叫xxxMapper.xml, 比如:UserMapper.xml

而我們在對應檔裡要乾的活就是配置sql語句,最直觀的對比就是hibernate直接在對應檔中將java對象映射為關係(即資料庫中的表),而在mybatis中細化了這種映射關係,具體了輸入映射和輸出映射

先把具體對應檔貼上來,然後一一解釋

 

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="test">    <select id="findUserById" parameterType="int" resultType="com.mybatis.pojo.User">       select * from user where id=#{id};    </select></mapper>

有一下幾點申明:

注意:使用mapper代理方法開發,namespace有特殊作用

User類如下:

之後就是將對應檔載入到全域設定檔SqlMapConfig檔案中去

就是在該檔案加上一句

  <mappers>

    <mapper resource="sqlMap/User.xml"/>

</mappers>

到這裡整個設定檔就完成了,接下來的工作就是編寫程式來測試了

按照之前的架構一步一步來,最後寫成的程式如下:

public class MybatisTest {    @Test    public void findUserByIdTest() throws IOException{                InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);            SqlSession sqlSession=sqlSessionFactory.openSession();                User user=sqlSession.selectOne("test.findUserById",1);                System.out.println(user);    }}

在這裡值得注意的地方有兩個,第一個是輸入資料流(inputStream)來源於mybatis設定檔

第二個地方是是selectOne方法裡的兩個參數:

第一個參數:對應檔中statement的id,在這裡則要寫成 namespace+’.’+statement的id

第二個參數:指定和對應檔中所匹配的parameterType類型的參數

 

結果如下:

 

寫到這裡,Mybatis從設定檔到測試代碼整個Mybatis入門程式已經寫完了,請期待本人接下來的更新

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.