`
无量
  • 浏览: 1146371 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mybatis.xml中sql编写规范

阅读更多
一、越少的代码,越强悍的功能,xml里面应该6个sql语句就够用了,修改,维护成本很低,见下表
英文名方法名称核心点建议
insert1.新增数据如果是自增主键,应该返回主键ID
deleteById2. 根据主键ID删除数据sql默认加limit 1,防止多删数据此方法不建议有,建议逻辑删除
updateById3. 根据主键ID修改数据sql默认加limit 1,防止多修改数据
selectById4. 根据主键查询数据查询一条数据
selectByIdForUpdate5. 根据主键加锁查询数据加锁查询一条数据,事务处理用
queryListByParam6. 根据输入条件查询数据列表和7配合使用
queryCountByParam7. 根据输入条件查询总数和6配合使用


二、公共的查询条件和字段列表等抽出公共sql段,方便使用
英文名方法名称核心点建议
_field_list1.字段列表修改方便,方便字段排序
_value_list2. 字段值列表修改方便,方便字段值排序
_common_where3. 通用查询条件每个字段的等值判断
_regin_where4. 通用范围区间条件字段的时间区间,字段的金额区间等的判断
_contain_where5. 包含字段值范围条件字段的常量值包含判断,in ,not in
_common_sorts6. 通用排序条件order by


三、一个mybatis.xml例子
<?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>
2
1
分享到:
评论

相关推荐

    ssm-mybatis.zip )

    Mybatis使得SQL编写更自由,能更好地应对复杂的数据库操作;Spring的DI和AOP简化了对象的管理和事务处理。 通过"ssm-mybatis.zip"这个项目,你可以快速地学习和理解SSM框架的工作原理,以及如何在实际开发中整合和...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    在实际开发中,你还需要在对应的Java接口和实现类中编写对应的方法,将前端传递的参数正确地绑定到Map对象中,并调用Mybatis的SqlSession执行查询。 总的来说,Mybatis提供了一套灵活的机制来处理动态SQL,包括处理...

    mybatis xml文件自动生成

    "mybatis xml文件自动生成"是开发过程中的一个重要环节,它可以帮助开发者提高效率,减少手动编写XML映射文件和对应的POJO(Plain Old Java Object)类的工作量。 MyBatis的Mapper文件是其核心组成部分之一,它包含...

    02-mybatis.zip

    - **XML映射文件**:在`mapper.xml`中编写SQL语句和结果映射,通过namespace与Mapper接口关联。 5. **增删改查操作** - **增(INSERT)**:在Mapper接口中声明插入方法,XML映射文件中编写对应的INSERT语句,通过...

    mybatis_xml插件

    当我们在编写Java代码调用Mapper接口的方法时,通过插件,我们可以快速定位到对应的XML文件中,查看或编辑SQL语句,这对于调试和优化SQL性能非常有帮助。 使用这个插件,开发者可以享受到以下好处: 1. **快速导航...

    SpringBoot集成Mybatis的xml

    本文将详细介绍如何在Spring Boot项目中集成MyBatis并使用XML配置文件进行数据访问。 首先,我们需要在Spring Boot项目中引入MyBatis的相关依赖。在`pom.xml`文件中添加MyBatis和其Spring Boot启动器的依赖项: ``...

    springboot-mybatis.rar

    3. 创建Mapper接口和Mapper XML文件:定义数据访问接口,并在对应的XML文件中编写SQL语句。 4. 编写Service和Repository:在Service层调用Mapper接口进行数据操作,Repository层可以使用MyBatis提供的...

    spring boot + mybatis +mapper.xml 项目

    4. **Mapper XML文件**: 在MyBatis中,Mapper.xml文件是SQL语句的载体,它定义了数据库操作,如增删查改。每个Mapper.xml文件通常对应一个Mapper接口,接口方法与XML中的SQL ID匹配,实现SQL的执行。 5. **MyBatis-...

    mybatis.docx

    MyBatis 支持在 XML 映射文件中编写动态 SQL,如 `if`、`choose`、`when`、`otherwise`、`trim`、`where` 等标签,可以根据条件动态生成 SQL 语句。 7. **缓存机制**: MyBatis 内置了本地缓存(Local Cache)和...

    springBoot_Mybatis.zip

    3. 创建Mapper接口和XML文件:定义Mapper接口,然后在对应的XML文件中编写SQL语句。 ```java public interface UserMapper { User selectUserById(Integer id); } ``` ```xml &lt;mapper namespace="com.example.demo....

    MyBatis连接SQLServer的小例子

    MyBatis是一款优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射,极大地简化了传统Java开发中的数据库操作。SQLServer是微软公司推出的关系型数据库管理系统,广泛应用于企业级应用开发。本教程将通过...

    mybatis联表查询mapper.xml

    在`UserMapper.xml`文件中,可以编写如下SQL: ```xml &lt;select id="selectUserWithOrders" resultType="com.example.User"&gt; SELECT * FROM user u LEFT JOIN order o ON u.userId = o.userId ``` 这里使用了LEFT...

    尚硅谷_MyBatis.pdf

    相比于传统的JDBC编程方式,MyBatis通过简单的XML或注解来配置和映射接口及Java的POJO对象到数据库中的记录,从而避免了大量的JDBC代码编写工作。这使得开发人员能够更加专注于业务逻辑的实现,而不需要过多地关心...

    用java程序生成mybatis的mapper.xml和mapper.java文件

    mapper.xml文件是Mybatis中的SQL映射文件,它定义了数据库操作的SQL语句以及参数和结果映射。mapper.java文件则包含了与XML文件对应的接口,通过这些接口,Java代码可以调用SQL操作。 逆向生成mapper.xml和mapper....

    SpringBoot +Mybatis xml方式配置SQL Demo源码下载

    在本文中,我们将深入探讨如何在SpringBoot项目中结合Mybatis框架进行XML方式的SQL配置。SpringBoot以其简洁的配置和强大的自动配置能力,极大地简化了应用开发过程,而Mybatis作为一款轻量级的持久层框架,允许...

    MyBatis.jar包

    1. **SQL语句与Java代码分离**:MyBatis允许开发者在XML配置文件或注解中编写SQL语句,避免了在Java代码中混杂SQL,使得代码更清晰,易于维护。 2. **灵活的数据映射**:MyBatis通过动态SQL支持,可以根据条件灵活...

    idea插件 free-mybatis.zip

    4. **高亮显示**:在Mapper接口和XML映射文件中,插件会高亮显示对应的接口方法和SQL语句,使得代码结构更加清晰,方便查找和修改。 5. **多版本支持**:尽管这个插件是2019年的版本,但它通常能很好地兼容Idea的新...

    mybatis.jar包

    1. 动态SQL:MyBatis的动态SQL功能允许开发者在XML映射文件中编写条件语句,极大地提高了SQL的灵活性和可维护性。 2. 映射器接口:MyBatis通过映射器接口将Java方法与SQL语句绑定,使得代码更加简洁,易于测试。 3. ...

    01_mybatis.rar

    MyBatis允许在XML或注解中编写SQL语句。这些映射文件包含了SQL查询、插入、更新和删除操作,通过`&lt;select&gt;`, `&lt;insert&gt;`, `&lt;update&gt;` 和 `&lt;delete&gt;` 标签定义。 4. **参数映射**: 使用`&lt;param&gt;`标签或者`@Param`...

    springboot-05-mybatis.rar

    4. 编写Mapper接口和映射文件:定义数据库操作的接口,并在对应的mapper.xml文件中编写SQL语句。 5. 扫描Mapper接口:通过Java配置类或`@MapperScan`注解来扫描Mapper接口。 6. 使用Mapper:在Service层注入Mapper...

Global site tag (gtag.js) - Google Analytics