1. 程式人生 > >Mybatis學習筆記(三)【入門程式一】

Mybatis學習筆記(三)【入門程式一】

Contents

mybatis入門程式

工程結構

在IDEA中新建了一個普通的java專案,新建資料夾lib,加入jar包,工程結構如圖。

這裡寫圖片描述

  • log4j.properties
# Global logging configuration
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
  • 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事務管理,事務控制由mybatis--> <transactionManager type="JDBC" /> <!-- 資料庫連線池,由mybatis管理--> <dataSource type="POOLED"> <property
name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://120.25.162.238:3306/mybatis001?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="123" /> </dataSource> </environment> </environments> </configuration>

對映檔案

  • sqlmap/User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 名稱空間,作用就是對sql進行分類化管理,理解為sql隔離
 注意:使用mapper代理方法開發,namespace有特殊重要的作用
 -->
<mapper namespace="test">
    <!-- 在對映檔案中配置很多sql語句 -->
    <!--需求:通過id查詢使用者表的記錄 -->
    <!-- 通過select執行資料庫查詢
     id:標識對映檔案中的sql,稱為statement的id
     將sql語句封裝到mappedStatement物件中,所以將id稱為statement的id
     parameterType:指定輸入引數的型別
     #{}標示一個佔位符,
     #{value}其中value表示接收輸入引數的名稱,如果輸入引數是簡單型別,那麼#{}中的值可以任意。

     resultType:指定sql輸出結果的對映的java物件型別,select指定resultType表示將單條記錄對映成java物件
     -->
    <select id="findUserById" parameterType="int" resultType="com.iot.mybatis.po.User">
        SELECT * FROM  user  WHERE id=#{value}
    </select>

    <!-- 根據使用者名稱稱模糊查詢使用者資訊,可能返回多條
    resultType:指定就是單條記錄所對映的java物件型別
    ${}:表示拼接sql串,將接收到引數的內容不加任何修飾拼接在sql中。
    使用${}拼接sql,引起 sql注入
    ${value}:接收輸入引數的內容,如果傳入型別是簡單型別,${}中只能使用value
     -->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.iot.mybatis.po.User">
        SELECT * FROM user WHERE username LIKE '%${value}%'
    </select>


</mapper>

在sqlMapConfig.xml中載入User.xml

<!-- 載入對映檔案-->
<mappers>
    <mapper resource="sqlmap/User.xml"/>
</mappers>

程式程式碼

  • po類User.java
package com.iot.mybatis.po;

import java.util.Date;

/**
 * Created by Administrator on 2016/2/21.
 */
public class User {
    //屬性名要和資料庫表的欄位對應
    private int id;
    private String username;// 使用者姓名
    private String sex;// 性別
    private Date birthday;// 生日
    private String address;// 地址

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", sex=" + sex
                + ", birthday=" + birthday + ", address=" + address + "]";
    }
}
  • 測試程式碼
package com.iot.mybatis.first;

import com.iot.mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * Created by Administrator on 2016/2/23.
 */
public class MybatisFirst {

    //根據id查詢使用者資訊,得到一條記錄結果

    @Test
    public void findUserByIdTest() throws IOException{
        // mybatis配置檔案
        String resource = "SqlMapConfig.xml";
        // 得到配置檔案流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //建立會話工廠,傳入mybatis配置檔案的資訊
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 通過工廠得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 通過SqlSession操作資料庫
        // 第一個引數:對映檔案中statement的id,等於=namespace+"."+statement的id
        // 第二個引數:指定和對映檔案中所匹配的parameterType型別的引數
        // sqlSession.selectOne結果 是與對映檔案中所匹配的resultType型別的物件
        // selectOne查詢出一條記錄
        User user = sqlSession.selectOne("test.findUserById", 1);

        System.out.println(user);

        // 釋放資源
        sqlSession.close();

    }

