① mybatis報Mapper配置文件出錯
最近學習mybatis框架時,遇到一坑,記錄一下debug過程。
操作表一對一查詢時,運行junit測試類時報錯如下:
根據錯誤提示,第一時間檢查了mapper的xml文件名稱以及對應的包名是否跟介面類的一致,確認沒有問題後,初步判定原因是 mapper映射文件問題 ,mapper內容如下:
隨後檢查mapper文件中返回類型以及實判升體類屬性、數據表對掘尺老應欄位,發現應該是由於resultMap定義的返回類型有問題,於是檢查mybatis主配困譽置文件
果不其然,調試後明確問題:
由於主配置文件只配置了<mappers>標簽下的<package>指定了介面所在包, 沒有配置<typeAliases>下的<package>指定實體類的別名,因此mapper文件中返回的實體類名稱不能使用簡寫,需要寫完整全限定類名
主配置文件指定實體類別名後測試,測試類正常返回一對一查詢的數據
② MyBatis 的mapper.xml配置的問題
我們知道在Mybatis中定義Mapper信息有兩種方式,一種是利用xml寫一個對應的包含Mapper信息的配置文件;另一種就是定義一個Mapper介面,然後定義一些相應的操作方法,再輔以相應的操作註解。
現假設我有這樣一個實體類:
Java代碼 收藏代碼
package com.tiantian.mybatis.model;
public class User {
private int id;
private String name;
private int age;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
它對應的資料庫表結構是這樣的:
然後我要利用Mybatis對它做一個簡單的增刪改查操作,那麼如果利用xml配置Mapper的方式來定義的話,我對應的UserMapper.xml文件會是這樣:
Xml代碼 收藏代碼
<?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">
<mapper namespace="com.tiantian.mybatis.mapper.UserMapper">
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyColumn="id">
insert into t_user(name, age) values(#{name}, #{age})
</insert>
<update id="updateUser" parameterType="User">
update t_user set name=#{name}, age=#{age} where id=#{id}
</update>
<select id="findById" parameterType="int" resultType="User">
select * from t_user where id=#{id}
</select>
<delete id="deleteUser" parameterType="int">
delete from t_user where id=#{id}
</delete>
</mapper>
如果使用介面加註解的方式,那麼我們的UserMapper介面應該這樣定義:
Java代碼 收藏代碼
package com.tiantian.mybatis.mapperinterface;
import org.apache.ibatis.annotations.Delete;
import or www.hbbz08.com g.apac he.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.tiantian.mybatis.model.User;
public interface UserMapper {
@Insert("insert into t_user(name, age) values(#{name}, #{age})")
public void insertUser(User user);
@Update("update t_user set name=#{name}, age=#{age} where id=#{id}")
public void updateUser(User user);
@Select("select * from t_user where id=#{id}")
public User findById(int id);
@Delete("delete from t_user where id=#{id}")
public void deleteUser(int id);
}
注意看這里我故意把UserMapper介面的namespace也就是它的包名置為與UserMapper.xml的namespace屬性不一樣。這主要是為了要更好的講以下的內容。
接下來要做的就是把Mapper信息注冊到Mybatis的配置中,告訴Mybatis我們定義了哪些Mapper信息。這主要是在Mybatis的配置文件中通過mappers元素來進行的。在以前版本的Mybatis中我們在Mybatis的配置文件中需要這樣定義Mapper信息資源的位置。
Xml代碼 收藏代碼
<mappers>
<mapper resource="com/tiantian/mybatis/mapper/UserMapper1.xml"/>
<mapper url="file:///E:/UserMapper.xml"/>
</mappers>
這主要是通過mapper元素的resource和url屬性來指定的,resource屬性指定的是相對於跟類路徑下的資源,url屬性指定的是通過URL可以獲取到的資源。這有一點不好的地方,當我們使用Mapper介面加註解來定義當前Mapper的操作信息時,我們還需要定義一個與它對應的Mapper.xml文件。如:
Xml代碼 收藏代碼
<?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">
<mapper namespace="com.tiantian.mybatis.mapperinterface.UserMapper">
</mapper>
③ SpringBoot整合MyBatis---一篇就夠了
SpringBoot整合MyBatis教程,簡明扼要
對於已經熟悉SpringBoot基礎的開發者,整合MyBatis將使你的項目在數據操作上更加靈活與高效。
MyBatis是一個強大的半自動ORM框架,相較於Hibernate,它更易於上手且能提供更直接的數據操作控制。
在本教程中,我們將演示如何在SpringBoot項目中整合MyBatis,包括引入相關依賴,配置mapper文件、application文件,以及實現CRUD操作。
如果對於SpringBoot或MyBatis初學者,建議先進行基本了解,再深入閱讀本教程。
項目框架中,使用Maven管理依賴,確保引入MyBatis和SpringBoot整合所需的組件。
創建mapper配置文件UserMapper.xml,確保其路徑與介面完全一致,實現數據操作的抽象。
在application.properties或application.yml中配置MyBatis相關參數,如數據源信息等,兩者選擇其一。
實現controller層,處理用戶登錄、CRUD操作等邏輯,通過控制器與前端進行交互。
前端方面,將index.html文件放置於template文件夾下,用於展示數據或接收用戶交互。
測試功能包括登錄操作與CRUD(增刪改查)功能,確保數據操作的正確性。
使用注意事項包括路徑配置、參數配置等細節,確保框架與項目環境的兼容性。
為提高開發效率,推薦使用IDEA插件MyBatisX,能自動在mapper.xml中生成CRUD方法。
MyBatis框架的優勢包括簡化SQL編寫、動態SQL支持、靈活的數據映射等,而缺點可能涉及學習曲線、SQL拼接安全等。
在整合SpringBoot與MyBatis過程中,可能會遇到各種錯誤,如無參構造方法缺失、時區設置不當、依賴注入沖突等問題。
解決方法包括添加無參構造方法、調整時區配置、使用@Autowired註解並設置正確屬性等,以確保框架兼容與功能實現。
通過本教程,希望能幫助開發者快速掌握SpringBoot與MyBatis的整合技巧,提高項目開發效率。
持續學習,每天進步「億」點點。