Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。
1. Mybatis工作流程
1.1 使用MySQL創建數據庫girls并生成一個表boys,如下圖。
1.2 創建該表對應的簡單實體類Boys,如下圖。
1.3 創建Dao接口以及和接口同名的mapper文件xxxDao.xml,我這邊是StudentDao接口和StudentDao.xml文件,具體結構和內容如下圖。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="a"><select id="b" resultType="org.example.domain.Boys">select id, boyName from boys</select> </mapper>1.4 在resources資源目錄下編寫mybatis的主配置文件——mybatis.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="mysql"><environment id="mysql"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/girls"/><property name="username" value="root"/><property name="password" value="123"/></dataSource></environment></environments><mappers><package name="org.example.dao"/></mappers> </configuration>1.5 pom.xml文件配置mybatis和mysql驅動依賴
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>SpringMybatis</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>15.0</maven.compiler.source><maven.compiler.target>15.0</maven.compiler.target></properties><dependencies><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--mybatis依賴--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><!--mysql驅動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.9</version></dependency></dependencies><build><resources><!--避免xml等配置文件不能參與編譯,程序運行沒有配置信息--><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build> </project>1.6 編寫測試類,連接數據庫并查詢
總結:mybatis工作流程總結(沒有嚴格的順序):①數據庫創建庫、表;②java中創建數據庫表所對應的實體類;③編寫Dao接口以及mapper文件xxxDao.xml;④編寫mybatis主配置文件配置數據庫連接以及mapper文件所在包;⑤pom.xml文件配置mybatis和數據庫驅動依賴;⑥編寫測試類,通過sqlSession和數據庫連接并執行sql語句。
?
2. mapper文件和dao接口的關系——mapper文件xx.xml中的namespace和sql標簽id命名要求
經過上面的mybatis訪問數據庫流程,不知道你是否有所疑惑,反正我是有的。既然sqlSession需要的是mapper文件的namespace和sql語句標簽id,那么Dao接口的作用是啥呢??當我嘗試把dao接口名和方法名改掉,依然正常運行,如下圖。
當我把接口刪除,程序依然正常運行,如下圖。
以上的操作都是在mybatis文件中的mappers標簽使用<mapper>進行,如下圖。
現在我在mappers中使用<package>標簽,嘗試上述操作報錯,如下圖。
總結:在自己手動使用sqlSession操作數據庫的情況下,mapper文件和dao接口的關系。如果mybatis配置文件中的<mappers>標簽使用<mapper>一個一個指定xml文件,可以不需要dao接口,而且xml中的namespace和sql標簽id可以隨意;如果<mappers>標簽使用<package>指定dao包下的xml文件,那么xml中的namespace值必須和dao接口名一致,但sql標簽id不一定要和接口的方法名一致。因此,推薦xml文件中的namespace和sql標簽id和dao接口名和方法名一致。
?
3. 常見問題
常見問題1:Mapped Statements collection does not contain value for xxx.xxx.
解決:根據提示,我們可知這個問題和mapper文件相關;可能是sqlSession使用的sqlId和mapper文件的namespace、標簽id不一致;更可能是mapper文件沒有參與編譯,如下圖。
解決:在pom.xml文件中指定要參與編譯的資源文件,如下圖。
?
常見問題2:Error opening session. ?Cause: java.lang.NullPointerException: Cannot invoke "org.apache.ibatis.mapping.Environment.getDataSource()" because "environment" is null.
解決:異常提示我們environment是null,我們可以定位是mybatis和數據庫連接配置有問題,如果是直接使用mybatis沒有使用spring,那么應該去mybatis.xml配置文件查看原因,其實我這邊是environments標簽的default沒有指向environment的id值導致的,將default改為mysql即可;
?
常見問題3:Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: user.
解決:異常提示我們未知的數據源屬性user,我們可以定位是數據庫連接配置出錯。而且mybatis主配置文件中的dataSource是POOLED類型,那么使用的是PooledDataSource類,然后該類中使用了UnpooledDataSource類,該類中的用戶名是屬性username。
?
總結
以上是生活随笔為你收集整理的Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadLocal怎么实现线程隔离的
- 下一篇: There is no getter f