参照官网:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
1、数据准备(表结构以及示例数据)
2、查询结构实体类PersonInfoVo.java
public class PersonInfoVo { private int id; private String userName; private String password; private int pid; private int state; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public int getState() { return state; } public void setState(int state) { this.state = state; } }
3.1查询用户名带有er的用户信息
3.1.1编写sql映射
<?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="com.zlt.mybatis.vo.PersonInfoVo"> <select id="queryPerson" resultMap="personResultMap" parameterType="String"> select id,user_name,password,pid,state from t_user where state = 1 <if test="user_name != null"> and user_name like #{userName} </if> </select> <resultMap type="com.zlt.mybatis.vo.PersonInfoVo" id="personResultMap"> <id property="id" column="id"/> <result property="userName" column="user_name"/> <result property="password" column="password"/> <result property="pid" column="pid"/> <result property="state" column="state"/> </resultMap> </mapper>
第二种写法:bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文
<!-- 模糊查询 --> <select id="queryPerson" resultMap="personResultMap" parameterType="String"> <bind name="pattern" value="'%' + _parameter + '%'" /> select id,user_name,password,pid,state from t_user where state = 1 <if test="_parameter != null"> and user_name like #{pattern} </if> </select> <resultMap type="com.zlt.mybatis.vo.PersonInfoVo" id="personResultMap"> <id property="id" column="id"/> <result property="userName" column="user_name"/> <result property="password" column="password"/> <result property="pid" column="pid"/> <result property="state" column="state"/> </resultMap>
3.1.2、加载sql映射文件(mybatis.xml)
<mappers> <mapper resource="com/zlt/mybatis/mapping/PersonMapper.xml"/> </mappers>
3.1.3、编写单元测试
public void testQuery(){ SqlSession session = null; try{ session = sqlSessionFactory.openSession(); String statement = "com.zlt.mybatis.vo.PersonInfoVo.queryPerson"; //List<PersonInfoVo> persons = session.selectList(statement); Map<String, String> map = new HashMap<String, String>(); map.put("userName", "er"); List<PersonInfoVo> persons = session.selectList(statement,map); for(PersonInfoVo person : persons){ if(null != person) { System.out.println("id:" + person.getId() + "userName:" + person.getUserName() + "password:" + person.getPassword() + "pid:" + person.getPid() +"state:" + person.getState()); } } }finally{ if(null != session) session.close(); } }
第二种测试单元测试
public void testQuery(){ SqlSession session = null; try{ session = sqlSessionFactory.openSession(); String statement = "com.zlt.mybatis.vo.PersonInfoVo.queryPerson"; //List<PersonInfoVo> persons = session.selectList(statement); //Map<String, String> map = new HashMap<String, String>(); //map.put("userName", "er"); List<PersonInfoVo> persons = session.selectList(statement,"er"); for(PersonInfoVo person : persons){ if(null != person) { System.out.println("id:" + person.getId() + "userName:" + person.getUserName() + "password:" + person.getPassword() + "pid:" + person.getPid() +"state:" + person.getState()); } } }finally{ if(null != session) session.close(); } }
3.1.4、运行结果:
id:2userName:lisierpassword:123456pid:2state:1 id:3userName:wangerpassword:123456pid:3state:1
3.2查询用户含有"li",并且pid为2的用户信息
3.2.1编写SQL映射
<select id="queryPerson2" resultMap="personResultMap2" parameterType="String"> select id,user_name,password,pid,state from t_user where state = 1 <if test="user_name != null"> and user_name like #{userName} </if> <if test="pid != null"> and pid =#{pid} </if> </select> <resultMap type="com.zlt.mybatis.vo.PersonInfoVo" id="personResultMap2" extends="personResultMap"> </resultMap>
3.2.3加载SQL映射文件
<mappers> <mapper resource="com/zlt/mybatis/mapping/PersonMapper.xml"/> </mappers>
3.2.4编写单元测试
public void testQuery2(){ SqlSession session = null; try{ session = sqlSessionFactory.openSession(); String statement = "com.zlt.mybatis.vo.PersonInfoVo.queryPerson2"; //List<PersonInfoVo> persons = session.selectList(statement); Map<String, String> map = new HashMap<String, String>(); map.put("userName", "li"); map.put("pid", "2"); List<PersonInfoVo> persons = session.selectList(statement,map); for(PersonInfoVo person : persons){ if(null != person) { System.out.println("id:" + person.getId() + "\tuserName:" + person.getUserName() + "\tpassword:" + person.getPassword() + "\tpid:" + person.getPid() +"\tstate:" + person.getState()); } } }finally{ if(null != session) session.close(); } }
3.2.5运行结果
id:2 userName:lisier password:123456 pid:2 state:1
相关推荐
孙允中临证实践录.pdf
Rqalpha-myquant-learning对开源项目Rqalpha的改造,在应用上面更适合个人的应用。学习量化策略,对量化策略进行开发调试。2018-05-25程序更新集成大鱼金融提供的分钟线回测Mod,用来提供Jaqs分钟线数据源,测试程序通过。目前的改造情况1.增加ats.main.py,来驱动起回测,使程序可以使用pycharm进行开发调试2.增加批量回测功能3.在AlgoTradeConfig中进行配置回测的策略和所需要的参数信息,参数信息通过excel文件进行配置4.在ats.main.py中设置参数为batch,运行回测,会将输出的.csv文件放在cvsResult目录下,将回测的图片保存在picResult目录下。5.读取回测的.csv文件,提取账户信息,可以将不同参数回测的结果输出在同一张图片上,更加清晰的看清同一个策略,不同参数所带来的变化。6.从广发信号站点获取历史交易信号(站点已停止,此处无法继续)7.增加通用函数的封装,现阶段增加了对TA_LIB的调用封装(未完整完成)8.增加了对增量资金定投的情况的模拟,用
航班背景随着国内民航的不断发展,航空出行已经成为人们比较普遍的出行方式,但是航班延误却成为旅客们比较头疼的问题。台风,雾霾或飞机故障等因素都有可能导致大面积航班延误的情况。大面积延误给旅客出行带来很多不便,如何在计划起飞前2小时预测航班延误情况,让出行旅客更好的规划出行方式,成为一个重大课题。要求提前2小时(航班计划起飞时间前2小时),预测航班是否会延误3小时以上(给出延误3小时以上的概率)
comsol变压器绝缘油中流注放电仿真,使用PDE模块建立MIT飘逸扩散模型。 模型到手即用,提供MIT鼻祖lunwen中文版,及相关学习笔记资料。 流注放电,绝缘油,油纸绝缘。
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
云南大数据交通太阳的云南大数据交通
comsol激光打孔(不通)水平集两相流仿真模型,涉及温度场流场水平集, 模型为复现模型,仅供学习,可自己更材料功率等参数 爽快确认模型无误并收送变形几何三维打孔模型或水平集抛光模型。
哈工深 自适应滤波课堂笔记
Django框架实现学生信息管理系统 总体概括 注册流程 首先进行输入用户名(邮箱)、密码以及验证码,输入完之后点击注册按钮。如果输入的不正确,提示错误信息。 如果一切信息填写正确无误,调用STMP模块发送激活邮件,用户必须要点击接收到邮箱链接,进行邮件激活后才方可登陆。 即使注册成功,没有激活的用户也不能登陆,用户以get的方式直接重定向到注册页面。 注册登录: 用户能在系统中进行登陆注册和忘记密码进行找回的功能。 个人中心:修改头像,修改密码,修改邮箱,可以看到我的信息。 日志记录: 记录后台人员的操作,方便发现BUG和查看各项调用进行时间。 导航栏:学生信息中有基本信息、年级及成绩信息的模块,能够排序筛选等功能。 多选操作: 可以选择多条记录进行删除操作,还可以在课程列表页可以对不同课程进行排序。 数据页码: 可以设置各项数据在每一页中显示的数量多少,进行翻页功能。 模块列表页: 能够有过滤器功能,在范围内进行查看数据。还能将数据导出为csv,x
车辆主动悬架防侧翻控制 利用Simulink和Carsim进行联合仿真,搭建主动悬架以及防倾杆模型,在不同转角工况下进行仿真试验,设置滑模等控制器计算维持车辆侧倾稳定性所需的力矩,将力矩分配到各个悬架实现控制效果。 控制效果良好,保证运行成功。 项目报告撰写请单独。
计算机系毕业设计
资源描述: HTML5实现好看的MT外卖订餐网站源码,好看的酷炫的MT外卖订餐网站源码,酷炫的MT外卖订餐网站源码模板,HTML酷炫的MT外卖订餐网站源码,内置酷炫的动画,界面干净整洁,页面主题,全方位介绍内容,可以拆分多个想要的页面,可以扩展自己想要的,注释完整,代码规范,各种风格都有,代码上手简单,代码独立,可以直接运行使用。也可直接预览效果。 资源使用: 点击 index.html 直接查看效果
MDPI下的sensors模板,.docx格式
新医林改错《内经·素问》分册.pdf
命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork基金2.0命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork环境准备运行环境Python3 所需的软件包requests prettytable colorama基金自选修改my_jijin.txt文本文件,每行都是一个您关注的基金代码启动方式python3 main.py
NiuCloud-Admin-SAAS 是一款快速开发SaaS通用管理系统后台框架, 前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构,后台结合PHP8、Java SDK、Python等主流后端语言搭建是一款快速可以开发企业级应用的软件系统。
脉振方波高频注入代码+增强型滑膜esmo代码,永磁同步电机高频注入程序 资料为C代码一份,大厂代码,可运行,经典流传; 配套一篇代码对应的说明文档,详细算法说明; 脉振方波注入方法相对于脉振正弦信号注入的形式,信号处理的过程少了一些滤波器 ,计算更简单,并且由于信号频段较高,可以实现更高的动态响应能力。 增强滑膜控制;
逆变器下垂控制,微电网逆变器孤岛下垂控制,波形输出完美
multisim学习电路基础视频共42讲(个人觉得超赞)5G提取方式是百度网盘分享地址
基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。项目初始化npm install启动开发环境npm run dev项目打包上线npm run buildLints和fixes文件npm run lint