mybatis里的mapper,@Mapper参数,Mapper.xml文件 sql语句Select+where语句
提示:有不清楚的可以试着看一下我最后的连接,是跟这些内容相关的
Mapper文件,特殊符号:
转义符号 | 原符号 | 中文意思 |
---|---|---|
&It; | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
在Mapper xml文件写一些符号,有时候识别不了,就会出错,就需要用到上面的转义字符了。
或者为了方便用<![CDATA[]]>也是可以的,在下面的例子代码也有用到。
例如:
1 col_name <![CDATA[ >= ]]> #{colVal} 【例1】
2
3 <![CDATA[ and w.WORK_DAY <= #{workdayEnd} ]]> 【例2】
Mapperxml文件的参数说明:
resultMap:resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如好几个表结合起来的数据)映射到【某个类型】的集当中。
例如:我已经写好了需要的pojo类【workRecordBo】,里面有我需要用的字段。
写类字段需要注意:
mybatis默认是属性名和数据库字段名一一对应的,即
数据库表列:user_name
实体类属性:user_name
但是java中一般使用驼峰命名
数据库表列:user_name
实体类属性:userName
我在xml中需要这样写:property="类里面的字段名" ,column="数据库里面对应的字段"
1 <resultMap id="workRecordBo" type="com.ribao.entity.bo.WorkRecordBo" >
2 <result property="workDay" column="WORK_DAY"/>
3 </resultMap>
id:与继承BaseMapper的接口中的方法名一样
例如:我的接口是这样的 public interface WorkRecordMapper extends BaseMapper<WorkRecord>{}
我的方法名: public void getWorkRecord(@Param("workdayStart")String workdayStart,@Param("workdayEnd")String workdayEnd,@Param("teamid")String teamid);
@Param()是与xml文件中的#{}绑定在一起的,名字一定要相同,数据类型也要相同。
例如:@Param("workdayStart")对应xml文件的 #{workdayStart}
resultType:resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等,这里目前只说【对象类型】。
对象类型:写全类名
例如:package com.ribao.entity.bo;
public class WorkRecordBo {......}
我的类名就是:resultType="com.ribao.entity.bo.WorkRecordBo"
Mapper的xml文件写select语句+where条件筛选:
1 <select id="selectWorkRecord" resultType="com.ribao.entity.bo.WorkRecordBo" resultMap="workRecordBo">
2 SELECT e.EMPLOYEE_ID,t.TEAM_NAME,p.PROJECT_NAME,b.BIG_NAME,s.SMALL_NAME,l.LAN_NAME,WORK_DA,w.REMARK
3 from WORKRECORD w
4 join PROJECT p on p.PROJECT_ID=w.PROJECT_ID
5 join BIGCATEGORY b on b.BIG_ID=w.BIG_ID
6 join SMALLCATEGORY s on s.SMALL_ID=w.SMALL_ID
7 join EMPLOYEE e on e.EMPLOYEE_ID=w.EMPLOYEE_ID
8 join TEAM t on t.TEAM_ID=w.TEAM_ID
9 join LANGUAGE l on l.LAN_NO=w.LAN_NO
10
11 <where>
12 <if test="workdayStart != null and workdayStart !='' " >//workdayStart为非空的时候执行
13 w.WORK_DAY >= #{workdayStart}
14 </if>
15
16 <if test="workdayEnd != null and workdayEnd !='' " >
17 <![CDATA[ and w.WORK_DAY <= #{workdayEnd} ]]>
18 </if>
19
20 <if test="teamidList != null and teamidList !='' " >
21 and w.TEAM_ID in
22 <foreach collection="teamidList" index="index" item="teamid" open="(" separator="," close=")">
23 #{teamid}
24 </foreach>
25 </if>
26
27 </where>
可参考的博客:
【Java】数据库mapper与实体字段对应,SpringBoot开启驼峰映射 网址:https://blog.csdn.net/hr952909686/article/details/91344655
Mybatis:resultMap的使用总结网址:https://www.cnblogs.com/kenhome/p/7764398.html
学习 mybatis的官方网址:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html
mybatis里的mapper,@Mapper参数,Mapper.xml文件 sql语句Select+where语句的更多相关文章
- Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器
关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务 ...
- 做参数可以读取参数 保存参数 用xml文件的方式
做参数可以读取参数 保存参数 用xml文件的方式 好处:供不同用户保存适合自己使用的参数
- Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构?
Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构? 解答:可以看与XML文件对应的域模型.
- 搜索某个目录下所有jar包中的mapper目录下的xml文件
rm -rf /mapper/* find /data/app/app-*/lib ! -path "*xnpush*" ! -path "*portal*" ...
- xml文件sql中大于号、小于号、等号的转义问题
1.用小于或小于等于的场景 代码1: <delete id="delOvertimeLog" parameterType="java.lang.Integer&qu ...
- mybatis的Mapper.xml文件SQL语句BadSqlGrammarException之FUNCTION错误系列
想必各位在开发过程中一定使用过:统计的功能,用到了很多SQL的函数,于是就直接写在Mapper文件中了: 比如: member_num,MAX(ID) AS newestLoanID,MIN (ID) ...
- idea通过mapper快速定位到xml文件
1.点击File找到设置(Settings) 2.点击Plugins下的 Browse respositories 3.在搜索栏搜索mybatis ,选中 Free Mybatis plugin——i ...
- idea从mapper接口跳到xml文件
- intellij idea快速通过mapper跳转到xml文件
安装完之后重启idea即可!
随机推荐
- Redis+Kafka异步提高并发
Redis+Kafka异步提高并发 Redis+Kafka异步提高并发 设计 实现 提交请求接口 Kafka消费队列 异步处理Service 客户端轮询获取结果 Redis集群节点配置 KafKa集群 ...
- 【Android】AndroidStudio关于EventBus报错解决方法its super classes have no public methods with the @Subscribe
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先说明,以前我用eventBus的 ...
- java初探(1)之静态页面化——客户端缓存
利用服务端缓存技术,将页面和对象缓存在redis中,可以减少时间浪费,内存开销.但在每次请求的过程中,仍然会有大量静态资源的请求和返回. 使用静态页面技术,页面不必要使用页面交互技术,比如thymel ...
- 《神经网络的梯度推导与代码验证》之vanilla RNN前向和反向传播的代码验证
在<神经网络的梯度推导与代码验证>之vanilla RNN的前向传播和反向梯度推导中,我们学习了vanilla RNN的前向传播和反向梯度求导,但知识仍停留在纸面.本篇章将基于深度学习框架 ...
- 04router
1.以 / 开头的嵌套路径会被当作根路径.一级路由可以放在二级router-view里面 实现的效果是页面嵌套 { path: '/console', name: 'console', compone ...
- 与C中printf并列的System.out.printf 用法(转载)
转载地址: https://blog.csdn.net/qq_39017218/article/details/80042287 printf的格式控制的完整格式: % - 0 m.n l或h ...
- [Python]在当前目录下创建三个目录
import os os.mkdir("2018-03-16-b018") os.mkdir("2019-03-16-b019") os.mkdir(" ...
- 软件定义网络实验(一)----Mininet源码安装和可视化拓扑工具
一.实验任务 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简拓扑 ...
- 难道主键除了自增就是GUID?支持k8s等分布式场景下的id生成器了解下
背景 主键(Primary Key),用于唯一标识表中的每一条数据.所以,一个合格的主键的最基本要求应该是唯一性. 那怎么保证唯一呢?相信绝大部分开发者在刚入行的时候选择的都是数据库的自增id,因为这 ...
- 让document.write的广告无阻塞的加载
广告代码分析 很多第三方的广告系统都是使用document.write来加载广告,如下面的一个javascript的广告链接. 1 <script type="text/javascr ...