mybatis.xml中sql编写规范

[size=medium][b]一、越少的代码,越强悍的功能,xml里面应该6个sql语句就够用了,修改,维护成本很低,见下表[/b][/size]
[table]
|[b]英文名[/b]|[b]方法名称[/b]|[b]核心点[/b]|[b]建议[/b]|
|insert|1.新增数据|如果是自增主键,应该返回主键ID||
|deleteById|2. 根据主键ID删除数据|sql默认加limit 1,防止多删数据|此方法不建议有,建议逻辑删除|
|updateById|3. 根据主键ID修改数据|sql默认加limit 1,防止多修改数据||
|selectById|4. 根据主键查询数据|查询一条数据||
|selectByIdForUpdate|5. 根据主键加锁查询数据|加锁查询一条数据,事务处理用|
|queryListByParam|6. 根据输入条件查询数据列表|和7配合使用||
|queryCountByParam|7. 根据输入条件查询总数|和6配合使用||
[/table]

[size=medium][b]二、公共的查询条件和字段列表等抽出公共sql段,方便使用[/b][/size]
[table]
|[b]英文名[/b]|[b]方法名称[/b]|[b]核心点[/b]|[b]建议[/b]|
|_field_list|1.字段列表|修改方便,方便字段排序||
|_value_list|2. 字段值列表|修改方便,方便字段值排序||
|_common_where|3. 通用查询条件|每个字段的等值判断||
|_regin_where|4. 通用范围区间条件|字段的时间区间,字段的金额区间等的判断||
|_contain_where|5. 包含字段值范围条件|字段的常量值包含判断,in ,not in|
|_common_sorts|6. 通用排序条件|order by||
[/table]

[size=medium][b]三、一个mybatis.xml例子[/b][/size]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Assets">


<!-- 设置1分钟缓存,缓存大小1024,采用最近最少使用算法 -->
<cache readOnly="true" flushInterval="60000" size="10" eviction="LRU" />

<resultMap type="Assets" id="AssetsResultMap">
<id property="id" column="id" />
<result property="userId" column="user_id" />
<result property="amount" column="amount" />
<result property="earning" column="earning" />
<result property="type" column="type" />
<result property="status" column="status" />
<result property="productId" column="product_id" />
<result property="productName" column="product_name" />
<result property="cardNo" column="card_no" />
<result property="bankCode" column="bank_code" />
<result property="orderId" column="order_id" />
<result property="effectiveDate" column="effective_date" />
<result property="redeemType" column="redeem_type"/>
<result property="initAmount" column="init_amount"/>
<result property="initEarning" column="init_earning"/>
<result property="redeemingAmount" column="redeeming_amount"/>
<result property="redeemingEarning" column="redeeming_earning"/>
<result property="redeemedAmount" column="redeemed_amount"/>
<result property="redeemedEarning" column="redeemed_earning"/>
<result property="punishAmount" column="punish_amount"/>
<result property="latestRedeemTime" column="latest_redeem_time"/>
<result property="maturityDate" column="maturity_date"/>
<result property="createTime" column="create_time" />
<result property="modifyTime" column="modify_time" />
<result property="remark" column="remark" />
</resultMap>

<!-- 字段列表 -->
<sql id="_field_list">
id,
user_id,
amount,
earning,
type,
status,
product_id,
product_name,
card_no,
bank_code,
order_id,
effective_date,
redeem_type,
init_amount,
init_earning,
redeeming_amount,
redeeming_earning,
redeemed_amount,
redeemed_earning,
punish_amount,
latest_redeem_time,
maturity_date,
create_time,
modify_time,
remark
</sql>

<!-- 字段值列表 -->
<sql id="_value_list">
#{id},
#{userId},
#{amount},
#{earning},
#{type},
#{status},
#{productId},
#{productName},
#{cardNo},
#{bankCode},
#{orderId},
#{effectiveDate},
#{redeemType},
#{initAmount},
#{initEarning},
#{redeemingAmount},
#{redeemingEarning},
#{redeemedAmount},
#{redeemedEarning},
#{punishAmount},
#{latestRedeemTime},
#{maturityDate},
#{createTime},
#{modifyTime},
#{remark}
</sql>

