关于使用mybatis几个功能的实现
2016-06-17 10:22
218 查看
1,有些数据表中,主键是递增的,而且是自动生成,使用mybatis使用这些功能时,可以用如下两种方式:
a,
<insertid="insert"parameterType="com.exingcai.captain.dal.model.GpsDevice"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO T_GPS_DEVICE(
<includerefid="COLS"/>
)VALUES(
#{gpsDeviceCode},
#{gpsDeviceType},
#{gpsDeviceName},
#{vendor},
#{companyId},
#{status},
#{bindDeliveryToolId},
#{bindDeliveryToolNo},
#{remark},
#{createdBy},
now(),
#{updatedBy},
now()
)
</insert>
b,
<insertid="insert">
<selectKey resultType="java.lang.Long" keyProperty="id"
order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
INSERT INTO ENUM_REF(
ID
,CODE
,SORT
,TYPE
,VALUE
,CREATED_BY
,UPDATED_BY
,DELETE_FLAG
,CREATED_DATE
,UPDATED_DATE
)VALUES(
#{id}
4000
, #{code}
, #{sort}
, #{type}
, #{value}
, #{createdBy}
, #{updatedBy}
, 0
, #{createdDate}
, #{updatedDate}
)
</insert>
2, 关于mybatis中的关联查询
该功能的实现,也有两种方式,一种是用标签 <association></association> ,另外一种是用标签<collection></collection>
这两个标签的使用例子如下:
<resultMap>
<resultcolumn="DISPATCH_NO"property="dispatchNo"/>
<resultcolumn="batch_no"property="batchNo"/>
<resultcolumn="warehouse_out_person"property="warehouseOutPerson"/>
<resultcolumn="reject_message"property="rejectMessage"/>
<collectioncolumn="ID"property="cargoDeliverDtls"
select="com.exingcai.captain.dal.dao.CargoDeliverDtlDAO.queryCargoDeliverDtlsByCargoDeliveryId"/>
</resultMap>
<resultMap id="joinSelectScore" type="Score" >
<id property="id" column="id"/>
<result property="math" column="math"/>
<result property="chinese" column="chinese"/>
<result property="english" column="english"/>
<result property="computer" column="computer"/>
<association property="user" column="userid" javaType="User" resultMap="UserDaoMapping.userResult"/>
</resultMap>
3, 关于多个参数的传递和参数名的引用
据我目前接触到的传多个参数的方案有三种。
?
对应的Mapper.xml
?
其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。
Dao层的函数方法
?
对应的Mapper.xml
?
Service层调用
?
个人认为此方法不够直观,见到接口方法不能直接的知道要传的参数是什么。
?
对应的Mapper.xml
?
个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用此种方案。
<resultMap id="joinSelectScore" type="Score" >
<id property="id" column="id"/>
<result property="math" column="math"/>
<result property="chinese" column="chinese"/>
<result property="english" column="english"/>
<result property="computer" column="computer"/>
<association property="user" column="userid" javaType="User" resultMap="UserDaoMapping.userResult"/>
</resultMap>
4,关于条件查询where是否要显示,用trim来实现
<select
id="queryByModel"
resultMap="BaseResultMap">
SELECT /*MS-T-FEE-DIMENSION-LADDER-QUERYBYMODEL*/
<include refid="Base_Column_List"
/>
FROM T_FEE_DIMENSION_LADDER
<trim
prefix="where"
prefixOverrides="AND ">
<if
test="status != null ">
AND STATUS = #{status}
</if>
<if
test="createdBy != null ">
AND CREATED_BY = #{createdBy}
</if>
<if
test="updatedBy != null ">
AND UPDATED_BY = #{updatedBy}
</if>
<if
test="maxLadderAmount != null ">
AND MAX_LADDER_AMOUNT = #{maxLadderAmount}
</if>
<if
test="minLadderAmount != null ">
AND MIN_LADDER_AMOUNT = #{minLadderAmount}
</if>
<if
test="unitDimensionFee != null ">
AND UNIT_DIMENSION_FEE = #{unitDimensionFee}
</if>
<if
test="feeDimensionId != null ">
AND fee_dimension_id = #{feeDimensionId}
</if>
AND DELETE_FLAG = 1
</trim>
order by updated_date desc
</select>
a,
<insertid="insert"parameterType="com.exingcai.captain.dal.model.GpsDevice"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO T_GPS_DEVICE(
<includerefid="COLS"/>
)VALUES(
#{gpsDeviceCode},
#{gpsDeviceType},
#{gpsDeviceName},
#{vendor},
#{companyId},
#{status},
#{bindDeliveryToolId},
#{bindDeliveryToolNo},
#{remark},
#{createdBy},
now(),
#{updatedBy},
now()
)
</insert>
b,
<insertid="insert">
<selectKey resultType="java.lang.Long" keyProperty="id"
order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
INSERT INTO ENUM_REF(
ID
,CODE
,SORT
,TYPE
,VALUE
,CREATED_BY
,UPDATED_BY
,DELETE_FLAG
,CREATED_DATE
,UPDATED_DATE
)VALUES(
#{id}
4000
, #{code}
, #{sort}
, #{type}
, #{value}
, #{createdBy}
, #{updatedBy}
, 0
, #{createdDate}
, #{updatedDate}
)
</insert>
2, 关于mybatis中的关联查询
该功能的实现,也有两种方式,一种是用标签 <association></association> ,另外一种是用标签<collection></collection>
这两个标签的使用例子如下:
<resultMap>
<resultcolumn="DISPATCH_NO"property="dispatchNo"/>
<resultcolumn="batch_no"property="batchNo"/>
<resultcolumn="warehouse_out_person"property="warehouseOutPerson"/>
<resultcolumn="reject_message"property="rejectMessage"/>
<collectioncolumn="ID"property="cargoDeliverDtls"
select="com.exingcai.captain.dal.dao.CargoDeliverDtlDAO.queryCargoDeliverDtlsByCargoDeliveryId"/>
</resultMap>
<resultMap id="joinSelectScore" type="Score" >
<id property="id" column="id"/>
<result property="math" column="math"/>
<result property="chinese" column="chinese"/>
<result property="english" column="english"/>
<result property="computer" column="computer"/>
<association property="user" column="userid" javaType="User" resultMap="UserDaoMapping.userResult"/>
</resultMap>
3, 关于多个参数的传递和参数名的引用
据我目前接触到的传多个参数的方案有三种。
第一种方案
DAO层的函数方法?
?
第二种方案
此方法采用Map传多参数.Dao层的函数方法
?
?
?
第三种方案
Dao层的函数方法?
?
<resultMap id="joinSelectScore" type="Score" >
<id property="id" column="id"/>
<result property="math" column="math"/>
<result property="chinese" column="chinese"/>
<result property="english" column="english"/>
<result property="computer" column="computer"/>
<association property="user" column="userid" javaType="User" resultMap="UserDaoMapping.userResult"/>
</resultMap>
4,关于条件查询where是否要显示,用trim来实现
<select
id="queryByModel"
resultMap="BaseResultMap">
SELECT /*MS-T-FEE-DIMENSION-LADDER-QUERYBYMODEL*/
<include refid="Base_Column_List"
/>
FROM T_FEE_DIMENSION_LADDER
<trim
prefix="where"
prefixOverrides="AND ">
<if
test="status != null ">
AND STATUS = #{status}
</if>
<if
test="createdBy != null ">
AND CREATED_BY = #{createdBy}
</if>
<if
test="updatedBy != null ">
AND UPDATED_BY = #{updatedBy}
</if>
<if
test="maxLadderAmount != null ">
AND MAX_LADDER_AMOUNT = #{maxLadderAmount}
</if>
<if
test="minLadderAmount != null ">
AND MIN_LADDER_AMOUNT = #{minLadderAmount}
</if>
<if
test="unitDimensionFee != null ">
AND UNIT_DIMENSION_FEE = #{unitDimensionFee}
</if>
<if
test="feeDimensionId != null ">
AND fee_dimension_id = #{feeDimensionId}
</if>
AND DELETE_FLAG = 1
</trim>
order by updated_date desc
</select>
相关文章推荐
- Mybatis传递多个参数的解决办法(三种)
- 获取Java的MyBatis框架项目中的SqlSession的方法
- Mybatis逆工程jar包的修改和打包
- 深入浅析mybatis oracle BLOB类型字段保存与读取
- MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法
- 详解Java的MyBatis框架和Spring框架的整合运用
- Java的MyBatis框架项目搭建与hellow world示例
- SpringMVC整合mybatis实例代码
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis学习笔记(二)之关联关系
- 浅析Mybatis 在CS程序中的应用
- Java Mybatis框架入门基础教程
- Windows下Java+MyBatis框架+MySQL的开发环境搭建教程
- Mybatis与Ibatis的区别
- MyBatis学习教程(二)―如何使用MyBatis对users表执行CRUD操作
- Java+MyBatis+MySQL开发环境搭建流程详解
- MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题
- Java环境中MyBatis与Spring或Spring MVC框架的集成方法
- spring、mybatis 配置方式详解(常用两种方式)
- Java简单实现SpringMVC+MyBatis分页插件