最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決MyBatis中為類配置別名,列名與屬性名不對應的問題

 更新時間:2020年11月30日 15:16:05   作者:chenmixuexi_  
這篇文章主要介紹了解決MyBatis中為類配置別名,列名與屬性名不對應的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在傳參與接收返回結果的時候,咱們一直是使用的全限定名。但是MyBatis自己在使用很多類型的時候(如Integer,Boolean)卻可以直接使用別名。那么,咱們自己的寫的類能不能使用別名呢?可以。需要配置。

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">
<!-- 
 完成一個mybatis-config.xml的文件
 -> 作用:配置連接數(shù)據(jù)庫的所有需要的環(huán)境
 必須連接到所有要使用的映射文件(ProductMapper.xml)
 -->
 
<!--configuration 根目錄 -->
<configuration>
 <!-- 引入(關聯(lián))db.properties文件 --> 
 <properties resource="db.properties"></properties>
 
 <!-- 配置別名:在MyBatis中為一個類取別名 配置別名是為了在對象映射文件中接收參數(shù)類型和返回參數(shù)類型時使用-->
 <typeAliases>
 <!-- 
 設置這個包下面的所有類的別名
 <package name="cn.itsource.domain"/> 
 -->
 
 <!-- 
 設置單個類的別名  alias:取的別名 type:這個別名所對應的Java類 別名使用的時候與大小寫無關
 -->
 <typeAlias alias="Product" type="cn.itsource.domain.Product"/>
 </typeAliases>
 
 <!-- 環(huán)境們:很多環(huán)境  default:表示默認使用哪一個環(huán)境-->
 <environments default="development">
 <!-- 單個環(huán)境:一個環(huán)境  id:表示這個環(huán)境的名稱-->
 <environment id="development">
 <!-- transactionManager:事務管理器 (使用的JDBC事務管理器)-->
 <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)必須與所有的對象映射文件(ProductMapper.xml)關聯(lián)?。。?! -->
 <mappers>
 <mapper resource="cn/itsource/domain/ProductMapper.xml" />
 </mappers>
</configuration>

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

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

<!-- 完成一個對象關系映射文件 -> 
作用:一個對象的所有SQL都應該寫在這個映射文件中 這個文件一般和我們的domain寫在同一個包里面,取名為 
 -> domain的名稱+Mapper.xml -->
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<!-- namespace:命名空間(每個Mapper必須有命名空間) -->
<mapper namespace="cn.itsource.domain.ProductMapper">
 
 <!-- 
  select:它里面寫查詢語句
  id:查詢語句的唯一標識(名稱不能重復)
  如何在 java代碼中找到sql語句? 命名空間+id 
  例子:cn.itsource.domain.ProductMapper.select
  parameterType:傳入的參數(shù)類型。 除了MyBatis支持的類型,其它的類型都通通使用全限定名
  resultType:返回的每一條數(shù)據(jù)的結果類型(結果類型寫權限定名稱 ) 查詢功能使用
 -->
 <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ù)庫中的名稱(不寫的話默認名稱和keyProperty一致)
 keyProperty:對象中的屬性(代表主鍵的那個屬性)
 -->
 <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ù)沒有寫權限頂名稱,使用的別名(簡寫) -->
 <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>

列名與屬性名不對應的解決方案(截圖不完整)

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

由于之前咱們的列名與屬性名是一樣的,因此框架進行了自動的識別。

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

在MyBatis中,提供了一個resultMap的標簽,就是讓咱們來完成返回結果的關系對應的,使用方式如下:

注意:主鍵設置需要單獨配置 如: <id column="id" property="id" />

<!-- 
 返回的數(shù)據(jù)映射 
 type:代表是要映射的對象
 id:代表唯一(過會我們要拿到它)
-->
<resultMap type="cn.itsource.domain.Product" id="productMap">
 <!-- 
 column:對應的列名
 property:對應的屬性名
 -->
 <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>

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

問題:兩者不一致時 , 查詢結果無法封裝到實體!(也就無法查詢出來)

① 查詢的sql語句中使用別名進行查詢.

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

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>

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

故: 一般都使用第二種.

② 使用resultMap ★

UserMapper.xml

<mapper namespace="com.jxj.dao.UserDao">
 <resultMap id="userResultMap" type="User">
  <!-- 
  主鍵字段 
   property: 實體類屬性名.
   column: 庫中表的列名
   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的屬性值一樣.

