mybatis入門詳解
Mybatis框架簡介
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis 。2013年11月遷移到Github。
iBATIS一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAOs)
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄
1.mybatis運行過程
1、 sqlmapconfig.xml文件是mybatis全局配置文件,配置了mybatis運行相關的環境。
2、 mapper.xml 是sql映射文件,文件中主要配置了對數據庫操作的sql語句,文件需要在sqlmapconfig.xml文件在進行載入。
3、 sqlSessionFactory 工廠會話,通過主配置文件中的信息構造出來。
4、 sqlSession 通過會話工廠創建,用來操作數據庫。
5、 mybatis底層自定義了Executor執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。
6、 Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id即是Mapped statement的id。
- 配置開發環境
2.1添加相關jar包。
mybaits框架依賴jar包:
mybatis-3.2.7.jar —mybatis的核心包
mybatis-3.2.7.pdf–mybatis使用手冊
如果您使用Maven,只需將以下依賴項添加到您的pom.xml:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--以下是mysql數據庫驅動和log4j jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
除了添加Mybatis jar包還需要添加具體數據庫驅動。
2.2 添加mybatis的主配置文件。
此文件作爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。
主配置文件的名稱可以隨意命名的,一般將其命名爲mybatis-config.xml,這裏也將配置文件命名爲mybatis-config.xml,如果創建的是web項目將配置文件房子src目錄下,如果是maven項目放在main/resources目錄下。
web項目:
maven項目:
2.3 mybatis-config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydatabase"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--註冊映射文件-->
<mapper resource="com/Gorilla1024/dao/UserMapper.xml"/>
</mappers>
</configuration>
我這裏數據庫配置信息默認爲mysql數據庫,賬號密碼:root 123456 請按照實際情況修改。
2.4 映射文件
<?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">
<mapper namespace="com.Gorilla1024.dao.UserMapper">
<!--編寫sql語句-->
</mapper>
2.4 創建數據庫
現在創建一個測試的數據庫。
數據庫已經提前創建好了,命名mydatabase 。
現在創建一張用戶信息表,包括用戶ID,密碼,姓名,手機號,性別。
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`UseId` varchar(20) NOT NULL,
`usePassword` varchar(20) NOT NULL,
`UseName` varchar(40) NOT NULL,
`Phone` varchar(15) NOT NULL,
`UseSex` varchar(4) NOT NULL,
PRIMARY KEY (`UseId`)
) ;
2.5 創建對應數據庫的Java對象。
這裏在 com.Gorilla1024.dao包下創建UserInfo;
package com.Gorilla1024.dao;
public class UserInfo {
private String UseId;
private String usePassword;
private String UseName;
private String Phone;
private String UseSex;
public UserInfo(){};
public UserInfo(String useId, String usePassword, String useName, String phone, String useSex) {
UseId = useId;
this.usePassword = usePassword;
UseName = useName;
Phone = phone;
UseSex = useSex;
}
public String getUsePassword() {
return usePassword;
}
public void setUsePassword(String usePassword) {
this.usePassword = usePassword;
}
public String getUseName() {
return UseName;
}
public void setUseName(String useName) {
UseName = useName;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getUseSex() {
return UseSex;
}
public void setUseSex(String useSex) {
UseSex = useSex;
}
public String getUseId() {
return UseId;
}
public void setUseId(String useId) {
UseId = useId;
}
}
3 mybatis實現簡單的CRUD
3.1 插入信息。
先編寫sqlmapper.xml sql映射。
<?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">
<mapper namespace="com.Gorilla1024.dao.UserMapper">
<insert id="insertUser" parameterType="com.Gorilla1024.dao.UserInfo">
insert into UserInfo values (#{UseId},#{usePassword},#{UseName},#{Phone},#{UseSex})
</insert>
</mapper>
</mapper>
id 是唯一標識這個sql映射,在同一個命名空間中保持唯一。
parameterType 是作爲輸入參數類別配置,mybatis會自動將傳入參數對象一一配對賦值給#{xxx} 保持xxx於參數對象內的變量名相同。(可以省略不寫)。
測試代碼
public void test2(){
SqlSession sqlsession=null;
UserInfo userinfo=new UserInfo("1","123456","Gorilla1024","18143375977","男");
try {
//加載核心文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//創建sqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//創建會話
sqlsession= sqlSessionFactory.openSession();
//執行sql語句 一個參數爲sqlmapper文件中的ID,第二個爲創建的user對象。
sqlsession.insert("insertUser",userinfo);
//提交事務,不提交數據庫不會發生改變。
sqlsession.commit();
} catch (IOException e) {
e.printStackTrace();
}
}
結果
3.2 查詢信息
添加sql映射。
<select id="selectUser" resultType=""com.Gorilla1024.dao.UserInfo" >
SELECT * FROM UserInfo;
</select>
resultType 設置查詢結果集類型,結果集會對應到UserInfo對象。
測試代碼
public void test2(){
SqlSession sqlsession=null;
List<UserInfo> list=new ArrayList<UserInfo>();
try {
//加載核心文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//創建sqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//創建會話
sqlsession= sqlSessionFactory.openSession();
//執行sql語句 一個參數爲sqlmapper文件中的ID,第二個爲創建的user對象,將結果賦值給UserInfo對象的集合。
list= sqlsession.selectList("selectUser");
System.out.println(list);
//提交事務,不提交數據庫不會發生改變。
sqlsession.commit();
} catch (IOException e) {
e.printStackTrace();
}
}
結果
更新,刪除類似,這裏就省略掉了。
如有錯誤歡迎指出,謝謝閱讀。