日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis初级入门及常见问题

發布時間:2024/7/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis初级入门及常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

入門案例

  • 創建maven工程
    項目目錄結構:
  • 首先在maven的pom.xml導入Mybatis和MySQL的依賴坐標:
  • <dependencies><!--Junit測試依賴--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--Mybatis依賴, 我使用3.4.5版本--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--MySQL連接數據庫的依賴, 使用版本5.1.6,: 版本必須與數據庫對應, 否則因為數據庫或者jar版本不匹配報數據庫連接異常--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!--日志依賴, 用于觀察Mybatis發送的SQL語句--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
  • 編寫User實體類(位于com.regotto.domain包下面)
  • public class User implements Serializable {//存在如下屬性private int id;private String username;private Date birthday;private String sex;private String address;//get, set, toString方法就省略了}
  • 編寫持久層接口(位于com.regotto.dao包下面)
  • package com.regotto.dao;import com.regotto.domain.User;import org.apache.ibatis.annotations.Select;import java.util.List;/*** Dao接口* @author regotto*/public interface UserDao {/**查詢所有用戶* @return list*///@Select("select * from user"), 注解開發List<User> findAll();}
  • 編寫持久層映射文件(UserDao.xml, 必須位于resource路徑下的com.regotto.dao中, 否則后面會因為路徑問題, 報映射文件找不到的異常)
    注: 基于注解開發的時候, 不需要配置持久層映射文件, 必須記住一定Mybatis不允許對一個Dao層接口既使用xml開發, 又使用注解開發, 當使用注解開發的時候要把Dao層映射文件刪除, 否則報載入映射文件異常!!!
  • <?xml version="1.0" encoding="UTF-8"?><!--設置dtd約束, 這樣后面才會有Mybatis的提示--><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.regotto.dao.UserDao"><!--select: 執行select語句的標簽id: 對Dao層UserDao接口的哪一個方法執行select操作(如下id表示findAll, 表示對findAll方法執行SQL語句)resultType: 返回值類型, 查詢用戶, 返回值類型User(此處需要寫包的全路徑)--><select id="findAll" resultType="com.regotto.domain.User">select * from user</select></mapper>

    對同一個Dao接口, 注解與配置文件同時存在, 將出現如下錯誤

  • 編寫Mybatis配置文件(SqlMapConfig.xml, 該文件位于resource文件夾下)
    無論是xml開發, 還是注解開發, 必須要寫Mybatis的配置文件
  • <?xml version="1.0" encoding="UTF-8"?> <!--導入配置文件dtd--> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置數據庫環境為mysql--><environments default="mysql"><!--配置mysql環境, id需要與前面default一樣, 否則報環境配置錯誤--><environment id="mysql"><!--配置事務類型, 默認使用Mysql自己的JDBC事務--><transactionManager type="JDBC"></transactionManager><!--配置連接池(數據源DataSource), 使用的是Mybatis自己的連接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="qad12345"/></dataSource></environment></environments><!--指定映射文件的位置, 每一個Dao都有一個獨立的映射文件--><mappers><!--在resource目錄下包中持久層映射文件, 在使用注解的時候不能使用XXXDao.xml配置文件, mybatis的約束不能對同一個Dao既使用注解, 又使用配置文件, 此時要做的就是將XXXDao配置文件移出com.regotto.dao中mapper: 配置Dao開發方式resource: Dao層映射文件位置class: Dao接口在包中位置--><!--使用Dao層映射文件(UserDao.xml)開發--><mapper resource="com/regotto/dao/UserDao.xml"/><!-- 使用注解的方式--><!--<mapper class="com.regotto.dao.UserDao"/>--></mappers></configuration>
  • Log4j配置文件(位于resource文件夾下)
  • # Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:\axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
  • 編寫測試類
  • package com.regotto;import static org.junit.Assert.assertTrue;import com.regotto.dao.UserDao; import com.regotto.domain.User; 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 org.junit.Test;import java.io.IOException; import java.io.InputStream; import java.util.List;/*** Unit test for MybatisTest App.*/ public class MybatisTest {public static void main(String[] args) throws Exception {//1.讀取配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");//2.創建SQLSessionFactory工廠SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.創建session對象SqlSession sqlSession = sqlSessionFactory.openSession();//4.使用SqlSession對象創建Dao接口的代理對象UserDao userDao = sqlSession.getMapper(UserDao.class);//代理對象直接調用對應的方法List<User> users = userDao.findAll();for (User u : users) {System.out.println(u);}//釋放資源sqlSession.close();inputStream.close();} }

    運行結果如下:

    7. 總結:

    前面使用兩種方式解釋入門案例:1. 使用Dao層映射配置文件2. 使用注解開發, 出現注解的地方都進行了注釋總流程如下:1. 創建maven工程, 導入對應jar包依賴2. 創建實例類, Dao層接口3. 創建Dao層接口的映射配置文件4. 創建Mybatis的配置文件(配置數據庫環境, 連接池, 加載Dao層接口映射配置文件)5. 創建測試類:1. 使用Resources加載Mybatis的配置文件2. 使用SqlSessionFactoryBuilder.build創建session工廠3. 使用session工廠創建session對象4. 使用session對象創建Dao接口的代理對象5. 使用代理對象直接調用接口方法(執行SQL)6. 釋放資源, 關閉session會話, 關閉Resources的輸入流遇到的問題:1. 配置文件路徑一定要放對, 當出現配置文件未找到要么是配置文件名稱錯誤, 要么就是配置文件位置錯誤2. 在resource目錄下包中持久層映射文件, 在使用注解的時候不能使用XXXDao.xml配置文件, mybatis的約束不能對同一個Dao既使用注解, 又使用配置文件, 此時要做的就是將XXXDao配置文件移出com.regotto.dao中我就因為這個問題弄了好久, 最后才發現這個問題, 根據其他網友解釋, 這樣做的原因是為了統一化開發, 防止Dao層開發混亂

    總結

    以上是生活随笔為你收集整理的MyBatis初级入门及常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。