java groupby,Mybatis_day2_Mybatis的參數深入

 2023-10-17 阅读 29 评论 0

摘要:parameterType 配置參數 使用說明 SQL 語句傳參,需使用標簽的 parameterType 屬性來設定。該屬性的取值可以是基本類型,引用類型(例如:String 類型),還可以是實體類類型(POJO 類)。同時也可以使用實體類的包裝類 本文將介紹

parameterType 配置參數

  1. 使用說明
    SQL 語句傳參,需使用標簽的 parameterType 屬性來設定。該屬性的取值可以是基本類型,引用類型(例如:String 類型),還可以是實體類類型(POJO 類)。同時也可以使用實體類的包裝類
  • 本文將介紹如何使用實體類的包裝類作為參數傳遞。

  1. 注意事項
    • 基 本 類 型 和 String 我 們 可 以 直 接 寫 類 型 名 稱 , 也 可 以 使 用 包 名 . 類 名 的 方 式 , 例 如 :java.lang.String。
    • 實體類類型,目前我們只能使用全限定類名。(除非注冊實體類的別名。)
      究其原因,是 mybaits 在加載時已經把常用的數據類型注冊了別名,從而我們在使用時可以不寫包名,而我們的是實體類并沒有注冊別名,所以必須寫全限定類名。

parameterType中傳遞 pojo 包裝對象

  • 開發中通過 pojo 傳遞查詢條件 ,查詢條件是綜合的查詢條件,不僅包括用戶查詢條件還包括其它的查詢條件(比如將用戶購買商品信息也作為查詢條件),這時可以使用包裝對象傳遞輸入參數。
  • Pojo 類中包含 pojo。
  • 需求:根據用戶名查詢用戶信息,查詢條件放到 QueryVo 的 user 屬性中。

  1. 編寫 QueryVo
/**
* 
* <p>Title: QueryVo</p>
* <p>Description: 查詢條件對象</p>
* 
*/
public class QueryVo implements Serializable {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}
}

  1. 編寫持久層接口
/**
* 
* <p>Title: IUserDao</p>
* <p>Description: 用戶的業務層接口</p>
* 
*/
public interface IUserDao {
/**
* 根據 QueryVo 中的條件查詢用戶
* @param vo
* @return
*/
List<User> findByVo(QueryVo vo);
}

  1. 持久層接口的映射文件
<!-- 根據用戶名稱模糊查詢,參數變成一個 QueryVo 對象了 -->
<select id="findByVo" resultType="cn.myp666.domain.User" 
parameterType="cn.myp666.domain.QueryVo">select * from user where username like #{user.username};
</select>

  1. 測試包裝類作為參數
@Test
public void testFindByQueryVo() {QueryVo vo = new QueryVo();User user = new User();user.setUserName("%王%");vo.setUser(user);List<User> users = userDao.findByVo(vo);for(User u : users) {System.out.println(u);}
}



Mybatis 的輸出結果封裝

resultType 配置結果類型

  • resultType 屬性可以指定結果集的類型,它支持基本類型和實體類類型。我們在前面的 CRUD 案例中已經對此屬性進行過應用了。
  • 需要注意的是,它和 parameterType 一樣,如果注冊過類型別名的,可以直接使用別名。沒有注冊過的必須使用全限定類名。例如:我們定義的實體類
  • 同時還有一個要求,實體類中的屬性名稱必須和查詢語句中的列名保持一致,否則無法實現封裝。mysql 在 windows 系統中不區分大小寫!

如果實體類中的屬性名稱和查詢語句中的列名不一致則可以通過以下方法實現數據的封裝:

  1. 修改映射配置,select 語句使用別名查詢
<!-- 配置查詢所有操作 -->
<select id="findAll" resultType="cn.myp666.domain.User">select id as userId,username as userName,birthday as userBirthday,
sex as userSex,address as userAddress from user
</select>
  • 優點:SQL層解決問題,速度快
  • 缺點:如果查詢的數據很多,都使用別名的話寫起來很麻煩

  1. 定義 resultMap
