- 浏览: 1146371 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (138)
- JAVA基础 (22)
- Spring (6)
- 设计模式 (2)
- JDK源码 (3)
- java-功能组件 (4)
- 游戏项目 (2)
- linux (13)
- Oracle (2)
- struts (1)
- 字符集 (8)
- HTTP协议 (2)
- java-网络通信 (1)
- 工具软件推荐 (2)
- tomcat (1)
- java-容器框架 (2)
- java-IO框架 (2)
- java-多线程框架 (4)
- java-NIO框架 (0)
- jquery (2)
- 工具使用 (12)
- 加密解密 (1)
- redis (2)
- maven (2)
- svn (1)
- eclipse (1)
- mysql (11)
- 我的收藏 (1)
- JAVA进阶 (26)
- 运维 (3)
- protocol buffer (1)
- 优秀博主 (1)
- nginx (1)
- 算法 (2)
- 故障排查 (4)
- 粤语歌曲 (6)
- 生活总结 (6)
- 高并发 (4)
- 语言训练 (1)
- 读书笔记 (5)
- 诗歌 (1)
- tomcat源码学习 (1)
- 软件词汇 (1)
- git (1)
最新评论
-
ryuhi:
一个是来源source,一个是来源方序列号seq这两个数据要怎 ...
高并发的核心技术-幂等的实现方案 -
xuezhongyu01:
<div class="quote_title ...
高并发的核心技术-幂等的实现方案 -
无量:
<div class="quote_title ...
高并发的核心技术-幂等的实现方案 -
phil_jing:
@RequestParam 默认 true
SpringMVC注解@RequestParam全面解析 -
aguai0:
aguai0 写道第五条里的如果要获取任务执行结果,用Comp ...
JAVA进阶----ThreadPoolExecutor机制
一、越少的代码,越强悍的功能,xml里面应该6个sql语句就够用了,修改,维护成本很低,见下表
二、公共的查询条件和字段列表等抽出公共sql段,方便使用
三、一个mybatis.xml例子
英文名 | 方法名称 | 核心点 | 建议 |
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配合使用 |
二、公共的查询条件和字段列表等抽出公共sql段,方便使用
英文名 | 方法名称 | 核心点 | 建议 |
_field_list | 1.字段列表 | 修改方便,方便字段排序 | |
_value_list | 2. 字段值列表 | 修改方便,方便字段值排序 | |
_common_where | 3. 通用查询条件 | 每个字段的等值判断 | |
_regin_where | 4. 通用范围区间条件 | 字段的时间区间,字段的金额区间等的判断 | |
_contain_where | 5. 包含字段值范围条件 | 字段的常量值包含判断,in ,not in | |
_common_sorts | 6. 通用排序条件 | 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>
发表评论
-
区块链!每个人都要了解下--十分钟洞见区块链的前世今生
2018-04-27 12:32 798区块链!每个人都要了解下--十分钟洞见区块链的前世今生 ... -
区块链!每个人都要了解下--十分钟洞见区块链的前世今生
2018-04-27 12:09 0为啥要讲区块链呢,因为它太火了,火到什么程度呢 ... -
项目打包,报软件包、类不存在问题排查过程
2017-05-16 17:13 5978项目打包报,软件包、类不存在问题排查过程 一、背景 ... -
海量数据存储--分库分表策略详解
2017-04-12 19:59 7332海量数据存储--分库分表策略详解 一、背景: 系统刚 ... -
jstack详解
2017-02-17 11:15 1915jstack http://www.open-open.co ... -
jdk-源码中的一些坑
2017-02-13 15:17 1231jdk-源码中的一些坑 1. Runnable接口的命名简直 ... -
一次mysql死锁的排查过程
2016-11-21 10:04 11323一次mysql死锁的排查过程 一、背景 17号晚上要吃饭 ... -
JVM调优:选择合适的GC collector (三)
2016-11-15 20:51 1270CMS Collector 在很多地方,CMS Collec ... -
JVM调优:选择合适的GC collector (二)
2016-11-15 20:47 995http://blog.csdn.net/historya ... -
JVM调优:选择合适的GC collector (一)
2016-11-15 20:45 1271http://blog.csdn.net/historyas ... -
jstat查看gc情况
2016-11-10 10:11 2493jps(Java Virtual Machine Proces ... -
tomcat源码学习(一) eclipse导入tomcat源码
2016-10-31 20:05 14031. 到官网下载Tomcat源代码,这里用到的是apache- ... -
深入分析ClassLoader
2016-10-27 23:27 782转(原文http://blog.csdn.net/xya ... -
业务架构模板
2016-10-20 19:56 1885业务架构模板 默认一个高大上的业务系统需要具备的技术点和对应 ... -
如何写一个强壮的JOB任务
2016-10-18 15:00 3013如何写一个强壮的JOB任务 1. JOB跑一半断电了,不能产 ... -
数据库设计规范
2016-10-17 23:29 65791. 数据库设计基本规范 领域驱动表内容 ... -
全局主键生成器-支持单JVM1秒近1000万订单生成
2016-05-03 20:46 5673全局主键生成器 介绍: 相对于DB自增序列的全局主键生成器, ... -
解决并发下累计的问题
2016-04-25 11:58 2125package com.tongbanjie.trade.te ... -
系统开发中的坑
2016-03-15 15:39 2799系统开发中的坑 这个是在公司分享的一个ppt,整理下发到博客里 ... -
系统开发中的坑
2016-03-14 15:55 193系统开发的坑 一.幂等性 二.数据库 三.代码 ...
相关推荐
Mybatis使得SQL编写更自由,能更好地应对复杂的数据库操作;Spring的DI和AOP简化了对象的管理和事务处理。 通过"ssm-mybatis.zip"这个项目,你可以快速地学习和理解SSM框架的工作原理,以及如何在实际开发中整合和...
在实际开发中,你还需要在对应的Java接口和实现类中编写对应的方法,将前端传递的参数正确地绑定到Map对象中,并调用Mybatis的SqlSession执行查询。 总的来说,Mybatis提供了一套灵活的机制来处理动态SQL,包括处理...
"mybatis xml文件自动生成"是开发过程中的一个重要环节,它可以帮助开发者提高效率,减少手动编写XML映射文件和对应的POJO(Plain Old Java Object)类的工作量。 MyBatis的Mapper文件是其核心组成部分之一,它包含...
- **XML映射文件**:在`mapper.xml`中编写SQL语句和结果映射,通过namespace与Mapper接口关联。 5. **增删改查操作** - **增(INSERT)**:在Mapper接口中声明插入方法,XML映射文件中编写对应的INSERT语句,通过...
当我们在编写Java代码调用Mapper接口的方法时,通过插件,我们可以快速定位到对应的XML文件中,查看或编辑SQL语句,这对于调试和优化SQL性能非常有帮助。 使用这个插件,开发者可以享受到以下好处: 1. **快速导航...
本文将详细介绍如何在Spring Boot项目中集成MyBatis并使用XML配置文件进行数据访问。 首先,我们需要在Spring Boot项目中引入MyBatis的相关依赖。在`pom.xml`文件中添加MyBatis和其Spring Boot启动器的依赖项: ``...
3. 创建Mapper接口和Mapper XML文件:定义数据访问接口,并在对应的XML文件中编写SQL语句。 4. 编写Service和Repository:在Service层调用Mapper接口进行数据操作,Repository层可以使用MyBatis提供的...
4. **Mapper XML文件**: 在MyBatis中,Mapper.xml文件是SQL语句的载体,它定义了数据库操作,如增删查改。每个Mapper.xml文件通常对应一个Mapper接口,接口方法与XML中的SQL ID匹配,实现SQL的执行。 5. **MyBatis-...
MyBatis 支持在 XML 映射文件中编写动态 SQL,如 `if`、`choose`、`when`、`otherwise`、`trim`、`where` 等标签,可以根据条件动态生成 SQL 语句。 7. **缓存机制**: MyBatis 内置了本地缓存(Local Cache)和...
3. 创建Mapper接口和XML文件:定义Mapper接口,然后在对应的XML文件中编写SQL语句。 ```java public interface UserMapper { User selectUserById(Integer id); } ``` ```xml <mapper namespace="com.example.demo....
MyBatis是一款优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射,极大地简化了传统Java开发中的数据库操作。SQLServer是微软公司推出的关系型数据库管理系统,广泛应用于企业级应用开发。本教程将通过...
在`UserMapper.xml`文件中,可以编写如下SQL: ```xml <select id="selectUserWithOrders" resultType="com.example.User"> SELECT * FROM user u LEFT JOIN order o ON u.userId = o.userId ``` 这里使用了LEFT...
相比于传统的JDBC编程方式,MyBatis通过简单的XML或注解来配置和映射接口及Java的POJO对象到数据库中的记录,从而避免了大量的JDBC代码编写工作。这使得开发人员能够更加专注于业务逻辑的实现,而不需要过多地关心...
mapper.xml文件是Mybatis中的SQL映射文件,它定义了数据库操作的SQL语句以及参数和结果映射。mapper.java文件则包含了与XML文件对应的接口,通过这些接口,Java代码可以调用SQL操作。 逆向生成mapper.xml和mapper....
在本文中,我们将深入探讨如何在SpringBoot项目中结合Mybatis框架进行XML方式的SQL配置。SpringBoot以其简洁的配置和强大的自动配置能力,极大地简化了应用开发过程,而Mybatis作为一款轻量级的持久层框架,允许...
1. **SQL语句与Java代码分离**:MyBatis允许开发者在XML配置文件或注解中编写SQL语句,避免了在Java代码中混杂SQL,使得代码更清晰,易于维护。 2. **灵活的数据映射**:MyBatis通过动态SQL支持,可以根据条件灵活...
4. **高亮显示**:在Mapper接口和XML映射文件中,插件会高亮显示对应的接口方法和SQL语句,使得代码结构更加清晰,方便查找和修改。 5. **多版本支持**:尽管这个插件是2019年的版本,但它通常能很好地兼容Idea的新...
1. 动态SQL:MyBatis的动态SQL功能允许开发者在XML映射文件中编写条件语句,极大地提高了SQL的灵活性和可维护性。 2. 映射器接口:MyBatis通过映射器接口将Java方法与SQL语句绑定,使得代码更加简洁,易于测试。 3. ...
MyBatis允许在XML或注解中编写SQL语句。这些映射文件包含了SQL查询、插入、更新和删除操作,通过`<select>`, `<insert>`, `<update>` 和 `<delete>` 标签定义。 4. **参数映射**: 使用`<param>`标签或者`@Param`...
4. 编写Mapper接口和映射文件:定义数据库操作的接口,并在对应的mapper.xml文件中编写SQL语句。 5. 扫描Mapper接口:通过Java配置类或`@MapperScan`注解来扫描Mapper接口。 6. 使用Mapper:在Service层注入Mapper...