<!-- 通用查询条件 不支持ID查询条件,ID的直接通过ID即可以查 -->
<sql id="_common_where">
<if test="id != null"> AND id = #{id}</if>
<if test="userId != null"> AND user_id = #{userId}</if>
<if test="amount != null"> AND amount = #{amount}</if>
<if test="earning != null"> AND earning = #{earning}</if>
<if test="type != null"> AND type = #{type}</if>
<if test="status != null"> AND status = #{status}</if>
<if test="productId != null"> AND product_id = #{productId}</if>
<if test="productName != null"> AND product_name = #{productName}</if>
<if test="cardNo != null"> AND card_no = #{cardNo}</if>
<if test="bankCode != null"> AND bank_code = #{bankCode}</if>
<if test="orderId != null"> AND order_id = #{orderId}</if>
<if test="effectiveDate != null"> AND effective_date = #{effectiveDate}</if>
<if test="redeemType != null"> AND redeem_type = #{redeemType}</if>
<if test="initAmount != null"> AND init_amount = #{initAmount}</if>
<if test="initEarning != null"> AND init_earning = #{initEarning}</if>
<if test="redeemingAmount != null"> AND redeeming_amount = #{redeemingAmount}</if>
<if test="redeemingEarning != null"> AND redeeming_earning = #{redeemingEarning}</if>
<if test="redeemedAmount != null"> AND redeemed_amount = #{redeemedAmount}</if>
<if test="redeemedEarning != null"> AND redeemed_earning = #{redeemedEarning}</if>
<if test="punishAmount != null"> AND punish_amount = #{punishAmount}</if>
<if test="latestRedeemTime != null">
<![CDATA[
AND latest_redeem_time = #{latestRedeemTime, jdbcType=TIMESTAMP}
]]>
</if>
<if test="maturityDate != null">
<![CDATA[
AND maturity_date = #{maturityDate, jdbcType=TIMESTAMP}
]]>
</if>
<if test="createTime != null">
<![CDATA[
AND create_time = #{createTime, jdbcType=TIMESTAMP}
]]>
</if>
<if test="modifyTime != null">
<![CDATA[
AND modify_time = #{modifyTime, jdbcType=TIMESTAMP}
]]>
</if>
<if test="remark != null"> AND remark = #{remark}</if>
</sql>


<!-- 通用范围区间查询 -->
<sql id="_regin_where">
<if test="egtCreateTime != null">
<![CDATA[
AND create_time >= #{egtCreateTime, jdbcType=TIMESTAMP}
]]>
</if>
<if test="ltCreateTime != null">
<![CDATA[
AND create_time < #{ltCreateTime, jdbcType=TIMESTAMP}
]]>
</if>
</sql>


<!-- 通用排序处理 -->
<sql id="_common_sorts">
<if test="sorts != null">
ORDER BY
<foreach collection="sorts" item="item" separator=",">
${item.column.columnName} ${item.sortMode.mode}
</foreach>
</if>
</sql>


<!-- in 和 not in的通用查询where -->
<sql id="_contain_where">
<if test="containStatusSet!=null">
AND status IN
<foreach item="item" index="i" collection="containStatusSet" separator="," open="(" close=")" >
#{item}
</foreach>
</if>

</sql>


<!-- 插入操作 -->
<insert id="insert" parameterType="Assets">
INSERT INTO assets (
<include refid="_field_list"/>)
VALUES (
<include refid="_value_list"/>)
</insert>


<!-- 根据ID主键进行删除,注意limit 1 -->
<delete id="deleteById" parameterType="java.lang.String" >
delete from assets where id = #{id} limit 1
</delete>


