MyBatis(一):第一個MyBatis程序


本文是按照狂神說的教學視頻學習的筆記,強力推薦,教學深入淺出1便就懂!b站搜索狂神說即可

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

本文使用IDEA和maven項目搭建,數據庫使用MySQL 8。

定義:MyBatis

  • MyBatis 是一款優秀的持久層框架

  • 它支持自定義 SQL、存儲過程以及高級映射

  • MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作

  • MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。

  • MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。

  • 以上內容摘自官網和百度百科

獲得MyBatis

數據庫准備

 

 

1. 導入基本依賴

       使用Maven項目導入基本依賴

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.19</version>
       </dependency>
       <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.4</version>
       </dependency>
           
           <!--這個是用於分步發布程序-->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.11</version>
           <scope>test</scope>
       </dependency>

2. 配置mybatis-configxml文件

  在resources文件夾下新建一個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.cj.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3308/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true&amp;serverTimezone=GMT%2B8"/>
               <property name="username" value="root"/>
               <property name="password" value="mysql"/>
           </dataSource>
       </environment>
   </environments>

   <!--     每一個Mapper.xml都需要Mybatis核心配置文件中注冊    -->
   <mappers>
       <mapper resource="com/rzp/dao/UserMapper.xml"/>
   </mappers>
</configuration>

3.創建sqlSessionFactory工具類及其對象

  創建MybatisUtils類,出於開發習慣按以下結構配置。

 

 

 

//創建sqlSessionFactory工具類
public class MybatisUtils {
   private static SqlSessionFactory sqlSessionFactory;
   static{
       InputStream inputStream = null;
       try {

           //使用Mybatis,就是利用該工具類獲取sqlSessionFacitory對象
           String resource = "mybatis-config.xml";
           inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
           e.printStackTrace();
      }
  }
   
   //創建對象
   public static SqlSession getSqlSession(){
       return sqlSessionFactory.openSession();
  }
}

4.編寫代碼

示例

  • 注意事項:要把IDEA的編譯方式改成UTF-8,否則編譯出來的xml文件中文是亂碼,導致程序執行會報錯:1字節的UTF-8序列的字節1無效

 

 

 

  • 總覽

 

 

 

  • 實體類User

package com.rzp.pojo;

public class User {
   private int id;
   private String name;
   private String 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;
  }

   public User() {
  }

   public User(int id, String name, String pwd) {
       this.id = id;
       this.name = name;
       this.pwd = pwd;
  }
}
  • Mapper接口(UserMapper)

public interface UserMapper {
   List<User> getUserList();
}
  • Mapper對應xml文件(UserMapper.xml)文件

    •   注意這個文件名字和路徑必須和我們第一個xml配置文件:mybatis-config.xml中最后一項配置的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接口-->
<!--namespace名字要與Mapper接口對應-->
<mapper namespace="com.rzp.dao.UserMapper">
   <!--
   id就是Mapper接口中方法的名字
    resultType就是返回的類型,嚴格來說現在返回的是list,這種情況下是返回的泛式
   -->
   <select id="getUserList" resultType="com.rzp.pojo.User">
   select * from mybatis.user
   </select>


</mapper>
  • 測試方法

    •   其實不必要用try catch來包圍,但是官方推薦使用,主要是為了finally關閉資源
    @Test
   public void test(){
       //獲得sqlSession對象

       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try{
           //執行SQL
           //方式一:getMapper
           UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
           List<User> userList = userMapper.getUserList();

           for (User user : userList) {
               System.out.println(user);
          }
      }catch (Exception e){
           e.printStackTrace();
      }finally {
           //關閉sqlSession
           sqlSession.close();

      }

測試結果

 

 

 

拓展1

  • java 7開始支持try-with-resource方法,寫法是:

try(在這里放入要new的對象){
   
}catch(){
   
}
try catch執行完以后會自動關閉對象的資源,用於IO或者sqlSession都可以,其實就相當於省略了finally的關閉資源
  • 就可以改成這樣


       try(SqlSession sqlSession = MybatisUtils.getSqlSession()){
           //執行SQL
           //方式一:getMapper
           UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
           List<User> userList = userMapper.getUserList();

           for (User user : userList) {
               System.out.println(user);
          }
      }catch (Exception e){
           e.printStackTrace();
      }

  • 但是如果是maven項目,pom文件要制定jdk版本,否則會發生編譯錯誤:Try-with-resources are not supported at language level '5’

    <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                   <source>8</source>
                   <target>8</target>
               </configuration>
           </plugin>
       </plugins>
   </build>

拓展2

除了使用getMapper方法外,還可以使用以下方式調用:

//獲得sqlSession對象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
   //方式二:
   List<User> usersList = sqlSession.selectList("com.rzp.dao.UserMapper.getUserList");
   for (User user : usersList) {
       System.out.println(user);
  }
}catch (Exception e){
   e.printStackTrace();
}finally {
   //關閉sqlSession
   sqlSession.close();

}
  • 這是舊版本的方法。

  • 顯然,這個方法在編寫的時候必須選擇合適的方法,而且調用的UserMapper的方法時也沒有那么方便。這個方法官方不推薦使用。

 

 

 這是我的GitHub地址

https://github.com/renzhongpei?tab=repositories

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM