1.MyBatis架構(簡單介紹MyBatis的流程) 接下來簡單介紹一下這張圖:首先明確我們的目的就是要創建sqlsession然後利用這個對象去執行sql 完成CRUD。創建sqlsession的前提就是用session工廠去創建,利用工廠創建需要原材料啊,所以最頂端的MyBatis配置文件就是 ...
1.MyBatis架構(簡單介紹MyBatis的流程)
接下來簡單介紹一下這張圖:首先明確我們的目的就是要創建sqlsession然後利用這個對象去執行sql 完成CRUD。創建sqlsession的前提就是用session工廠去創建,利用工廠創建需要原材料啊,所以最頂端的MyBatis配置文件就是所需要的原材料。至於最下麵的Exector(執行者)就是sqlsession中的對象,具體是由它去執行sql語句,而MappedStatement對象再Executor中是一個存sql的對象,它把sql給Exectuor(執行者),執行者去執行。由於寫的sql肯定有占位符啊,所以最左邊的輸入映射就是去替換裡面的占位符。執行完sql,比如查詢,必然會返回結果,那麼輸出映射就是把結果返回來。
2.MyBatis下載
mybaits的代碼由github.com管理
下載地址:https://github.com/mybatis/mybatis-3/releases
3.項目
3.1 環境搭建
3.11 創建一個Java Project
3.12 導包
首先在project創建一個lib文件夾
把下載好的mybatis中的jar包和lib目錄下的jar包複製到lib文件夾下
這裡涉及到資料庫 本人使用的是MySql 所以 把連接mysql的jar也導入,大家可以自己百度下載jar包
bulid to path
3.12 開始入門
首先在資料庫中創建一張表 這裡我起名為user 並加點數據
在項目中創建User的POJO對象
package Com.Dy;
import java.util.Date;
public class User {
private Integer id;
private String username;
private String sex;
private Date birthday;
private String address;
public User() {
super();
}
public User(Integer id, String username, String sex, Date birthday, String address) {
super();
this.id = id;
this.username = username;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer 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 + "]";
}
}
根據最開始的架構圖 第一步就是準備我們的原材料,所以開始寫我們的核心配置文件sqlMapConfig.xml,既然涉及到了資料庫我們肯定要告訴MyBatis使用什麼資料庫和連接字元串,讓它可以去執行我們想要的sql。
<?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 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="hjf" />
</dataSource>
</environment>
</environments>
</configuration>
還是第一張圖,可以看到除了核心配置文件,下麵還有個Mapper.xml,這個xml文件就是我們用來寫sql的地方,這樣說可能比較抽象,看到代碼大家應該能懂,所以我們來構建UserMap.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">
由於MyBatis只會載入核心配置文件,所以我們要在核心文件中配置,告訴MyBatis去這個文件找sql。resource就是你的Map的名字,這裡是相對路徑,大家可以用ctrl加左鍵點一下,看能不能進去,點的進應該就沒寫錯。
還是回到架構圖,我們準備好了原材料,就要把原材料輸送給工廠,所以我們創建一個單元測試,和創建普通類一樣,就是要在你寫的測試方法加上@Test,然後快捷鍵導包。
首先我們要獲得原材料,載入核心配置文件,有多種方法,這裡就簡單的用一種。
把材料輸送給工廠,獲得工廠對象
工廠有了材料,就可以造產品啦
有了Sqlsession就代表有了Executor對象,那麼就可以去執行sql啦,執行的sql是放在之前的UserMap,xml文件中,那麼我們就去這個xml寫sql吧,這裡先寫個簡單的查詢
sql是寫在Mapping標簽下,具體怎麼寫可以看下麵的註釋
<?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表示命名空間,防止和其他的Map里得id重覆 -->
<mapper namespace="User">
<!-- id表示這個select的名字,只能唯一,以後就是通過這個id去找到這個select和下麵的sql -->
<!-- #{}是占位符,裡面的值可以是任意的 你可以寫#{v}和這裡的#{id}作用一樣,我們需要告訴框架這個占位符是什麼類型的,
我這裡的id是Integer類型,所以parameterType="Integer" -->
<!-- 大家可以看到框架最右邊是可以返回POJO類型的數據,所以我們配置返回的類型是User型,所以resultType是User型,要寫全類名哦 -->
<select id="GetUser" parameterType="Integer"
resultType="Com.Dy.User">
select * from user where id = #{id}
</select>
</mapper>
寫好sql後,自然是執行sql啦,因為我們只查一個所以用下麵這個方法
還記得上面我們寫了個占位符嘛,這裡的1 就是去替換占位符的。執行 結果:
同理 如果你的paramterType是POJO類型,如下麵的inserUser的select中,給入的參數是User類型,如果你的占位符中寫的內容和你的類的欄位相同,那麼它就會預設用那個值,比如你要插入一個User,給一個User,那個User有一個username欄位而且值為admin,那麼你插入的時候如果寫的是#{username}那麼它就會用User類的username也就是admin去替換。