mybatis_关于mapper映射文件及参数

╰+哭是因爲堅強的太久メ 2022-05-25 11:45 279阅读 0赞

一、关于mapper映射文件

实体类和表是怎么对应起来的呢?

上面的例子中刚好personBean和t_person表中的字段一一对应,数量、类型刚好相同。

如果此时修改一下表中的字段名,如,将username改为name,再次测试报错:

20180514145253144

从日志中看出是插入时使用的字段名不正确,那么直接修改映射文件插入时的名字可以吗:

20180514145320135

测试发现,插入数据成功,但是查询的映射方法如下:

201805141453266

所以查出来的数据username都为null。

下面这段就派上用途了:











如果实体类中的成员变量和表中字段名一一对应,这里的子标签是可以不写的。

当不是一一对应时,需要在这里配置对应关系:将column中的username改为name即可:











二、参数使用注解

按上面的方式添加一个按名字查找的功能:

1.接口文件中添加方法

  1. **public** List<PersonBean> selectByName(String uName);

2.映射文件中添加sql

  1. <select id=*"selectByName"* resultMap=*"personMap"*>
  2. select \* from t\_person where name=\#\{ aa\}
  3. </select>

3.dao中调用接口方法

private static void selectByName(){

  1. SqlSession session=DBTools.*getSession*();
  2. PersonMapper mapper=session.getMapper(PersonMapper.**class**);
  3. List<PersonBean> person = mapper.selectByName("张三");
  4. System.***out***.println(person.toString());

}

测试,可成功获取到相应数据。

即:接口中的参数uName和映射文件中的#{aa}仅仅是个名字,可随便起名。

名字和参数不对应起来会有问题的,当参数大于一个时怎么定位?

没试过,可能通过顺序来,也可能会报错。

可使用注解的方式来解决此问题:

修改接口:

  1. **public** List<PersonBean> selectByName(@Param(value="aa") String uName);

此时aa就和映射文件中的aa对应起来了。

三、动态sql语句

如: If标签

映射文件中添加新方法:

  1. <select id=*"selectIf"* resultMap=*"personMap"*>
  2. select \* from t\_person where 1 = 1
  3. <if test=*"id != null and id != ''"* >
  4. and id = \#\{id\}
  5. </if>
  6. <if test=*"username != null and username != ''"* >
  7. and name = \#\{ username\}
  8. </if>
  9. </select>

接口文件添加相应方法:

  1. **public** List<PersonBean> selectIf(PersonBean person);

使用时如下:

  1. SqlSession session=DBTools.*getSession*();
  2. PersonMapper mapper=session.getMapper(PersonMapper.**class**);
  3. PersonBean person = **new** PersonBean(2);
  4. person.setUsername("张");
  5. List<PersonBean> personList = mapper.selectIf(person);
  6. System.***out***.println(personList.toString());

当不添加person.setUsername(“张”);时可以查出数据.添加后查不到数据。

发表评论

表情:
评论列表 (有 0 条评论,279人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis映射文件Mapper

    前提说明 1. 使用Dao接口+映射文件的方式创建Dao对象 2. 在接口方法参数中可以使用@Param(“别名”)来指定当前参数的名称,在映射文件中使用\\{别名\