Mybatis筆記(一):第一個Mybatis程式
阿新 • • 發佈:2021-10-11
時間: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&useUnicode=true&characterEncoding=UTF-8&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>努力,向上,自律