mybatis配置详解---XXXMapper.xml
来源:互联网 发布:外包淘宝客服多少钱 编辑:程序博客网 时间:2024/06/01 15:04
一:功能
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
二:主要的属性
1、parameterType:指定输入映射参数的类型,可以是基本类型、也可是是定义的实体类。
#{}与${}:
#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?。如:
<select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{id}</select><span style="font-family: 宋体; background-color: rgb(255, 255, 255);"></span>
使用占位符#{}可以有效防止sql注入,在使用时不需要关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。#{}可以接收简单类型值或pojo属性值,
如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称
${}和#{}不同,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。使用${}不能防止sql注入,但是有时用${}会非常方便,如下的例子:
<select id="findUserByName" parameterType="string" resultType="cn.itcast.mybatis.po.User">select * from user where username like '%${value}%'</select>如果本例子使用#{}则传入的字符串中必须有%号,而%是人为拼接在参数中,显然有点麻烦,如果采用${}在sql中拼接为%的方式则在调用mapper接口传递参数就方便很
多。再比如order by排序,如果将列名通过参数传入sql,根据传的列名进行排序,应该写为:ORDER BY ${columnName},如果使用#{}将无法实现此功能
这时候你就会发现一个问题,无论使用selectOne()还是使用selectList()方法,只能穿进去一个参数,那么多条件查询、分页的又怎么去处理呢?因为mybatis的输
入映射参数主持pojo,那么我们就可以自定义一个有关参数的pojo,然后把需要的属性封装到pojo对象中当做参数写入方法中,就能够查询了。例子如下:
mapper.xml
<select id="findUserList" parameterType="queryUserVo" resultType="user">select id,username,birthday from user where #{user.username} and sex={user.sex}</select>自定义的pojo
public class QueryUserVo {//可能要包括很多pojo类型作为它的属性//用户信息private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}}在dao实现类的方法写入方法中即可
2、resultType:指定输出结果映射类型,确切的理解是指定单条记录所映射的类型,可以是pojo、基本类型、hashmap..
(1):输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。
(2):返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。
(3):返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List<pojo>对象作为方法返回值。
(4):输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值。
resultMap:resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
由于resultMap中内容比较重要,而且表之间一对多、多对多、一对一都是在这里面设置的,因此后面会有一个专题,这里先说这些三:总结
- mybatis配置详解---XXXMapper.xml
- XxxMapper.xml配置
- mybatis-config.XML配置以及,XxxMapper的CRUD
- xxxMapper.xml
- MD5加盐和UUid,Mybatis XXXmapper.xml事例
- mybatis 配置详解-SqlMapConfig.xml
- Mybatis-config.xml配置详解
- mybatis之mybatis-config.xml 配置详解
- mybatis之mybatis-config.xml 配置详解
- xxxMapper.xml简单crud
- 创建Spring-Mybatis web项目,解决IDEA下找不到XXXmapper.xml文件的问题
- MyBatis两种执行XXXMapper.xml配置文件中SQL语句的方法
- 创建Spring-Mybatis web项目,解决IDEA下找不到XXXmapper.xml文件的问题
- mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml
- 创建Spring-Mybatis web项目,解决IDEA下找不到XXXmapper.xml文件的问题
- MyBatis Generator generatorConfig.xml配置详解
- MyBatis Generator generatorConfig.xml配置详解
- MyBatis Generator generatorConfig.xml配置详解
- Effective C++_Item22,23笔记
- 图结构练习——BFSDFS——判断可达性
- 面试常问难题 必须搞明白的
- 【杭电oj2035】人见人爱A^B
- POJ 1426 Find The Multiple dfs
- mybatis配置详解---XXXMapper.xml
- 多类中的引用类型转换
- jmeter自动录制脚本
- Struts2之文件上传
- jquery生成曲线
- 383. Ransom Note
- CSS 外边距合并
- 1057 N的阶乘(大数阶乘)
- Java实现拔河问题