您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页5.MapperXML文件详解

5.MapperXML文件详解

来源:暴趣科技网
5.MapperXML⽂件详解

1.CRUD标签

1.1.select

select – 书写查询sql语句

select中的⼏个属性说明:

id属性:当前名称空间下的statement的唯⼀标识。必须。要求id和mapper接⼝中的⽅法的名字⼀致。resultType:将结果集映射为java的对象类型。必须(和 resultMap ⼆选⼀)parameterType:传⼊参数类型。可以省略

1.2.insert

insert 的⼏个属性说明:

id:唯⼀标识,随便写,在同⼀个命名空间下保持唯⼀,使⽤动态代理之后要求和⽅法名保持⼀致parameterType:参数的类型,使⽤动态代理之后和⽅法的参数类型⼀致useGeneratedKeys:开启主键回写keyColumn:指定数据库的主键

keyProperty:主键对应的pojo属性名标签内部:具体的sql语句。

1.3.update

id属性:当前名称空间下的statement的唯⼀标识(必须属性);parameterType:传⼊的参数类型,可以省略。标签内部:具体的sql语句。

1.4.delete

delete 的⼏个属性说明:

id属性:当前名称空间下的statement的唯⼀标识(必须属性);parameterType:传⼊的参数类型,可以省略。标签内部:具体的sql语句。

2.#{}和${}

场景:数据库有两个⼀模⼀样的表。历史表,当前表

查询表中的信息,有时候从历史表中去查询数据,有时候需要去新的表去查询数据。希望使⽤1个⽅法来完成操作。

/**

* 根据表名查询⽤户信息(直接使⽤注解指定传⼊参数名称)*

* @param tableName* @return*/

public List queryUserByTableName(String tableName);

测试输出:

有问题,报语法错误:相当于执⾏了这样⼀条sql:

select * from 'tb_user';

显然表名多了引号。改正:

注意:

#{} 只是替换?,相当于PreparedStatement使⽤占位符去替换参数,可以防⽌sql注⼊。

${} 是进⾏字符串拼接,相当于sql语句中的Statement,使⽤字符串去拼接sql;$可以是sql中的任⼀部分传⼊到Statement中,不能防⽌sql注⼊。

使⽤${} 去取出参数值信息,需要使⽤${value}

#{} 只是表⽰占位,与参数的名字⽆关,如果只有⼀个参数,会⾃动对应。推荐:

/**

* 根据表名查询⽤户信息(直接使⽤注解指定传⼊参数名称)*

* @param tableName* @return*/

public List queryUserByTableName(@Param(\"tableName\") String tableName);

#{}多个参数时:

/**

* 登录(直接使⽤注解指定传⼊参数名称)*

* @param userName* @param password* @return*/

public User login( String userName, String password);

报错:

org.apache.ibatis.exceptions.PersistenceException:

### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'userName' not found. Available parametersare [0, 1, param1, param2]

### Cause: org.apache.ibatis.binding.BindingException: Parameter 'userName' not found. Available parameters are [0, 1, param1, param2]解决⽅案⼀:

解决⽅案⼆:

最终解决⽅案:

/**

* 登录(直接使⽤注解指定传⼊参数名称)*

* @param userName* @param password* @return*/

public User login(@Param(\"userName\") String userName, @Param(\"password\") String password);

通常在⽅法的参数列表上加上⼀个注释@Param(“xxxx”) 显式指定参数的名字,然后通过${“xxxx”}或#{“xxxx”}sql语句动态⽣成的时候,使⽤${};sql语句中某个参数进⾏占位的时候#{}

3.resultMap

使⽤:

4.sql⽚段

例如在UserMapper.xml中定义如下⽚段:

id,

user_name,password,name,age,sex,birthday,created,updated

Sql⽚段也可以定义在单独的.xml⽂件中如:定义CommonSQL.xml:

PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">

id,

user_name,password,name,age,sex,birthday,created,updated

使⽤:

当然要完成这个功能还需要在全局配置⽂件mybatis-config.xml中引⼊该外部配置⽂件:

  

    

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务