<!-- 建立 User 實體和數據庫表的對應關系
type 屬性:指定實體類的全限定類名
id 屬性:給定一個唯一標識,是給查詢 select 標簽引用用的。
-->
<resultMap type="cn.myp666.domain.User" id="userMap">
<id column="id" property="userId"/>
<result column="username" property="userName"/>
<result column="sex" property="userSex"/>
<result column="address" property="userAddress"/>
<result column="birthday" property="userBirthday"/>
</resultMap><!-- 配置查詢所有操作 -->
<select id="findAll" resultMap="userMap">
select * from user
</select>
<!-- 
<select id="findAll" resultMap="userMap">的userMap為
<resultMap type="cn.myp666.domain.User" id="userMap">中的id屬性-->
  • id 標簽:用于指定主鍵字段
  • result 標簽:用于指定非主鍵字段
    • column 屬性:用于指定數據庫列名
    • property 屬性:用于指定實體類屬性名稱



SqlMapConfig.xml配置文件

SqlMapConfig.xml 中配置的內容和順序

  • properties(屬性)
    • – property
  • settings(全局配置參數)
    • –setting
  • typeAliases(類型別名)
    • –typeAliase
    • –package
  • typeHandlers(類型處理器)
  • objectFactory(對象工廠)
  • plugins(插件)
  • environments(環境集合屬性對象)
    • –environment(環境子屬性對象)
      • —transactionManager(事務管理)
      • —dataSource(數據源)
  • mappers(映射器)
    • –mapper
    • –package
properties(屬性)
  • 在使用 properties 標簽配置時,我們可以采用兩種方式指定屬性配置。

  • 第一種

<properties><property name="jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="jdbc.url" value="jdbc:mysql://localhost:3306/db1"/><property name="jdbc.username" value="root"/><property name="jdbc.password" value="1419"/>
</properties>
  • 第二種
  1. 在 classpath 下定義 db.properties 文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db1
jdbc.username=root
jdbc.password=1419
  1. properties 標簽配置
<!-- 配置連接數據庫的信息
resource 屬性:用于指定 properties 配置文件的位置,要求配置文件必須在類路徑下
resource="jdbcConfig.properties"
url 屬性:
URL: Uniform Resource Locator 統一資源定位符
http://localhost:8080/mystroe/CategoryServlet URL
協議 主機 端口 URI
URI:Uniform Resource Identifier 統一資源標識符
/mystroe/CategoryServlet
它是可以在 web 應用中唯一定位一個資源的路徑
-->
<properties url="
file:///D:/IdeaProjects/day02_eesy_01mybatisCRUD/src/main/resources/jdbcConfig.prop
erties">
</properties>
或者
<properties resource="jdbcConfig.properties">
</properties>
  • 此時我們的 dataSource 標簽就變成了引用上面的配置
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>



typeAliases(類型別名)
  • Mybatis 支持的默認別名,我們也可以采用自定義別名方式來開發。
  • 自定義別名:在 SqlMapConfig.xml 中配置:
<typeAliases>
<!-- 單個別名定義 -->
<typeAlias alias="user" type="cn.myp666.domain.User"/>
<!-- 批量別名定義,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) -->
<package name="cn.myp666.domain"/>
<package name="其它包"/>
</typeAliases>



mappers(映射器)
  • < mapper resource=" " />

    • 使用相對于類路徑的資源
      如:<mapper resource="cn/myp666/dao/IUserDao.xml" />
  • < mapper class=" " />

    • 使用 mapper(dao) 接口類路徑
      如:<mapper class="cn.myp666.dao.UserDao"/>
    • 注意:此種方法要求 mapper 接口名稱和 mapper 映射文件名稱相同,且放在同一個目錄中。
  • < package name=""/>

    • 注冊指定包下的所有 mapper 接口
      如:<package name="cn.myp666.dao"/>
    • 注意:此種方法要求 mapper 接口名稱和 mapper 映射文件名稱相同,且放在同一個目錄中。
總結
<configuration><!-- 配置properties--><properties resource="jdbcConfig.properties"></properties><!--使用typeAliases配置別名,它只能配置domain中類的別名 --><typeAliases><package name="cn.myp666.domain"></package></typeAliases><!--配置環境--><environments default="mysql"><!-- 配置mysql的環境--><environment id="mysql"><!-- 配置事務 --><transactionManager type="JDBC"></transactionManager><!--配置連接池--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></dataSource></environment></environments><!-- 配置映射文件的位置 --><mappers><package name="cn.myp666.dao"></package></mappers>
</configuration>

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/143615.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息