測試類: 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對象.
 SqlSession sqlSession = sqlSessionFactory.openSession();
 // 3.創(chuàng)建接口的實現(xiàn)類對象.
 UserMapper mapper = sqlSession.getMapper(UserMapper.class);
 // 4.調用接口中的方法 (代理)
 List<User> users = mapper.queryAll();
 for (User user : users) {
  System.out.println(user);
 }
 sqlSession.close();
 in.close();
}

以上這篇解決MyBatis中為類配置別名,列名與屬性名不對應的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot使用Feign進行服務間通信的實現(xiàn)示例代碼

    SpringBoot使用Feign進行服務間通信的實現(xiàn)示例代碼

    Feign是一個開源的Java HTTP客戶端,可以幫助我們在SpringBoot應用中快速構建和使用HTTP客戶端,方便實現(xiàn)服務間的通信,本文就來介紹一下SpringBoot使用Feign進行服務間通信的實現(xiàn)示例代碼,感興趣的可以了解一下
    2024-01-01
  • 多線程-lock與lockInterruptibly的區(qū)別及說明

    多線程-lock與lockInterruptibly的區(qū)別及說明

    文章主要討論了Java中ReentrantLock的lock和lockInterruptibly方法的區(qū)別,以及AQS中的雙向鏈表設計,lock方法不響應中斷,而lockInterruptibly方法會響應中斷,AQS的雙向鏈表設計使得線程管理更加高效和靈活,適用于高并發(fā)場景
    2025-02-02
  • Java 實現(xiàn)聲音播放程序

    Java 實現(xiàn)聲音播放程序

    這篇文章主要介紹了Java 實現(xiàn)聲音播放程序的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Java Bean與xml互相轉換的方法分析

    Java Bean與xml互相轉換的方法分析

    這篇文章主要介紹了Java Bean與xml互相轉換的方法,結合實例形式分析了java bean與xml轉換的原理與相關操作技巧,需要的朋友可以參考下
    2018-12-12
  • 通過實例深入了解java序列化

    通過實例深入了解java序列化

    這篇文章主要介紹了通過實例深入了解java序列化,
    2019-06-06
  • java實現(xiàn)支付寶支付接口的調用

    java實現(xiàn)支付寶支付接口的調用

    本文主要介紹了java實現(xiàn)支付寶支付接口的調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • spring?boot集成p6spy的最佳實踐

    spring?boot集成p6spy的最佳實踐

    這篇文章主要介紹了spring?boot集成p6spy的最佳實踐-p6spy-spring-boot-starter的項目案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • Java中的@SneakyThrows注解詳解

    Java中的@SneakyThrows注解詳解

    這篇文章主要介紹了Java中的@SneakyThrows注解詳解,@SneakyThrows將當前方法拋出的異常,包裝成RuntimeException,騙過編譯器,使得調用點可以不用顯示處理異常信息,需要的朋友可以參考下
    2023-10-10
  • Java實現(xiàn)商城訂單超時取消功能

    Java實現(xiàn)商城訂單超時取消功能

    大多數(shù)的B2C商城項目都會有限時活動,當用戶下單后都會有支付超時時間,當訂單超時后訂單的狀態(tài)就會自動變成已取消 ,這個功能的實現(xiàn)有很多種方法,本文的實現(xiàn)方法適合大多數(shù)比較小的商城使用。具體實現(xiàn)方式可以跟隨小編一起看看吧
    2019-12-12
  • Java之TreeSet和TreeMap的兩種排序方式解讀

    Java之TreeSet和TreeMap的兩種排序方式解讀

    這篇文章主要介紹了Java之TreeSet和TreeMap的兩種排序方式解讀,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

阿拉善盟| 博湖县| 称多县| 五台县| 陕西省| 从化市| 芜湖市| 衡东县| 巴楚县| 襄汾县| 安康市| 汶上县| 鸡西市| 松原市| 皋兰县| 隆尧县| 广水市| 桂阳县| 克山县| 介休市| 东至县| 沅江市| 巧家县| 图们市| 乌兰察布市| 新田县| 育儿| 海淀区| 丰都县| 兴化市| 金昌市| 齐河县| 西平县| 江油市| 遂川县| 靖西县| 南城县| 磐安县| 紫金县| 武宣县| 富裕县|