Mybatis基础学习(三)—映射文件

时间:2022-08-28 23:59:07

一、输入映射

1.parameterType

    指定输入参数的Java类,可以使用别名或者类的全限定名。它也可以接受基本数据类型、POJO对象、HashMap。

 

(1)基本数据类型

Mybatis基础学习(三)—映射文件

 

(2)POJO对象

Mybatis基础学习(三)—映射文件

 

(3)传递POJO包装对象

    开发中通过pojo传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

UserQueryVo.java

public class UserQueryVO{

	// 用户信息
private User user; public User getUser(){
return user;
} public void setUser(User user){
this.user = user;
} }

 

UserMapper.xml

Mybatis基础学习(三)—映射文件

 

UserMapper.java

Mybatis基础学习(三)—映射文件

 

Test.java

Mybatis基础学习(三)—映射文件

 

(4)传递HashMap

    map的key相当于POJO的属性。

 

UserMapper.xml

Mybatis基础学习(三)—映射文件

 

UserMapper.java

Mybatis基础学习(三)—映射文件

 

Test.java

Mybatis基础学习(三)—映射文件

结果:

     User [id=25, username=陈小明, sex=2, birthday=Fri Jul 01 00:00:00 GMT+08:00 2016, address=长春市]

 

二、SQL标签

     通过Mybatis提供的各种动态标签实现动态拼接sql,使得mapper映射文件在编写SQL时更加灵活,方便。常用动态SQL标签有:if、where、foreach。

 

1.if和where标签

if: 作为判断入参来使用的,如果符合条件,则把if标签体内SQL拼接上。注意:用if 标签判断是否为空时,不仅要判断null,也有判断空串""。

where: 会去掉条件中的第一个And符号。

 

案例一: 根据用户名和性别查询

UserMapper.xml

<!-- 标签的使用 -->
<select id="findUsersByNameAndSex" parameterType="userQueryVo" resultType="user">
SELECT * FROM user <!--wher标签:将后面第一个AND去掉,如果没有条件则把自己去掉 -->
<where>
<if test="user != null"> <if test="user.username != null and user.username != ''">
AND username LIKE '%${user.username}%'
</if> <if test="user.sex != null and user.sex != ''">
AND sex = #{user.sex}
</if> </if> </where> </select>

 

UserMapper.java

public interface UserMapper{

	public User findUserById(int id);

	public void saveUser(User user);

	public List<User> findUserList(UserQueryVO uq);

	public List<User> findUserByNameAndSex(HashMap hashMap);

	public List<User> findUsersByNameAndSex(UserQueryVO vo);
}

 

Test.java

	@Test
public void testFindUsersByNameAndSex(){ SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); UserQueryVO vo = new UserQueryVO();
User u = new User();
// u.setUsername("小明");
// u.setSex("1");
vo.setUser(u); List<User> list = mapper.findUsersByNameAndSex(vo); for(User user : list){
System.out.println(user);
} sqlSession.close();
}

此时发出的Sql语句:  SELECT * FROM user

去掉注释发出的Sql语句是:

Preparing: SELECT * FROM user WHERE username LIKE '%小明%' AND sex = ?

Parameters: 1(String)

 

2.sql片段

     SQL片段的功能可以提高Sql的可重用性。

(1)定义

<!-- Sql片段: 可以将sql中任何部分放到sql片段中 建议: 不要将sql中的关键字放进去,比如 select where -->
<sql id="whereClause">
<if test="user != null"> <if test="user.username != null and user.username != ''">
AND username LIKE '%${user.username}%'
</if> <if test="user.sex != null and user.sex != ''">
AND sex = #{user.sex}
</if> </if>
</sql>

 

(2)引用SQL片段

<!-- 标签的使用 -->
<select id="findUsersByNameAndSex" parameterType="userQueryVo" resultType="user">
SELECT * FROM user <!--wher标签:将后面第一个AND去掉,如果没有条件则把自己去掉 -->
<where>
<!-- refid: Sql片段的ID -->
<include refid="whereClause"></include> </where> </select>

 

