mapper.xml中 limit
时间: 2024-08-15 12:02:00 浏览: 59
在MyBatis的mapper.xml文件中,`limit`标签通常用于限制SQL查询结果的数量,它配合`offset`一起使用,可以用来分页查询数据库数据。`limit`的基本语法如下:
```xml
<select id="selectLimitedData" parameterType="map" resultType="YourEntity">
SELECT * FROM your_table
<if test="pageNumber != null and pageSize != null">
LIMIT #{pageNumber}, #{pageSize}
</if>
</select>
```
在这里,`pageNumber`是当前页码,`pageSize`是每页显示的数据量。如果`pageNumber`和`pageSize`有值,则MyBatis会添加对应的SQL限制,从第`pageNumber * pageSize`行开始取`pageSize`条记录。
相关问题
随便示例两个mapper.xml中的查询语句
好的,以下是两个示例:
1. 查询用户列表,按照注册时间倒序排序,支持分页查询
```xml
<select id="selectUserList" resultType="User">
SELECT * FROM user
ORDER BY register_time DESC
<if test="offset != null and limit != null">
LIMIT #{offset}, #{limit}
</if>
</select>
```
2. 根据关键词搜索文章,返回匹配的文章列表
```xml
<select id="searchArticles" resultType="Article">
SELECT * FROM article
WHERE title LIKE CONCAT('%', #{keyword}, '%')
ORDER BY create_time DESC
</select>
```
其中,`#{}` 表示参数占位符,`<if>` 标签用于动态生成 SQL 语句中的条件语句,根据参数的存在与否来决定是否生成该条件语句。具体语法可以参考 MyBatis 官方文档。
mapper.xml.vm详细
以下是 MyBatis-Plus 代码生成器中生成的 Mapper XML 模板(mapper.xml.vm)的详细说明:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<mapper namespace="$!{mapperPackage}.${tableInfo.mapperName}">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="$!{tableInfo.entityName}">
<id column="$!{tableInfo.keyColumn}" property="$!{tableInfo.keyProperty}" />
#foreach($field in $tableInfo.fields)
<result column="$!{field.column}" property="$!{field.property}" />
#end
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
#foreach($field in $tableInfo.fields)
$!{field.column},
#end
</sql>
<!-- 插入数据 -->
<insert id="insert" parameterType="$!{tableInfo.entityFullName}">
insert into $!{tableInfo.tableName} (
#foreach($field in $tableInfo.fields)
$!{field.column},
#end
) values (
#foreach($field in $tableInfo.fields)
#{ $!{field.property},jdbcType=$!{field.jdbcType}},
#end
)
</insert>
<!-- 更新数据 -->
<update id="update" parameterType="$!{tableInfo.entityFullName}">
update $!{tableInfo.tableName}
<set>
#foreach($field in $tableInfo.fields)
<if test="$!{field.property} != null">
$!{field.column} = #{ $!{field.property},jdbcType=$!{field.jdbcType}},
</if>
#end
</set>
where $!{tableInfo.keyColumn} = #{ $!{tableInfo.keyProperty},jdbcType=$!{tableInfo.keyJdbcType}}
</update>
<!-- 删除数据 -->
<delete id="delete" parameterType="$!{tableInfo.keyJdbcType}">
delete from $!{tableInfo.tableName} where $!{tableInfo.keyColumn} = #{ $!{tableInfo.keyProperty},jdbcType=$!{tableInfo.keyJdbcType}}
</delete>
<!-- 查询单条数据 -->
<select id="selectById" resultMap="BaseResultMap" parameterType="$!{tableInfo.keyJdbcType}">
select <include refid="Base_Column_List" /> from $!{tableInfo.tableName} where $!{tableInfo.keyColumn} = #{ $!{tableInfo.keyProperty},jdbcType=$!{tableInfo.keyJdbcType}}
</select>
<!-- 分页查询数据 -->
<select id="selectPage" resultMap="BaseResultMap" parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page">
select <include refid="Base_Column_List" /> from $!{tableInfo.tableName} where 1=1
#if($strategy.validTablePrefix && $strategy.tablePrefix != "")
and $!{tableInfo.tableName}.table_name like '${strategy.tablePrefix}%'
#end
#if($strategy.validFieldPrefix && $strategy.fieldPrefix != "")
and $!{tableInfo.tableName}.column_name like '${strategy.fieldPrefix}%'
#end
order by $!{tableInfo.keyColumn} asc
limit #{offset}, #{limit}
</select>
</mapper>
```
该模板中包含了常见的增删改查操作的 SQL 语句模板,以下是详细说明:
- `<resultMap>`:定义了映射结果的规则,包括将数据库中的列名映射到 Java 实体类中的属性名;
- `<sql>`:定义了通用的查询结果列;
- `<insert>`:定义了插入数据的 SQL 语句模板,包括表名、列名和值;
- `<update>`:定义了更新数据的 SQL 语句模板,包括表名、列名、值和条件(主键);
- `<delete>`:定义了删除数据的 SQL 语句模板,包括表名和条件(主键);
- `<select>`:定义了查询数据的 SQL 语句模板,包括表名、列名和条件(主键、分页等)。
以上 SQL 语句模板中的变量均通过 MyBatis-Plus 代码生成器中的变量替换功能实现,具体实现方式可以参考 MyBatis-Plus 代码生成器的源代码。
阅读全文