Mybatis今日開始
阿新 • • 發佈:2020-12-15
Mybatis學習
1、簡介
1.1、什麼是Mybatis
如何獲得Mybatis?
-
maven倉庫
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>
1.2、持久化
資料持久化
- 持久化就是將程式的資料在持久狀態和瞬間狀態轉化的狀態
- 記憶體:斷電即失(瞬間狀態)
- 資料庫(jdbc),io檔案持久化(持久狀態)
為什麼需要持久化?
- 有些物件,不能丟失
- 記憶體昂貴
1.3、持久層
Dao層、Service層、Controller層...
- 完成持久化工作的程式碼塊
- 層界限十分明顯
1.4、為什麼需要Mybatis
- 幫助程式設計師將資料存入到資料庫中
- 方便
- 傳統的JDBC程式碼太複雜。簡化,框架,自動化。
- 不用Mybatis也可以,更容易上手。技術沒有高低之分
- 優點:
- 簡單易學
- 靈活
- sql和程式碼的分離,提高了可維護性。
- 提供對映標籤,支援物件與資料庫的orm欄位關係對映
- 提供物件關係對映標籤,支援物件關係組建維護
- 提供xml標籤,支援編寫動態sql。
最重要一點:使用的人多!市場大!
2、第一個Mybatis程式
思路:搭建環境-->匯入Mybatis-->編寫程式碼-->測試!
2.1、搭建環境
搭建資料庫
CREATE DATABASE `mybatis`; USE `mybatis`; CREATE TABLE `user`( `id` INT(20) NOT NULL PRIMARY KEY, `name` VARCHAR(30) DEFAULT NULL, `pwd` VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `user`(`id`,`name`,`pwd`) VALUES (1,'狂神','123456'), (2,'張三','123456'), (3,'李四','123890')
新建專案
- 新建一個普通的maven專案
- 刪除src目錄
- 匯入maven依賴
<!--匯入依賴-->
<dependencies>
<!--MySQL驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2.2、建立一個模組
- 編寫mybatis的核心配置檔案
<?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://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
- 編寫mybatis工具類
//SqlSessionFactory --> SqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用Mybatis第一步:獲取sqlSessionFactory物件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顧名思義,我們可以從中獲得 SqlSession 的例項。
// SqlSession 提供了在資料庫執行 SQL 命令所需的所有方法。
public static SqlSession getSqlSession(){
// SqlSession sqlSession=sqlSessionFactory.openSession();
// return sqlSession;
return sqlSessionFactory.openSession();//美化程式碼
}
}
2.3、編寫程式碼
- 實體類
//實體類
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
- Dao介面
public interface UserDao {
List<User> getUserList();
}
- 介面實現類由原來的UserDaoImpl轉變為一個Mapper配置檔案
<?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=繫結一個對應的Dao/Mapper介面-->
<mapper namespace="com.kuang.dao.UserDao">
<select id="getUserList" resultType="com.kuang.pojo.User">
select * from mybatis.user
</select>
</mapper>
2.4、測試(20-12-15)
注意點:
org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.
- junit測試
public class UserDaoTest {
@Test
public void test(){
//第一步:獲得sqlSession物件
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList=userDao.getUserList();
for(User user : userList){
System.out.println(user);
}
//關閉sqlSession
sqlSession.close();
}
}
可能遇到的問題:
- 配置檔案沒有註冊
- 繫結介面錯誤
- 方法名不對
- 返回型別不對
- Maven匯出資源問題