MyBatis從零開始(一)
阿新 • • 發佈:2020-12-08
技術標籤:框架mybatisjavamysqlmaven資料庫
1、環境
-
JDK 1.8
-
Mysql 5.7
-
Maven 3.6.1
-
IDEA
2、回顧
-
JDBC
-
Mysql
-
JAVA 基礎
-
Maven
-
Junit
3、框架
最好看官網
MyBatis3
4、簡介
4.1、什麼是MyBatis
- MyBatis 是一款優秀的持久層框架
- 它支援定製化 SQL、儲存過程以及高階對映
- MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集
- MyBatis 可以使用簡單的 XML 或註解來配置和對映原生型別、介面和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 物件)為資料庫中的記錄
4.2、獲取MyBatis
- Maven倉庫:mvnrepository.com
- Github:搜尋MyBatis和中文版
4.3、什麼是持久化
資料持久化
- 持久化就是將程式的資料在持久狀態和瞬時狀態轉化的過程
- 記憶體:斷電即失
- 資料庫(JDBC),io檔案持久化
為什麼需要持久化?
- 有一些物件,不能丟,要持久化
- 記憶體價格高
4.4、持久層
Dao層、Service層、Controller層…
- 完成持久化工作的程式碼塊
- 層界限十分明顯
4.5、為什麼需要MyBatis
- 幫助程式設計師將資料存進資料庫中
- 方便
- 傳統的JDBC程式碼太複雜。簡化、框架、自動化
- 更容易上手
5、第一個MyBatis
思路:搭建環境–>匯入MyBatis–>編寫程式碼–>測試
5.1、搭建環境
搭建資料庫
建立專案
1、新建普通Maven
2、刪除src
3、匯入Maven依賴
<!--資料庫連線-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!--日誌-->
<dependency >
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
加上原有的JUnit
5.2、建立一個模組
-
編寫核心配置檔案(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"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/name?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8&useUnicode=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
-
編寫MyBatis工具類
package com.hls.util;
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 java.io.IOException;
import java.io.InputStream;
/**
* @author Shu
* @date 2019-11-19
* */
//sqlSessionFactory --->sqlSession
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
//獲取sqlsessionfactory物件
try {
String resource = "MyBatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
/*省略了SqlSession物件的建立*/
/*SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
SqlSession 完全包含了面向資料庫執行 SQL 命令所需要的方法
*/
return sqlSessionFactory.openSession();
}
}
5.3、編寫程式碼
-
實體類
package com.hls.pojo; public class User { //實體類 private Integer id; private String name; private String ago; private String add; private String birthday; public User(){ } public User(Integer id, String name, String ago, String add, String birthday) { this.id = id; this.name = name; this.ago = ago; this.add = add; this.birthday = birthday; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAgo() { return ago; } public void setAgo(String ago) { this.ago = ago; } public String getAdd() { return add; } public void setAdd(String add) { this.add = add; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } }
-
Dao介面
package com.hls.dao; import com.hls.pojo.User; import java.util.List; public interface UserDao { List<User> getUserList(); }
-
介面實現類
<?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 名稱空間 繫結一個mapper介面--> <mapper namespace="com.hls.dao.UserDao"> <select id="getUserList" resultType="com.hls.pojo.User"> select * from name.info </select> </mapper>
5.4、測試
注意點:
org.apache.ibatis.binding.BindingException: Type interface com.hls.dao.UserDao is not known to the MapperRegistry.
每一個Mapper.xml檔案都需要在MyBatis核心配置檔案中註冊**
-
maven 由於他的約定大於配置,在寫配置檔案的時候,可能無法被匯出
-
pom檔案 pom.xml
<build> <resources> <resource> <directory>src/main/resource</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
資源過濾
預設放在resource下,但是不一定全部的配置檔案都在resource下,所以配置在java中也掃描過濾,找到配置檔案。
-
junit測試
package com.hls.test; import com.hls.dao.UserDao; import com.hls.pojo.User; import com.hls.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserTest { @Test public void test(){ //第一步,獲得SqlSession物件 SqlSession sqlSession = MybatisUtil.getSqlSession(); //執行SQl 方式一:getMapper UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //關閉SqlSession物件 sqlSession.close(); } }
-
可能遇到的問題
- 配置檔案沒有註冊
- 繫結介面錯誤
- 方法名不對
- 返回型別不對
- maven資源匯出問題