3.foreach标签

    向sql传递数组或List时,mybatis使用foreach解析数组里的参数并拼接到Sql中。

UserMapper.xml

Mybatis基础学习(三)—映射文件

 

UserMapper.java

Mybatis基础学习(三)—映射文件

 

Test.java

Mybatis基础学习(三)—映射文件

输出的sql语句:

Preparing: SELECT * FROM user WHERE id IN ( ? , ? , ? , ? )

Parameters: 29(Integer), 31(Integer), 32(Integer), 33(Integer)

Mybatis基础学习(三)—映射文件的更多相关文章

  1. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  2. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  3. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  4. Mybatis基础学习&lpar;四&rpar;&mdash&semi;关系映射

    一.模型分析 user和orders user---->orders 一个用户可以创建多个订单,一对多. orders--->user 一个订单只由一个用户创建,一对一.   orders ...

  5. Mybatis&lpar;三&rpar; 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  6. Mybatis学习—XML映射文件

    总结自 Mybatis官方中文文档 Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同 ...

  7. mybatis 学习三 关键文件解析

    1:  mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...

  8. 【spring boot】14&period;spring boot集成mybatis&comma;注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  9. Mybatis基础学习&lpar;五&rpar;&mdash&semi;缓存

    一.概述      mybatis提供查询缓存,如果缓存中有数据就不用从数据库中获取,用于减轻数据压力,提高系统性能.           一级缓存是SqlSession级别的缓存.在操作数据库时需要 ...

随机推荐

  1. 集成 Kendo UI for Angular 2 控件

    伴随着 Angular 2 的正式 release,Kendo UI for Angular 2 的第一批控件已经发布了,当前是 Beta 版本,免费使用. 官方站点:Kendo UI for Ang ...

  2. MyEclipse编码设置

    (1)windows---->Preferences (2)general---->Workspace (3)设置编码

  3. WCF 在VS中,添加服务引用,地址输入http&colon;&sol;&sol;ip&sol;Service&period;svc,点击前往,提示错误,内容如下:

    WCF的service端的webconfig如下: <?xml version="1.0"?> <configuration> <system.ser ...

  4. mybatis源代码分析:mybatis延迟加载机制改进

    在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整 ...

  5. ogre sample分析(一)

    ogre自带了一些例子,逐个过一遍并自己动手做一些调整 1 Sample_BezierPatch:这个例子直接用数值来构造顶点缓存并创建entity,这种方法一般只能创建简单对象,本人以为复杂对象顶点 ...

  6. Vue&period;js如何在一个页面调用另一个同级页面的方法

    使用场景: 页面分为header.home.footer三部分,需要在home中调用header中的方法,这两个没有相互引入 官方给出方法: 需要在展示页里调用顶部导航栏页里的方法,两者之间没有引用关 ...

  7. java&period;lang&period;IllegalStateException&colon; Ambiguous mapping found

    原因:Controller 出现相同的url映射 参考: https://blog.csdn.net/u010892841/article/details/52136256

  8. HTML基础教程

    <!DOCTYPE html><html> <head> <title></title> </head> <body&gt ...

  9. flask第七篇——URL与视图函数的映射

    有兴趣的朋友可以添加微信公众号:自动化测试实战 今天开始就要进入正题了.大家都准备好了吧~ 代码提示 先和大家说个小知识点:有同学后台说输入flask代码pycharm不提示,现在告诉你一个解决方法: ...

  10. 8&period;IO模型

    一.事件驱动模型 服务器处理模型程序,通常有以下几种: (1)收到一个请求则创建一个新的进程来处理这个请求 (2)收到一个请求则创建一个新的线程来处理这个请求 (3)收到一个请求,把它放入事件列表,让 ...