<!-- 根据主键ID进行更新,注意limit 1 -->
<update id="updateById" parameterType="Assets">
UPDATE assets
<set>
<if test="userId != null">
user_id = #{userId},
</if>
<if test="amount != null">
amount = #{amount},
</if>
<if test="earning != null">
earning = #{earning},
</if>
<if test="type != null">
type = #{type},
</if>
<if test="status != null">
status = #{status},
</if>
<if test="productName != null">
product_name = #{productName},
</if>
<if test="productId != null">
product_id = #{productId},
</if>
<if test="cardNo != null">
card_no = #{cardNo},
</if>
<if test="bankCode != null">
bank_code = #{bankCode},
</if>
<if test="orderId != null">
order_id = #{orderId},
</if>
<if test="effectiveDate != null">
effective_date = #{effectiveDate},
</if>
<if test="redeemType != null">
redeem_type = #{redeemType},
</if>
<if test="initAmount != null">
init_amount = #{initAmount},
</if>
<if test="initEarning != null">
init_earning = #{initEarning},
</if>
<if test="redeemingAmount != null">
redeeming_amount = #{redeemingAmount},
</if>
<if test="redeemingEarning != null">
redeeming_earning = #{redeemingEarning},
</if>
<if test="redeemedAmount != null">
redeemed_amount = #{redeemedAmount},
</if>
<if test="redeemedEarning != null">
redeemed_earning = #{redeemedEarning},
</if>
<if test="punishAmount != null">
punish_amount = #{punishAmount},
</if>
<if test="latestRedeemTime != null">
latest_redeem_time = #{latestRedeemTime},
</if>
<if test="maturityDate != null">
maturity_date = #{maturityDate},
</if>
<if test="modifyTime != null">
modify_time = #{modifyTime},
</if>
<if test="remark != null">
remark = #{remark},
</if>
</set>

<where>
id = #{id} limit 1
</where>
</update>


<!-- 根据ID进行查询 -->
<select id="selectById" resultMap="AssetsResultMap">
select * from assets where id = #{id}
</select>


<!-- 根据ID进行加行锁查询 -->
<select id="selectByIdForUpdate" resultMap="AssetsResultMap">
select * from assets where id = #{id} for update
</select>


<!-- 根据查询条件查询数据和queryCountByParam方法配对使用 -->
<select id="queryListByParam" parameterType="map" resultMap="AssetsResultMap">
SELECT
<include refid="_field_list"/>
FROM
assets
<where>
1 = 1
<include refid="_common_where"/>
<include refid="_regin_where"/>
<include refid="_contain_where"/>
</where>

<include refid="_common_sorts"/>

<if test="offset != null and rows != null">
limit #{offset}, #{rows}
</if>
</select>


<!-- 根据查询条件查询总数和queryListByParam方法配对使用 -->
<select id="queryCountByParam" parameterType="map" resultType="java.lang.Integer">
SELECT count(1) FROM assets
<where>
1 = 1
<include refid="_common_where"/>
<include refid="_regin_where"/>
<include refid="_contain_where"/>
</where>
</select>

</mapper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一款Java持久层框架,支持自定义SQL、存储过程和高级映射。在使用MyBatis时,我们需要编写一个mybatis.xml文件来配置MyBatis的相关信息,例如数据源、Mapper接口映射等。 下面是一个简单的mybatis.xml配置文件示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> <mapper class="com.example.mapper.OrderMapper"/> </mappers> </configuration> ``` 这个示例,我们定义了一个数据源(dataSource),指定了数据库连接信息,包括数据库URL、用户名和密码。同时,我们还定义了两个Mapper,分别是UserMapper和OrderMapper,分别对应了两个Mapper接口的实现。这些Mapper的具体实现可以在对应的XML文件进行定义。 除此之外,我们还可以在mybatis.xml文件配置MyBatis的一些其他信息,例如缓存、插件等。在实际使用,我们可以根据实际情况来灵活配置mybatis.xml文件,以满足我们的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值