基礎筆記(MyBatis)

     拿着以前寫過的直接使用jdbc的Web項目來改造。準備替換成MyBatis的。遇到一個問題。

     以前的項目中有大量的多表聯合查詢,動不動就是四五個表,查詢的字段也在20到30個左右。在mybatis的mapper.xml裏面進行配置,發現如果這種情況每次都要自定義一個resultMap的話真的會把我搞瘋了。由於mybatis我並沒有在實際項目中運用過,只是自己自學。

    我想一個成熟的框架肯定會有人性化的解決方法。後來發現其實返回結果也可以定義成resultType。和resultMap相比,resultType是映射文件中定義返回值類型,返回值有基本類型,對象類型,json,List類型,Map類型等,常用於單表查詢,或者需要把查詢結果構建成其他形式的數據時。例如我所遇到的情況使用resultType就比較合適,原來的項目本身就是使用json進行數據傳遞。往往一個json包含的數據涉及很多個表,如果真的每一個查詢都使用resultMap自己定義一個返回的數據類型,那真的會被玩壞,就算是自己把所需的數據重新寫一個pojo類也會搞得代碼很臃腫。

     例如如下的查詢,涉及到5個表,N多個字段。我在Mapper.xml裏面直接把放回結果弄成json的。省了很多的事情。如果是以前用jdbc來實現的話,需要自己手動對查詢的結果進行封裝,如果是利用resultMap的話,,,想想還是算了,寫死去。

<select id="getCameraInfoByIndexCode" resultType="com.alibaba.fastjson.JSONObject" parameterType="java.lang.String">
  	SELECT 
	  	cam.camera_id as cameraId, cam.index_code as indexCode,cam.name as cameraName,dev.type_code as typeCode,
	  	deviceType.name as deviceTypeName,cam.ptz_control_type as ptzControlType, cam.matrix_code as matrixCode, 
	  	cam.camera_type as cameraType,cam.connect_type  as connectType, cam.pixel pixel,cam.status as status,
	  	cam.is_enable AS isEnable,cam.stream_type as streamType,cam.ptz_type as ptzType,cam.target_type as targetType,
	  	cam.target_sub_type as targetSubType,con.name as conName,dev.name as deviceName, dev.network_addr as networkAddr,
	  	dev.network_port as networkPort,dev.index_code as deviceIndexCode,cam.chan_num as chanNum,cam.longitude longitude, 
	  	cam.latitude latitude,cam.elevation elevation,cam.radius radius,cam.angle angle,cam.direction direction,
	  	cam.sound sound,cam.stream_server_id as streamServerId, svr.name as streamServerName,svr.ip_addr as streamIpAddr, 
	  	svr.rtsp_port as streamRtspPort,dev.user_name AS userName,dev.user_pwd AS userPwd 
	FROM camera_info cam
	INNER JOIN device_info dev ON cam.device_id = dev.device_id
	LEFT JOIN device_type_info deviceType on deviceType.type_code=dev.type_code
	LEFT JOIN stream_server svr ON cam.stream_server_id = svr.stream_server_id
	LEFT JOIN control_unit con ON con.control_unit_id=dev.control_unit_id 
	WHERE cam.index_code=#{cameraIndexCode,jdbcType=VARCHAR}
  </select> 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章