mybatis-plus的xml的写法
时间: 2023-08-07 20:09:10 浏览: 206
Mybatis-Plus的XML写法与Mybatis是类似的,在XML文件中定义SQL语句。但相较于Mybatis,Mybatis-Plus在XML中使用更加简单的标签,例如使用`<select>`代替`<select id="">`,同时也支持一些额外的标签来简化SQL编写,例如`<if>`、`<set>`、`<where>`等。以下是一个使用Mybatis-Plus的XML示例:
```
<!-- 定义查询语句 -->
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 定义更新语句 -->
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="name != null">name=#{name},</if>
<if test="age != null">age=#{age},</if>
</set>
WHERE id=#{id}
</update>
```
注意,以上只是一个简单的示例,实际使用中可能需要根据具体的需求进行SQL编写。
相关问题
mybatis-plus mapper.xml写法
### MyBatis-Plus 中 `mapper.xml` 文件的正确写法
在使用 MyBatis-Plus 进行项目开发时,虽然该框架提供了许多便捷的功能,但在某些复杂业务逻辑下仍然需要手写 SQL 来满足需求。对于这些情况下的 `mapper.xml` 编写有特定的方式。
#### 基本结构与命名空间声明
每一个 Mapper XML 需要有一个唯一的命名空间(namespace),它通常是对应的 DAO 接口全限定名:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.UserDao">
<!-- SQL 映射语句 -->
</mapper>
```
上述代码片段展示了如何定义一个基本的映射文件并指定其关联的 Java 接口[^1]。
#### CRUD 操作示例
当利用 MyBatis-Plus 提供的基础功能不足以覆盖所有场景时,则可以在 `mapper.xml` 中补充自定义查询方法。下面是一个简单的增删改查例子:
##### 插入记录
```sql
<insert id="insertSelective" parameterType="com.example.entity.User">
INSERT INTO user (
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null"> name,</if>
<if test="age != null"> age,</if>
</trim>
<trim prefix="VALUES (" suffix=")">
<if test="name != null"> #{name},</if>
<if test="age != null"> #{age},</if>
</trim>
)
</insert>
```
此段落描述了动态字段插入语法,允许仅传递必要的参数给数据库表中对应列赋值。
##### 更新记录
```sql
<update id="updateByPrimaryKeySelective" parameterType="com.example.entity.User">
UPDATE user
<set>
<if test="name != null">name = #{name},</if>
<if test="age != null">age = #{age}</if>
</set>
WHERE id = #{id}
</update>
```
这里通过 `<set>` 和条件判断标签实现了部分更新操作,即只修改传入实体对象中有值的部分属性。
##### 删除记录
```sql
<delete id="deleteById" parameterType="java.lang.Long">
DELETE FROM user WHERE id=#{id}
</delete>
```
这段删除命令非常直观,直接指定了主键作为唯一标识符来进行单条目移除动作。
##### 查询记录
```sql
<select id="selectByCondition" resultType="com.example.entity.User">
SELECT * FROM user
<where>
<if test="name != null and name != '' "> AND name LIKE CONCAT('%',#{name},'%')</if>
<if test="minAge != null">AND age >= #{minAge} </if>
<if test="maxAge != null">AND age <= #{maxAge}</if>
</where>
</select>
```
以上选择性检索语句能够依据不同条件组合灵活获取符合条件的结果集,并支持模糊匹配等功能特性。
#### 使用 IPage 实现分页查询
为了更好地处理大数据量的情况,可以借助于 MyBatis-Plus 自带的支持来完成高效分页读取工作:
```sql
<select id="selectPageVo" resultType="com.example.vo.UserVO">
SELECT u.*, d.dept_name AS deptName
FROM user u LEFT JOIN department d ON u.dept_id=d.id
<where>
<if test="queryParam.name!=null and queryParam.name!=''">and u.name like concat('%',#{queryParam.name},'%')</if>
<if test="queryParam.age!=null">and u.age=#{queryParam.age}</if>
</where>
</select>
```
配合上文提到过的 `IPage<T>` 类型,在调用此类 Select 方法前先构建好 Page 对象即可轻松获得带有总数统计信息以及当前页面数据列表在内的完整响应体[^4]。
#### 结合拦截器优化性能
除了常规的操作外,还可以引入诸如 `MybatisPlusInterceptor` 等组件进一步提升系统的稳定性和扩展能力。例如设置全局配置项、注册插件等措施均有助于改善整体表现效果[^3]。
mybatis-plus 连表查询 的写法
MyBatis-Plus提供了多种方式来实现连表查询。下面是一些常用的写法示例:
1. 使用@TableName注解实体类,定义表名和字段名的映射关系。
```java
@TableName("user")
public class User {
@TableId("id")
private Long id;
@TableField("username")
private String username;
// 其他字段...
}
@TableName("order")
public class Order {
@TableId("id")
private Long id;
@TableField("user_id")
private Long userId;
// 其他字段...
}
```
2. 使用@JoinQuery注解进行关联查询。
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
@JoinQuery(entity = Order.class, on = "id = user_id")
List<User> selectUserWithOrder();
}
```
3. 使用Wrapper进行连表查询。
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT u.*, o.order_no FROM user u LEFT JOIN `order` o ON u.id = o.user_id")
List<Map<String, Object>> selectUserWithOrder();
}
```
4. 使用XML配置进行连表查询。
```xml
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="userResultMap" type="com.example.entity.User">
<!-- 字段映射 -->
</resultMap>
<select id="selectUserWithOrder" resultMap="userResultMap">
SELECT u.*, o.order_no
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id
</select>
</mapper>
```
这些示例提供了不同的方式来实现MyBatis-Plus的连表查询,你可以根据具体的需求选择合适的方式。
阅读全文
相关推荐













