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注入,所以不建議使用
selectOne
和selectList
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