使用 Mybatis 真心不要偷懒!,kafka 大数据架构
List<Address> queryAddressBySimplte(@Param("address")String address,@Param("coinType") String coinType);
XML 文件
<sql id="querySQL">
select oid, party_id, coin_type, address,address_alias,address_type, wallet_id,
user_id, status, register_time, created_time, update_time from t_molecule_address
</sql>
<select id="queryAddressBySimplte" resultType="Address">
<include refid="querySQL"/> where
<if test="_parameter!=null and _parameter!=''">
address=#{address}
</if>
<if test="_parameter!=null and _parameter!=''">
and coin_type=#{coinType}
</if>
</select>
注意事项:
在 XML 文件中的参数名与 @Param()中的参数名一致,与方法参数名无关。
例如:
List<Address> queryAddressBySimplte(@Param("addressAlias")String address,@Param("coinTypeAlias") String coinType);
这时我们在 XML 文件中,对应的参数应该为:
<select id="queryAddressBySimplte" resultType="Address">
<include refid="querySQL"/> where
<if test="_parameter!=null and _parameter!=''">
address=#{addressAlias}
</if>
<if test="_parameter!=null and _parameter!=''">
and coin_type=#{coinTypeAlias}
</if>
</select>
使用注解时,我们还可以 params 方式。
例如:
<select id="queryAddressBySimplte" resultType="Address">
<include refid="querySQL"/> where
<if test="param1!=null and param1!=''">
address=#{param1}
</if>
<if test="param2!=null and param2!=''">
and coin_type=#{param2}
</if>
</select>
其中 param1 表示第一个参数,param2 表示第二个参数。当然了,不推荐大家这么用,因为对可读性以及可理解性都不友好。
优点:
代码可读性好,参数自可读。
可重命名参数名。
缺点:
需要引入 @Param 注解 (当然,我不认为这是缺点)。
可扩展性较弱。(超过 3 个参数的方法,就不建议使用该方法了)。
使用 Java 对象
Domain 对象(省略 Get / Set 方法):
public class Address {
/**
币种类型
*/
private String coinType;
/**
地址
*/
private String address;
...
接
口:
List<Address> queryAddressBySimplte(Address address);
XML 文件:
<select id="queryAddressBySimplte" resultType="Address" parameterType="Address">
<include refid="querySQL"/> where
<if test="address!=null and address!=''">
address=#{address}
</if>
<if test="coinType!=null and coinType!=''">
and coin_type=#{coinType}
</if>
</select>
其中参数为 Address 对象中的属性即可。如果参数为非对象属性中的参数,即会显示以下异常:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'coinType11' in 'class io.invault.molecule.dal.domain.address.Address'
优点:
可扩展性好。
参数名与对象列明一致,理解性好。
评论