Mybatis manual

本文详细介绍了MyBatis的基本使用方法,包括映射关系、参数传递、返回类型、SQL打印等,并针对常见问题提供了解决方案。

映射关系

不指定resultMap的默认映射 与SQL 查询出的字段名一致


<select id="queryById" parameterType="long" resultMap="dictionary">
   select * from sys_dictionary WHERE id = #{
   
   id}
</select>
当不指定 resultMap="dictionary"时,默认的设施是按照SQL语句的字段名来match。

如果数据库的字段名和 Class Dictionary里面的命名不同,则要指定resultMap="", 否则查询出来的内容为空

     public Dictionary queryById(long id);
     <id column="id" property="id" javaType="Long"/>
     <result column="sys_code" property="code" javaType="String"/>
     <result column="sys_value" property="value" javaType="String"/>
     <result column="sys_name_english" property="nameEnglish" javaType="String"/>
     <result column="sys_name_chinese_cn" property="nameChineseCn" javaType="String"/>
     <result column="sys_name_chinese_tra" property="nameChineseTra" javaType="String"/>
     <result column="sys_order" property="tabOrder" javaType="int"/>
     <result column="sys_desc" property="tabDesc" javaType="String"/>
        

association one to one

column -> java variable

   <select id="queryAll" parameterType="String" resultMap="Master">
		SELECT DISTINCT m.*,c.*
		FROM
			master AS m 
			LEFT JOIN com AS c ON M.compid = c.comp_id
		ORDER BY
			M.co        
   </select>
 <resultMap id="Master" type="com.book.Master">
         <association property="company" javaType="com.book.Company">
		<!-- primary keys 2-->
	        <id column="id" property="companyId" javaType="int"/>
	        <result column="ab" property="Abbr" javaType="String"/>
	        <result column="ame" property="ame" javaType="String"/>    
        </association>
 </resultMap>

column -> java obj.variable

适用于 Java 对象中引用主表的对象,可以通过对象引用的方式如下

public class SalesOrderLine extends EntityVO{
   
   
		public SalesOrderItem soItem;
	SELECT *  FROM (
		SELECT
			sd.*,
			sh.*,
<result column="sh_bill_address" property="soItem.billAddress" javaType="String"/> 

select 单独查询

		<association property="soItem" 
		javaType="com.book.erp.entity.postgresql.so.SalesOrderItem" 
		select="queryById" 
		column="{sohNo=sd_soh_no}" 
		fetchType="eager"/>	
可以选择
        fetchType="lazy"
    <select id="queryById" resultMap="SoItem">
        select * from so_hdr WHERE sh_soh_no = #{
   
   sohNo}
    </select>

子表单独 Select

<association property="custHold" select="queryCustHold" column="crh_cust_no"></association>
    <select id="queryCustHold" parameterType="java.util.List" resultMap="CustHold">
		SELECT *  FROM  a
	</select>

通过 resultMap 映射

这样方式不需要通过Select 查询, 通过第一次查询的结果自动映射,最好使用这样方式。

  1. 降低数据库的压力
  2. 可以根据需要主语句的变化,决定是否需要子查询。
<association property="soItem" column="sh_soh_no" resultMap="SoItem"></association>

column="sh_soh_no" 是主键

		SELECT
			sd.*,
			sh.*,
LEFT JOIN so_hdr AS sh ON sd.sd_soh_no = sh.sh_soh_no	

collection one to many

  位置规则是<collection >  </collection> 必须在 <resultMap>..... 最后</resultMap>

方法1

    <select id="queryJob" resultMap="Master">
		SELECT
			t1.*,ct.*
		FROM
			(
			SELECT
				t.*,g.*
			FROM
				biz_task AS t,
				biz_group AS g,
				biz_task_group AS tg
			WHERE
				t.task_id = tg.task_id 
				)<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值