1. 程式人生 > 其它 >Mybatis筆記(一):第一個Mybatis程式

Mybatis筆記(一):第一個Mybatis程式

時間:2021/10/11

本文是學習了b站狂神老師的視訊後的一個總結,總結了一下編寫一個mybatis專案所需的基本流程和可能遇到的一些bug。

首先展示一下專案的整體結構,如下圖:

然後專案的具體流程如下所示:

一.建立資料庫和相應的表

這裡我使用的mysql,建立了一個mybatis資料庫,資料庫中有一個user表,表中插入了兩條記錄。

二.在maven專案的配置檔案中插入依賴

這個專案中使用的依賴主要有mysql驅動、mybatis和junit。具體配置程式碼如下:

 1 <!--匯入依賴-->
 2     <dependencies>
 3         <!--
mysql驅動--> 4 <dependency> 5 <groupId>mysql</groupId> 6 <artifactId>mysql-connector-java</artifactId> 7 <version>5.1.46</version> 8 </dependency> 9 <!--mybatis--> 10 <dependency
> 11 <groupId>org.mybatis</groupId> 12 <artifactId>mybatis</artifactId> 13 <version>3.5.6</version> 14 </dependency> 15 <!--junit--> 16 <dependency> 17 <groupId>junit</
groupId> 18 <artifactId>junit</artifactId> 19 <version>4.13.1</version> 20 <scope>test</scope> 21 </dependency> 22 23 </dependencies>

三.編寫mysql配置檔案

在寫url時要注意後面的引數,比如時區什麼的。

 1 <?xml version="1.0" encoding="UTF8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <environments default="development">
 7         <environment id="development">
 8             <transactionManager type="JDBC"/>
 9             <dataSource type="POOLED">
10                 <property name="driver" value="com.mysql.jdbc.Driver"/>
11                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT"/>
12                 <property name="username" value="root"/>
13                 <property name="password" value="123456789.a"/>
14             </dataSource>
15         </environment>
16     </environments>
17 
18     <mappers>
19         <mapper resource="bupt/machi/dao/UserMapper.xml"/>
20     </mappers>
21 </configuration>

四.編寫獲取SqlSession物件的工具類

這段程式碼首先要讀取mysql配置檔案,然後通過輸入流獲取到SqlSessionFactory物件,最後獲取SqlSession物件。

 1 package bupt.machi.utils;
 2 
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 
 8 import java.io.IOException;
 9 import java.io.InputStream;
10 
11 //mybatis工具類,返回一個SqlSession物件
12 public class MybatisUtils {
13 
14     private static SqlSessionFactory sqlSessionFactory;
15 
16     static{
17         try{
18             String resource = "mybatis_config.xml";
19             InputStream inputStream =  Resources.getResourceAsStream(resource);
20             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
21         }catch (IOException e){
22             e.printStackTrace();
23         }
24     }
25 
26     public static SqlSession getSqlSession(){
27         //獲取SqlSession物件
28         return sqlSessionFactory.openSession();
29     }
30 }

五.編寫實體類

這裡編寫一個User實體類,屬性必須與資料庫中屬性一一對應。

 1 package bupt.machi.pojo;
 2 
 3 //實體類
 4 public class User {
 5 
 6     private int id;
 7     private String name;
 8     private String pwd;
 9 
10     public User(){
11 
12     }
13 
14     public User(int id, String name, String pwd){
15         this.id = id;
16         this.name = name;
17         this.pwd = pwd;
18     }
19 
20     public int getId(){
21         return id;
22     }
23 
24     public String getName() {
25         return name;
26     }
27 
28     public String getPwd(){
29         return pwd;
30     }
31 
32     public void setId(int id){
33         this.id = id;
34     }
35 
36     public void setName(String name){
37         this.name = name;
38     }
39 
40     public void setPwd(String pwd){
41         this.pwd = pwd;
42     }
43 
44     @Override
45     public String toString(){
46         return "User{" + "id=" + id + ",name=" + name + ",pwd=" + pwd + "}";
47     }
48 }

六.編寫dao/mapper介面

1 package bupt.machi.dao;
2 
3 import bupt.machi.pojo.User;
4 
5 import java.util.List;
6 
7 public interface UserDao {
8     List<User> getUserList();
9 }

七.編寫sql操作的配置檔案

該檔案起到了dao/mapper介面實現類的作用。

 1 <?xml version="1.0" encoding="UTF8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!--繫結一個Dao介面,使用xml檔案代替之前的實現類-->
 6 <mapper namespace="bupt.machi.dao.UserDao">
 7     <!--id對應方法名字-->
 8     <select id="getUserList" resultType="bupt.machi.pojo.User">
 9         select * from mybatis.user
10     </select>
11 </mapper>

八.編寫測試類

要注意這裡測試類的路徑要與被測試類的路徑相同,最後要記得關閉SqlSession物件。

 1 package bupt.machi.dao;
 2 
 3 import bupt.machi.pojo.User;
 4 import bupt.machi.utils.MybatisUtils;
 5 import org.apache.ibatis.session.SqlSession;
 6 import org.junit.Test;
 7 
 8 import java.util.List;
 9 
10 public class UserDaoTest {
11 
12     @Test
13     public void test(){
14         //獲取SqlSession物件
15         SqlSession sqlSession = MybatisUtils.getSqlSession();
16 
17         UserDao userDao = sqlSession.getMapper(UserDao.class);
18         List<User> userList = userDao.getUserList();
19 
20         for (User user : userList) {
21             System.out.println(user);
22         }
23 
24         sqlSession.close();
25     }
26 }

九.可能出現的bug以及解決方法

1)在mysql配置檔案中,需要通過mapper標籤引入你編寫的sql配置檔案,每一個都必須引入。

1 <mappers>
2   <mapper resource="bupt/machi/dao/UserMapper.xml"/>
3 </mappers>

2)如果出現找不到sql配置檔案的問題,可能是由於maven的資源過濾機制,要在父專案和子專案的配置檔案中新增build標籤。

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>

            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
努力,向上,自律