mybatis中sql语句查询操作
动态sql
where if
where可以自动处理第一个and。
<!-- 根据id查询用户信息 -->
<!-- public User findUserById(int id); -->
<select id="findUserById" parameterType="user" resultType="user">
select * from user
<!-- 当有if条件成立时,where会自动拼接查询条件,并处理第一个and -->
<include refid="where_if_if"/>
</select>
<!-- sql片段抽取 -->
<sql id="where_if_if">
<where>
<!-- 动态拼接sql查询条件 -->
<if test="username != null and username != ''">
and username like "%"#{username}"%"
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
</where>
</sql>
foreach
向sql传递数组或List,mybatis使用foreach解析
在pojo中定义list属性ids存储多个用户id,并添加getter/setter方法
<select id="findUserByForeach" parameterType="queryvo" resultType="user">
select * from user
<if test="ids != null and ids.size > 0 ">
<foreach collection="ids" item="id" open="where id in (" separator=", " close=")">
#{id}
</foreach>
</if>
</select>
关联查询
一对一:
案例:查询所有订单信息,关联查询下单用户信息。
- 使用resultType,定义一个新的pojo,使其继承pojoA后包含了pojoA所有字段,在pojo中添加新的字段
- 使用resultMap,定义专门的resultMap用于映射一对一查询结果,在pojoA中加入属性
association:表示进行关联查询单条记录
property:表示关联查询的结果存储在cn.itcast.mybatis.po.Orders的user属性中
javaType:表示关联查询的结果类型
<id property="id" column="uid"/>:查询结果的uid列对应关联对象的id属性,这里是<id />表示uid是关联查询对象的唯一标识。
<result property="username" column="username"/>:查询结果的username列对应关联对象的username属性。
一对多:
案例:查询所有用户信息,同时关联查询用户的订单信息。
用户信息和订单信息为一对多关系。
- 在User类中加入List orders属性,同时添加get/set方法
collection部分定义了用户关联的订单信息。表示关联查询结果集
property="orders":关联查询的结果集存储在User对象的上哪个属性。
ofType="orders":指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也可以使用全限定名。
<id />及<result/>的意义同一对一查询。

mybatis中sql语句查询操作的更多相关文章
- MyBatis中sql语句
一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...
- EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery
一.目前EF Core的版本为V2.1 相比较EF Core v1.0 目前已经增加了不少功能. EF Core除了常用的增删改模型操作,Sql语句在不少项目中是不能避免的. 在EF Core中上下文 ...
- Mybatis中sql语句中的in查询,一定要判断null的情况
不严谨的写法,可能会报错:in (),这种情况不符合mysql的语法. select from loanwhere LOAN_ID in <foreach item="item&quo ...
- Mybatis中sql语句中的in查询,判断null和size为0的情况
不严谨的写法,可能会报错:in (),这种情况不符合SQL的语法,导致程序报错. 如果简单只做非空判断,这样也有可能会有问题:本来in一个空列表,应该是没有数据才对,却变成了获取全部数据! 所以一个比 ...
- mybatis中sql语句传入多个参数方法
1 使用map <select id="selectRole" parameterType="map" resultType="RoleMap& ...
- Mybatis 中 sql 语句的占位符 #{} 和 ${}
#{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换.#{} 可以有效防止 sql注入. #{} ...
- mybatis中sql语句必须用${}而不能不用#{}的情况
在mybatis中如果我们使用#{}的方式编写的sql时,#{} 对应的变量自动加上单引号 ' ' 例如: select * from #{param} 当我们给参数传入值为user时,他的sql是这 ...
- mybatis中SQL语句运用总结
union 连接查询 连接两个表后会过滤掉重复的值 <resultMap id="BaseResultMap" type="com.sprucetec.pay.e ...
- mybatis 中sql语句传递多个参数
Available parameters are [2, 1, 0, param1, param2, param3] <select id="loginByTeacher" ...
随机推荐
- HDU - 3652 数位DP 套路题
题意:统计能被13整除和含有13的数的个数 解法没法好说的..学了前面两道直接啪出来了 PS.HDU深夜日常维护,没法交题,拿网上的代码随便对拍一下,输出一致 #include<bits/std ...
- IOS不支持overflow: hidden;
IOS不支持overflow: hidden; 假设页面上有个弹出窗,弹出窗出现后,只想让用户的视觉锁定在弹出窗上,正常我们会想到用overflow:hidden这个属性来实现,如下 html{ ov ...
- 后台返回的值ajax接收不到
原因有很多种可能,我遇到的是后台写的Controller忘记了加@ResponseBody,导致springMVC把返回的字符串当成view了
- oracle 笔记---(六)__表空间
查看表空间的大小 select tablespace_name,block_size,contents from dba_tablespaces; 查看表空间对应的数据文件 select file_n ...
- GreenPlum 大数据平台--分区表(二)
01,创建分区表 [PARTITION BY partition_type (column) [SUBPARTITION BY partition_type (column)] [SUBPARTITI ...
- 使用urllib和http.cookiejar获取python老男孩学员成绩
打开http://crm.oldboyedu.com/crm/grade/single/ 鼠标右键查看源代码,可以看到我们需要post的name.如下: 这里需要在post试提交token和searc ...
- Beam概念学习系列之Pipeline 数据处理流水线
不多说,直接上干货! Pipeline 数据处理流水线 Pipeline将Source PCollection ParDo.Sink组织在一起形成了一个完整的数据处理的过程. Beam概念学习系列之P ...
- 【ExtJS】关于alias和xtype
alias 在api里的解释为:别名 类名称简短的别名列表.多数用于定义xtypes Ext.define('MyApp.Panel', { extend: 'Ext.panel.Panel', al ...
- 【ExtJS】关于自定义组件
一.命名规范 在你编码过程中对类,名字空间以及文件名使用统一的命名规则对你代码的组织,结构化以及可读性有很大的好处. 1.类命名规范: 类名最好只包含字母,在多数情况下,数字是不鼓励使用的,除非非要用 ...
- 转:JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue
从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.以下是我的学习过程. 首先是构 ...