下面详细讲解"Mybatis Plus使用XML编写动态SQL的超简易方法"。
简介
Mybatis Plus是Mybatis的增强工具,可以用来简化Mybatis的开发。Mybatis Plus默认使用了entity的字段映射表中的字段,但是在实际开发过程中,我们经常会遇到重用entity映射表中同一个字段做不同的条件查询的情况,这时候我们就需要用XML来编写动态SQL。
步骤
以下是实现"Mybatis Plus使用XML编写动态SQL的超简易方法"的步骤:
步骤一:添加Mybatis Plus和Mybatis Plus的代码生成器到项目中
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
步骤二:创建表和实体类
假设现在我们要对一个"user"表进行操作,我们需要先在数据库中创建这个表,并用Java类映射这个表,代码如下:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
public class User {
private Integer id;
private String name;
private String email;
}
步骤三:创建Mapper接口
在Mybatis Plus中,Mapper接口是用来操作实体类对应的表的,通过继承BaseMapper接口就可以完成基本的CRUD操作,代码如下:
public interface UserMapper extends BaseMapper<User> {
}
步骤四:创建userMapper.xml文件
在resources目录下创建mapper文件夹,并在该文件夹下创建userMapper.xml文件,代码如下:
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="selectUsersByNameAndEmail" resultMap="UserResultMap">
SELECT *
FROM user
WHERE 1 = 1
<if test="name != null">
AND name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
</select>
</mapper>
步骤五:在Service层中调用Mapper接口方法
在Service层中调用Mapper接口中的方法时,需要用到@MapperScan注解,在该注解中声明Mapper接口所在的包,代码如下:
@Service
@MapperScan("com.example.demo.mapper")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> selectUsersByNameAndEmail(String name, String email) {
return userMapper.selectUsersByNameAndEmail(name, email);
}
}
步骤六:测试
在Controller层中调用Service层中的方法进行测试,代码如下:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/search")
public List<User> search(@RequestParam(required = false) String name, @RequestParam(required = false) String email) {
return userService.selectUsersByNameAndEmail(name, email);
}
}
至此,我们就完成了"Mybatis Plus使用XML编写动态SQL的超简易方法"的所有步骤。接下来,让我们看两个示例来更好地理解这个过程。
示例
以下是两个使用"Mybatis Plus使用XML编写动态SQL的超简易方法"的示例:
示例一:根据name和email查询用户信息
在userMapper.xml文件中添加selectUsersByNameAndEmail方法,代码如下:
<select id="selectUsersByNameAndEmail" resultMap="UserResultMap">
SELECT *
FROM user
WHERE 1 = 1
<if test="name != null">
AND name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
</select>
在UserMapper接口中声明该方法:
List<User> selectUsersByNameAndEmail(String name, String email);
在UserController中添加search方法:
@GetMapping("/search")
public List<User> search(@RequestParam(required = false) String name, @RequestParam(required = false) String email) {
return userService.selectUsersByNameAndEmail(name, email);
}
通过访问 "/users/search?name=Peter" 可以获取所有name为Peter的用户;通过访问 "/users/search?email=peter@example.com" 可以获取所有email为peter@example.com的用户。
示例二:动态拼接排序字段和排序方式
在userMapper.xml文件中添加selectUsersBySort方法,代码如下:
<select id="selectUsersBySort" resultMap="UserResultMap">
SELECT *
FROM user
WHERE 1 = 1
ORDER BY
<if test="sortField != null">
${sortField} ${sortOrder}
</if>
</select>
在UserMapper接口中声明该方法:
List<User> selectUsersBySort(@Param("sortField") String sortField, @Param("sortOrder") String sortOrder);
在UserController中添加search方法:
@GetMapping("/sort")
public List<User> sort(@RequestParam String field, @RequestParam String order) {
return userService.selectUsersBySort(field, order);
}
通过访问 "/users/sort?field=email&order=desc" 可以获取所有用户按照email字段降序排序的结果。
总结
通过使用"Mybatis Plus使用XML编写动态SQL的超简易方法",我们可以更好地实现复杂的查询,进一步提高开发效率。同时,也要注意动态SQL所带来的安全问题,避免SQL注入攻击。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis Plus使用XML编写动态sql的超简易方法 - Python技术站