MyBatis中出現(xiàn)列名與屬性名不匹配如何解決-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)MyBatis中出現(xiàn)列名與屬性名不匹配如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、樂(lè)山網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、樂(lè)山網(wǎng)絡(luò)營(yíng)銷、樂(lè)山企業(yè)策劃、樂(lè)山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供樂(lè)山建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

mybatis配置文件:


<?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">
<!-- 
 完成一個(gè)mybatis-config.xml的文件
 -> 作用:配置連接數(shù)據(jù)庫(kù)的所有需要的環(huán)境
 必須連接到所有要使用的映射文件(ProductMapper.xml)
 -->
 
<!--configuration 根目錄 -->
<configuration>
 <!-- 引入(關(guān)聯(lián))db.properties文件 --> 
 <properties resource="db.properties"></properties>
 
 <!-- 配置別名:在MyBatis中為一個(gè)類取別名 配置別名是為了在對(duì)象映射文件中接收參數(shù)類型和返回參數(shù)類型時(shí)使用-->
 <typeAliases>
 <!-- 
 設(shè)置這個(gè)包下面的所有類的別名
 <package name="cn.itsource.domain"/> 
 -->
 
 <!-- 
 設(shè)置單個(gè)類的別名  alias:取的別名 type:這個(gè)別名所對(duì)應(yīng)的Java類 別名使用的時(shí)候與大小寫無(wú)關(guān)
 -->
 <typeAlias alias="Product" type="cn.itsource.domain.Product"/>
 </typeAliases>
 
 <!-- 環(huán)境們:很多環(huán)境  default:表示默認(rèn)使用哪一個(gè)環(huán)境-->
 <environments default="development">
 <!-- 單個(gè)環(huán)境:一個(gè)環(huán)境  id:表示這個(gè)環(huán)境的名稱-->
 <environment id="development">
 <!-- transactionManager:事務(wù)管理器 (使用的JDBC事務(wù)管理器)-->
 <transactionManager type="JDBC"></transactionManager>
 <!-- MyBatis自帶POOLED連接池(數(shù)據(jù)源) -->
 <dataSource type="POOLED">
 <property name="driver" value="${db_driverClassname}" />
 <property name="url" value="${db_url}" />
 <property name="username" value="${db_username}" />
 <property name="password" value="${db_password}" />
 </dataSource>
 </environment>
 </environments>
 
 <!-- resource:表示 核心配置文件(mybatis-config.xml)必須與所有的對(duì)象映射文件(ProductMapper.xml)關(guān)聯(lián)?。。?! -->
 <mappers>
 <mapper resource="cn/itsource/domain/ProductMapper.xml" />
 </mappers>
</configuration>

上面配置了別名,那么對(duì)象與映射文件中就可以直接使用別名,而不需要使用全限定名稱

<?xml version="1.0" encoding="UTF-8"?>

