mybatis_关于mapper映射文件及参数
一、关于mapper映射文件
实体类和表是怎么对应起来的呢?
上面的例子中刚好personBean和t_person表中的字段一一对应,数量、类型刚好相同。
如果此时修改一下表中的字段名,如,将username改为name,再次测试报错:
从日志中看出是插入时使用的字段名不正确,那么直接修改映射文件插入时的名字可以吗:
测试发现,插入数据成功,但是查询的映射方法如下:
所以查出来的数据username都为null。
下面这段就派上用途了:
如果实体类中的成员变量和表中字段名一一对应,这里的子标签是可以不写的。
当不是一一对应时,需要在这里配置对应关系:将column中的username改为name即可:
二、参数使用注解
按上面的方式添加一个按名字查找的功能:
1.接口文件中添加方法
**public** List<PersonBean> selectByName(String uName);
2.映射文件中添加sql
<select id=*"selectByName"* resultMap=*"personMap"*>
select \* from t\_person where name=\#\{ aa\}
</select>
3.dao中调用接口方法
private static void selectByName(){
SqlSession session=DBTools.*getSession*();
PersonMapper mapper=session.getMapper(PersonMapper.**class**);
List<PersonBean> person = mapper.selectByName("张三");
System.***out***.println(person.toString());
}
测试,可成功获取到相应数据。
即:接口中的参数uName和映射文件中的#{aa}仅仅是个名字,可随便起名。
名字和参数不对应起来会有问题的,当参数大于一个时怎么定位?
没试过,可能通过顺序来,也可能会报错。
可使用注解的方式来解决此问题:
修改接口:
**public** List<PersonBean> selectByName(@Param(value="aa") String uName);
此时aa就和映射文件中的aa对应起来了。
三、动态sql语句
如: If标签
映射文件中添加新方法:
<select id=*"selectIf"* resultMap=*"personMap"*>
select \* from t\_person where 1 = 1
<if test=*"id != null and id != ''"* >
and id = \#\{id\}
</if>
<if test=*"username != null and username != ''"* >
and name = \#\{ username\}
</if>
</select>
接口文件添加相应方法:
**public** List<PersonBean> selectIf(PersonBean person);
使用时如下:
SqlSession session=DBTools.*getSession*();
PersonMapper mapper=session.getMapper(PersonMapper.**class**);
PersonBean person = **new** PersonBean(2);
person.setUsername("张");
List<PersonBean> personList = mapper.selectIf(person);
System.***out***.println(personList.toString());
当不添加person.setUsername(“张”);时可以查出数据.添加后查不到数据。
还没有评论,来说两句吧...