    // 根據使用者名稱稱模糊查詢使用者列表
    @Test
    public void findUserByNameTest() throws IOException {
        // mybatis配置檔案
        String resource = "SqlMapConfig.xml";
        // 得到配置檔案流
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 建立會話工廠,傳入mybatis的配置檔案資訊
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);

        // 通過工廠得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // list中的user和對映檔案中resultType所指定的型別一致
        List<User> list = sqlSession.selectList("test.findUserByName", "小明");
        System.out.println(list);
        sqlSession.close();

    }


}

輸出:

  • findUserByIdTest()
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1857815974.
DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]6ebc05a6]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
User [id=1, username=王五, sex=2, birthday=null, address=null]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connecti[email protected]6ebc05a6]
DEBUG [main] - Closing JDBC Connection [[email protected]6ebc05a6]
DEBUG [main] - Returned connection 1857815974 to pool.
  • findUserByNameTest()
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1596467899.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE username LIKE '%小明%' 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 3
[User [id=16, username=張小明, sex=1, birthday=null, address=河南鄭州], User [id=22, username=陳小明, sex=1, birthday=null, address=河南鄭州], User [id=25, username=陳小明, sex=1, birthday=null, address=河南鄭州]]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb]
DEBUG [main] - Returned connection 1596467899 to pool.

總結

  • parameterType

在對映檔案中通過parameterType指定輸入引數的型別

  • resultType

在對映檔案中通過resultType指定輸出結果的型別

  • #{}${}

#{}表示一個佔位符號;

${}表示一個拼接符號,會引起sql注入,所以不建議使用

  • selectOneselectList

selectOne表示查詢一條記錄進行對映,使用selectList也可以使用,只不過只有一個物件

selectList表示查詢出一個列表(引數記錄)進行對映,不能夠使用selectOne查,不然會報下面的錯:

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3

相關推薦

Mybatis學習筆記()入門程式

Contents mybatis入門程式 工程結構 在IDEA中新建了一個普通的java專案,新建資料夾lib,加入jar包,工程結構如圖。 log4j.properties # Global logging configura

mybatis學習筆記()-- 優化數據庫連接配置

bsp pro 新建 數據 配置信息 onf ron XML oca 原來直接把數據庫連接配置信息寫在conf.xml配置中,如下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configura

MyBatis學習筆記() 關聯關係

  首先給大家推薦幾個網頁: http://blog.csdn.net/isea533/article/category/2092001 沒事看看 - MyBatis工具:www.mybatis.tk http://www.mybatis.org/mybatis-3/

mybatis學習筆記——動態代理

在筆記二中,我們在使用mybatis查詢資料的操作中,使用了dao層的實現類,在實現類中增刪改查的程式碼比較簡單,而且程式碼的結構類似,有很多的共同點。因此我們可以使用動態代理來實現實現類的建立,我們只需配置一些引數,就可以使用jdbc動態代理的方式,進行建立實現類。 使用

Linux學習筆記文件及目錄的權限管理篇

權限 pass local pad shell 寫入 src authent 控制 文件及目錄的權限管理   上篇簡單介紹了下文件和目錄的一些簡單的操作,接下來介紹用戶和文件權限的管理。首先了解用戶和組賬號的配置文件,然後是管理用戶和組賬號,最後要會設置文件和目錄權限和歸屬

學習筆記Web 叢集實戰05_CentOS 7.x 系統安裝後的基本配置及調優_楊利婷

一、基本配置 網路配置 網路配置常用的兩種方式為橋接和 NAT 模式。本文采用的是 NAT 模式連線網路。 瞭解更多網路型別可參照【Web 叢集實戰】01_VMware 虛擬機器常見的網路型別 1)首先,在宿主機 Windows 的計算機管理 - 服

Python學習筆記輸入和輸出

文章內容基於廖雪峰Python教程,參考慕課網相關課程,並進行了整理。文章僅供本人學習使用,若侵權將立刻刪除。 若無特別說明,文章內容都針對於Python2.7版本。 輸出 print加上字串、整數或變數,即可實現輸出。 多個輸出項需要用逗號隔開,輸出時會自動以空格隔