<!-- 完成一個(gè)對(duì)象關(guān)系映射文件 -> 
作用:一個(gè)對(duì)象的所有SQL都應(yīng)該寫在這個(gè)映射文件中 這個(gè)文件一般和我們的domain寫在同一個(gè)包里面,取名為 
 -> domain的名稱+Mapper.xml -->
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<!-- namespace:命名空間(每個(gè)Mapper必須有命名空間) -->
<mapper namespace="cn.itsource.domain.ProductMapper">
 
 <!-- 
  select:它里面寫查詢語(yǔ)句
  id:查詢語(yǔ)句的標(biāo)識(shí)(名稱不能重復(fù))
  如何在 java代碼中找到sql語(yǔ)句? 命名空間+id 
  例子:cn.itsource.domain.ProductMapper.select
  parameterType:傳入的參數(shù)類型。 除了MyBatis支持的類型,其它的類型都通通使用全限定名
  resultType:返回的每一條數(shù)據(jù)的結(jié)果類型(結(jié)果類型寫權(quán)限定名稱 ) 查詢功能使用
 -->
 <select id="selectOne" parameterType="Long" resultType="Product">
 select * from product where id = #{id}
 </select>
 
 <!-- resultType:表示返回的數(shù)據(jù)類型 -->
 <select id="selectAll" resultType="Product">
 select * from Product 
 </select>
 
 <!--parameterType :表示傳入?yún)?shù)(Product)。
 useGeneratedKeys:是否需要獲取主鍵
 keyColumn:主鍵在數(shù)據(jù)庫(kù)中的名稱(不寫的話默認(rèn)名稱和keyProperty一致)
 keyProperty:對(duì)象中的屬性(代表主鍵的那個(gè)屬性)
 -->
 <insert id="save" parameterType="Product" 
 useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 insert into product (productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)
 values(#{productName},#{dir_id},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice})
 </insert>
 
 <!-- parameterType:接收參數(shù)沒(méi)有寫權(quán)限頂名稱,使用的別名(簡(jiǎn)寫) -->
 <delete id="delete" parameterType="long">
 delete from product where id = #{id}
 </delete>
 
 <update id="update" parameterType="Product">
 update product set productName=#{productName},dir_id=#{dir_id},
 salePrice=#{salePrice},supplier=#{supplier},brand=#{brand},cutoff=#{cutoff},costPrice=#{costPrice}
 where id = #{id}
 </update>
 
</mapper>

列名與屬性名不對(duì)應(yīng)的解決方案(截圖不完整)

做映射文件的時(shí)候,只做了表與對(duì)象之間的聯(lián)系。并沒(méi)有做列與字段之間的聯(lián)系。那么它們之間是怎么聯(lián)系上的呢?

由于之前咱們的列名與屬性名是一樣的,因此框架進(jìn)行了自動(dòng)的識(shí)別。

那么,如果咱們的列名與屬性名不一致了(對(duì)應(yīng)不上),這時(shí)候應(yīng)該怎么辦呢?這時(shí)候需要把哪些列名與屬性名對(duì)應(yīng)上。

在MyBatis中,提供了一個(gè)resultMap的標(biāo)簽,就是讓咱們來(lái)完成返回結(jié)果的關(guān)系對(duì)應(yīng)的,使用方式如下:

MyBatis中出現(xiàn)列名與屬性名不匹配如何解決

注意:主鍵設(shè)置需要單獨(dú)配置 如: <id column="id" property="id" />

<!-- 
 返回的數(shù)據(jù)映射 
 type:代表是要映射的對(duì)象
 id:代表(過(guò)會(huì)我們要拿到它)
-->
<resultMap type="cn.itsource.domain.Product" id="productMap">
 <!-- 
 column:對(duì)應(yīng)的列名
 property:對(duì)應(yīng)的屬性名
 -->
 <id column="id" property="id" />
 <result column="productName" property="name" />
</resultMap> 
 
<select id="queryOne" parameterType="long" resultMap="productMap">
 select * from product where id = #{id}
</select>

補(bǔ)充知識(shí):MyBatis - 實(shí)體類的屬性名和數(shù)據(jù)庫(kù)列名不一致時(shí)的兩種解決辦法!

問(wèn)題:兩者不一致時(shí) , 查詢結(jié)果無(wú)法封裝到實(shí)體!(也就無(wú)法查詢出來(lái))

MyBatis中出現(xiàn)列名與屬性名不匹配如何解決

① 查詢的sql語(yǔ)句中使用別名進(jìn)行查詢.

但要注意: 字段名的別名 要和 實(shí)體類的屬性名一致!

MyBatis中出現(xiàn)列名與屬性名不匹配如何解決

UserMapper.xml

<!-- namespace:接口的全路徑名. -->
<mapper namespace="com.xxx.dao.UserMapper">
 <!-- 使用別名 --> 
 <select id="queryAll" resultType="com.xxx.domain.User">
  select 
   id as userId,
   username as userName,
   address as userAddress,
   sex as userSex,
   birthday as userBirthday 
  from user;
 </select>
</mapper>

注: 如果使用別名 , 每一個(gè)sql語(yǔ)句都需要加別名 (很麻煩)

故: 一般都使用第二種.

② 使用resultMap ★

UserMapper.xml

<mapper namespace="com.jxj.dao.UserDao">
 <resultMap id="userResultMap" type="User">
  <!-- 
  主鍵字段 
   property: 實(shí)體類屬性名.
   column: 庫(kù)中表的列名
   javaType: 數(shù)據(jù)類型.
  --> 
  <id property="userId" column="id" javaType="int"></id>
  <!-- 非主鍵字段 --> 
  <result property="userSex" column="sex" javaType="string"></result>
  <result property="userAddress" column="address" javaType="string"></result>
  <result property="userBirthday" column="birthday" javaType="date"></result>
  <result property="username" column="username" javaType="string"></result>
 </resultMap>

 <select id="queryAll" resultMap="userResultMap">
  select * from user
 </select>

注: select中resultMap的屬性值 要和 resultMap中id的屬性值一樣.

測(cè)試類: UserMapper.java

@Test
public void queryAll() throws IOException {
 // 1.創(chuàng)建工廠類.
 InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
 // 2.創(chuàng)建sql對(duì)象.
 SqlSession sqlSession = sqlSessionFactory.openSession();
 // 3.創(chuàng)建接口的實(shí)現(xiàn)類對(duì)象.
 UserMapper mapper = sqlSession.getMapper(UserMapper.class);
 // 4.調(diào)用接口中的方法 (代理)
 List<User> users = mapper.queryAll();
 for (User user : users) {
  System.out.println(user);
 }
 sqlSession.close();
 in.close();
}

上述就是小編為大家分享的MyBatis中出現(xiàn)列名與屬性名不匹配如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文題目:MyBatis中出現(xiàn)列名與屬性名不匹配如何解決-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article40/dejjho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作網(wǎng)站制作、軟件開(kāi)發(fā)網(wǎng)站內(nèi)鏈品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化