Mybatis复习笔记:4
关于Mybatis中的一些注意点
一.关于实体类属性
当我们封装的时候我们一般要求实体类中和数据库的列名保持一致。
如果不一致将会导致查询结果为空。
解决属性名和数据库中表的字段名不一致的方法
1.在sql语句中给数据库中的字段起别名
如:
<select id="findAll" resultType="com.domain.User">select product_name as name, product_type as type,product_price as price,regist_date as date from product ;</select>
2.给实体类和数据库建立对应关系
利用resultMap配置查询结果中的列名和实体类的属性名的对应关系,如下:
<mapper namespace="com.dao.UserDao"><!--配置查询结果中的列名和实体类的属性名的对应关系--><!--resultMap的id指定唯一标识,可以随便起,type指定结果集映射,返回的是User对象--><resultMap id="userMap" type="com.domain.User"><!--主键字段的对应如下,由于我的表没有设置主键,所以...--><!--<id property="userid" column="id"/>--><!--非主键字段的对应如下--><!--property对应的是实体类属性 column对应的是数据库的字段--><result property="name" column="product_name"/><result property="type" column="product_type"/><result property="price" column="product_price"/><result property="date" column="regist_date"/></resultMap><select id="findAll" resultMap="userMap">select * from product</select>
然后在sql语句中将resultType设置为"userMap"即可;
<select id="findAll" resultMap="userMap">select * from product
</select>
二.关于动态sql语句运用的理解
where标签
where标签类似于MySQL中的where语句。
<select id="findByProduct" parameterType="Product" resultType="Product">select * from product<where><if test="product_type!=null">and product_type like #{product_type}</if><if test="product_price!=null">and product_price>#{product_price}</if></where>
</select>
当上面的product_type和product_price都不为null的时候,那么打印出来的SQL语句为:
select * from product where product_type like “xxx” and product_price>xxx;
where标签会自动将其后第一个条件的and或者是or给忽略掉。
if标签
if标签就类似于我们平时使用的if语句,起着选择的作用,如下:
<select id="findByProduct" parameterType="Product" resultType="Product">select * from product<where><if test="product_type!=null"> <!--给出的条件-->and product_type like #{product_type}</if><if test="product_price!=null"> <!--给出的条件-->and product_price>#{product_price}</if></where>
</select>
我们可以根据product_type或product_price的符合条件来查询,只要满足了if标签里面给出的条件,即可进行查询。
只依照一个条件查询
@Test
public void testFindByProduct(){Product product = new Product();//product.setProduct_type("%用品%"); //select * from product where product_type like "%用品%";product.setProduct_price(100); //select * from product where product_price>100;List<Product>productList = productDao.findByProduct(product);for (Product product1:productList){System.out.println(product1);}
}
当上面两个条件都启用的时候,即:
@Test
public void testFindByProduct(){Product product = new Product();product.setProduct_type("%用品%");product.setProduct_price(100);List<Product>productList = productDao.findByProduct(product);for (Product product1:productList){System.out.println(product1);}
}
表示的sql语句为:select * from product where product_type like “%用品%” and product_price>100;
foreach标签
foreach标签如其名,起到遍历集合类型的作用,如下:
<!--下面的查询语句相当于MySQL中的"select * from product where product_type in(xxx,xxx,xxx);"写法-->
<select id="findByType2" parameterType="QueryProduct" resultType="Product"><!--传入类型(parameterType)为实体类QueryProduct,返回类型(resultType)为实体类Product-->select * from product<where><if test="product_types!=null and product_types.size()>0"><!--该判断条件为product_types集合不为空,且product_types集合的长度大于0--><foreach collection="product_types" open="and product_type in(" close=")" item="product_type" separator=",">#{product_type}</foreach></if></where>
</select>
上面中的collection表示这是一个集合,由open开始,在close结束,并且将遍历出来的每一项存到item里面,由separator分割。
@Testpublic void testFindByType2(){QueryProduct queryProduct = new QueryProduct();List<String>list = new ArrayList<>();//往集合里面添加元素list.add("生活用品");list.add("乐器");list.add("文具");queryProduct.setProduct_types(list);List<Product>productList = productDao.findByType2(queryProduct);for (Product product1:productList){System.out.println(product1);}}
关于抽取重复sql语句的标签
利用sql标签来配置重复的sql语句,可以避免在项目开发的过程中重复编写大量相同的sql语句,如下:
<!--抽取重复的sql语句片段-->
<sql id="defaultUser">select * from product
</sql>
使用方式(使用include标签)
<select id="findByProduct" parameterType="Product" resultType="Product"><include refid="defaultUser"/> <!--使用include标签来引用前面已定义的sql语句片段,等价于select * from product--><where><if test="product_type!=null">and product_type like #{product_type}</if><if test="product_price!=null">and product_price>#{product_price}</if></where></select>
相关文章:

USB_HID C#测试例程
USB_HID C#测试例程 报告模式(按键、LED、ADC) 一、简介 Usb无处不在,而hid则免驱,使用更加方便,本方案主要是基于STM32F10X系列单片机的usb hid开发,计算机软件采用VS2013 C#开发。 二、接线图示意 三、开…

基于Linux的视频传输系统(上大学时參加的一个大赛的论文)
文件夹<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1原创性声明----------------------------------------------------32 摘要----------------------------------------------------------43系统方案---------------------…

UE5真实环境设计入门学习教程
大小解压后:4.69G 时长4h 30m 1280X720 MP4 语言:英语中英文字幕(根据原英文字幕机译更准确) 虚幻引擎5–面向初学者的真实环境设计 Unreal Engine 5 – Realistic Environment Design for Beginners 信息: 通过一步一步创建一个…

Spring复习笔记:1
ApplicationContext的三个常用实现类: ClassPathXmLApplicationContext: 它可以加载类路径下的配置文件,要求配置文件必须在类路径下。不在类路径的话,加载不了。FileSystemXmLApplicationContext: 它可以加载磁盘任意路径下的配置文件(必须有访问权限&…

Android 趣味应用—— 短信编辑器
修改短信数据库,从而生成任意手机号发送的短信。 AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.example.dudon.fak…
Uber体验之路
第一次听说uber,是2014年初的时候,那时候互联网热门新闻,经常冒出这家公司。 第一次体验uber,是2014.10.3,去机场接人,叫了专车。 第一次觉得uber体验好,是2014年感恩节的时候,它在深…

容器和虚拟机的对比
容器和虚拟机的对比 “敏捷”和“高性能”是容器相较于虚拟机最大的优势,也是它能够在 PaaS 这种更细粒度的资源管理平台上大行其道的重要原因。 不过,有利就有弊,基于 Linux Namespace 的隔离机制相比于虚拟化技术也有很多不足之处ÿ…

Spring复习笔记:2
Spring中的依赖注入 IOC的作用: 降低程序间的耦合(依赖关系) 依赖关系的管理: 以后都交给spring来维护,在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明依赖关系的维护,就称之为依赖注入…

Unity Android 2021:用C#打造3D ZigZag赛车游戏
Unity Android 2021 : Build 3D ZigZag Racing Game with C# MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:65节课(11h 7m) |大小解压后:3.6 GB …

封装了一套WeCenter的IOS SDK
度过了忙碌且迷茫的2015年,迎来了的郁闷且彷徨的2016年。 与哥们商量做些什么,谈不上创业也不是项目,只是想让2016年不必如2015年一样迷茫,也慰藉一下2016年的彷徨。 方向么,考察了几个行业,也做了些调研&a…

java多线程样例
这里我们做一个完整的样例来说明线程产生的方式不同而生成的线程的差别: package debug;import java.io.*;import java.lang.Thread;class MyThread extends Thread{ public int x 0; public void run(){ System.out.println(x); }}class R implements Runn…

Spring复习笔记:3
Spring基于xml的案例实践 在数据库中创建一张新的表 create table account(id int primary key auto_increment,name varchar(40),money float )character set utf8 collate utf8_general_ci;往表中导入数据 insert into account(name,money) values(aaa,1000); insert into…

Blender多米诺骨牌动画学习教程 The Impossible Domino Run in Blender
流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,48.0 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小:8.53 GB 含课程文件 |时长:8h 20m Blender的运动跟踪,建模,渲染和合成工具集…

unity3d游戏开发猜想——当程序猿老去
程序猿将代码注入生命去打造互联网的浪潮之巅。当有一天他们老了。会走向那里,会做些什么?非常多年以后,在我60岁的那天早晨,天刚蒙蒙亮我就起床了,先去公园晨练,然后回来做早餐(50岁的时候我学…

【JavaScript】JavaScript基础-变量、运算符与控制语句
一.变量 变量: 定义一个变量,系统会为之分配一块内存,程序可以用变量名来表示这块内存中的数据。 由于javascript采用的是弱类型的变量形式,因此,在声明一个变量的时候,我们不必声明它的类型,但…

ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 posted on 2019-09-05 01:00 竹径风声 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/girl1314/p/11462711.html

Blender+Substance Painter全流程制作真实的机器人学习教程
MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:44节课(10h 52m) |大小解压后:9.9 GB 含课程素材 如何使用Blender 2.8和Substance Painter制作真…

Spring复习笔记:4
在复习笔记三中我们进行的案例的编写,我们可以发现,就算使用了注解的方式,xml配置文件文件还是不能够删除,现在我们来将一些新的注解可以让我们去掉xml配置文件。 Configuration 作用:指定当前类是一个配置类 细节&a…

Extjs PROXY查询params无法传参,改用extraParams
转载于:https://www.cnblogs.com/cocoat/p/5153009.html

详解Paint的setPathEffect(PathEffect effect)
一、setPathEffect() 这个方法一看就和path有关,顾名思义,它就是给path设置样式(效果)的。PathEffect这个路径效果类没有具体的实现,效果是由它的六个子类实现的: 这六个子类分别可以实现不同的路径效果&am…

返回手势导致页面卡死并且UI错乱的问题解决
问题记录:在做了部分页面的转场动画之后,返回手势不灵了,快速连续返回的话会卡住,App退到后台再重新激活之后页面不卡了,但是UI错乱. 解决方案: 1. 在UINavigationController子类实现代理UIGestureRecognizerDelegate,并在viewDidLoad方法中增加代理设置: - (void)viewDidLoad …

Spring学习笔记:3(面向切面AOP)
AOP:Aspect Oriented Program(面向切面) 我们再回顾一下AOP的一些术语: 通知(Advice) 就是你想要的功能,也就是的安全、事物、日志等。先定义好,然后在想用的地方用一下。 连接…

Blender全流程制作真实感3D产品学习教程
MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:41节课(4h 29m) |大小解压后:4.53 GB 仅使用blender 2.8进行建模、纹理、光照和渲染,…

如何给iOS应用添加原生的二维码扫描功能
之前总觉得二维码扫描很高大上,其实apple工程师早就为我们提供了便捷的方法。二维码扫描第三方的库也挺多的,不过效率高的当属系统提供的扫描方法。 二维码扫描主要用到了以下几个类:AVCaptureDevice,AVCaptureDeviceInput,AVCaptureMetadata…

2021-2027年中国市医疗电子场投资分析及前景预测报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国医疗电子行业市场行业相关概述、中国医疗电子行业市场行业运行环境、分析了中国医疗电子行…

RabbitMQ入门(4)--路由
2019独角兽企业重金招聘Python工程师标准>>> ###路由 ###(使用Java客户端) 在先前的指南中,我们建立了一个简单的日志系统。我们可以将我们的日志信息广播到多个接收者。 在这部分的指南中,我们将要往其中添加一个功能…

从一个数组中寻找出现奇数次的数字
假设给定了数组nums为[0,1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,1,2,3,3,0] 其中3出现了3次 而其他数字都出现了两次 则我们应该得到结果为3 第一种方式:使用Hash 1 /**2 * 使用hash3 * */4 public static int singleNumber_1(int[] nums) {5 …

Blender写实建筑场景制作学习教程 Exterior Visualization in Blender 2.9
MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:26节课(3h 41m) |大小:3.3 GB 使用Blender创建惊人的外部渲染。 你会学到: Blender中的建模、着色…

Postman增删改查接口测试
查 一.选择Get方式 二.点击Send开始测试,得出结果 增 一.选择Post方式 二.输入需要增添的数据 三.点击Send测试 四.没有报错,添加成功 查看一下,发现确实添加进去了 删 一.选择Delete方式 二.根据id删除,在请求路径下直接写出…

新安装Ubuntu加载时提示“为/检查磁盘时发生严重错误”的解决方法
本文部分内容转载自: http://jingyan.baidu.com/article/0aa22375bbffbe88cc0d6419.html http://www.aichengxu.com/view/35086 解决方法: 1. 进入Ubuntu启动菜单时按e 键进入启动项编辑模式: 2. 找到代码【ro rootflagsync】,将其…