Eric6與pyqt5學習筆記 1安裝和配置

一起學習pyqt吧~ ========================================================== 配置環境 我的python環境為python3.5 PS:如果我的版本為python3.6怎麼辦?

Eric6與pyqt5學習筆記 7教程資料分享

同步更新於專案github source.md 很遺憾這個專欄應該不會繼續更新學習教程了,之前有朋友郵件問我什麼時間繼續提供教程或者推薦一下學習資料,在這裡統一將自己的一些學習資料分享出來~ py

Python學習筆記字串和編碼

字元編碼 最早的ASCII,只有127個字母被編到計算機中。中國製定了GB2312編碼,用來把中文編進去。其它語言也出現了各自的編碼。 為了統一編碼,產生了Unicode,它把所有語言都統一到一套編碼裡,解決了亂碼問題,Unicode編碼通常是2個位元組。 為了節約,出

MyBatis學習筆記(入門

相關文章 首先給大家推薦幾個網頁: 這些也是我朋友介紹的。剛剛接觸MyBatis可以看看。接下來就開始學習mybatis了。 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache softwa

Mybatis學習筆記01—Mybatis入門

什麼是Mybatis: Mybatis是一款持久層框架。用於程式與資料庫的之間的互動。 Mybatis和大名鼎鼎的全自動持久層框架Hibernate最大不同的地方在於,Mybatis是半自動的,由開發人員來定製sql語句。 並且相比較Hibernate而言Mybatis

Mybatis學習筆記(二)--入門程式

1.下載Mybatis包 mybaits的程式碼由github.com管理 下載地址:https://github.com/mybatis/mybatis-3/releases 選擇對應的版本下載 下載後解壓mybatis後 2.環境搭建 2.1 建立工程

黑馬程式設計師Objective-C語言學習筆記之物件的建立、使用和方法呼叫(

--------------------------------------------IOS期待與您交流!-------------------------------------------- 一、物件的建立 物件是由類建立,我們使用上一文章用到的類來建立物件。 說明:

Unity 3D學習筆記十:遊戲元素——遊戲地形

nbsp 3d遊戲 strong 直觀 分辨率 == 摩擦力 fill 世界 遊戲地形 在遊戲的世界中,必然會有非常多豐富多彩的遊戲元素融合當中。它們種類繁多。作用也不大同樣。一般對於遊戲元素可分為兩種:經經常使用。不經經常使用。經常使用的元素是遊戲中比較重要的元素。一

JavaEE--Mybatis學習筆記

一個數 border none 取出 bean 需要 table add 基金 一、簡介: MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為M

2018/08/14 《Redis 入門指南》 學習筆記()

大於 tsa 16px 什麽 get 執行 returns 圖片 font 讀   第五章《實踐》   第七章《持久化》 總結 PS:   在實踐章節涉及到了很多語言 Node/Python等。因為這些語言目前還沒有涉及。所以只挑選有關的 PHP 章節來做講解。 1

Mybatis學習筆記(1)——第一個程式

暑期之前就有打算學習SSM,但是我記得當時再配置一個框架瘋狂報錯,弄得我很難受,,再加上當時有點其他事情,所以就放了下來。現在很有需求要會ssm,所以就學了一下。感覺框架這東西配置就煩的要死。錯一丁點就全錯。。下面開始說配置詳情。 介紹一下這些東西,將mybatis的jar包依賴放

Mybatis學習筆記之多對與一對多關係

Mybatis一對多關係 一、資料庫與資料表的建立 學生與班級是一對多的關係,首先建立一個學生表 create table tb_student( -> id int not null auto_increment, -> name varchar(10)

MyBatis學習筆記---入門

MyBatis學習筆記 一、資料庫與資料表的建立 1.建立資料庫 create database thymeleaf; use thymeleaf; 2.建立資料表 create table tb_user( -> id int not null auto_in