Mybatis各种查询接口使用详解
Mybatis是一款优秀的持久层框架,提供了不同的查询接口来满足各种复杂查询需求。本文将详细讲解Mybatis各种查询接口的使用方法。
基本查询
select
使用select查询数据非常简单,只需要在Mapper接口定义对应的方法,返回值为查询结果即可。
<!-- Mapper.xml -->
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
// Mapper.java
public interface UserMapper {
User selectUserById(int id);
}
insert
同样,使用insert插入数据也非常简单,只需在Mapper接口定义对应的方法,方法参数为需要插入的数据。
<!-- Mapper.xml -->
<insert id="insertUser" parameterType="User">
INSERT INTO user (username, password)
VALUES (#{username}, #{password})
</insert>
// Mapper.java
public interface UserMapper {
void insertUser(User user);
}
update
使用update更新数据同样非常简单,只需在Mapper接口定义对应的方法,方法参数为需要更新的数据。
<!-- Mapper.xml -->
<update id="updateUser" parameterType="User">
UPDATE user SET username = #{username}, password = #{password}
WHERE id = #{id}
</update>
// Mapper.java
public interface UserMapper {
void updateUser(User user);
}
delete
使用delete删除数据同样非常简单,只需在Mapper接口定义对应的方法,方法参数为需要删除的数据。
<!-- Mapper.xml -->
<delete id="deleteUser" parameterType="User">
DELETE FROM user WHERE id = #{id}
</delete>
// Mapper.java
public interface UserMapper {
void deleteUser(User user);
}
动态SQL查询
动态SQL可以根据不同的条件生成不同的SQL语句,Mybatis提供了多种方式实现动态SQL。
if
使用if可以根据条件判断是否需要拼接对应的SQL语句。
<!-- Mapper.xml -->
<select id="selectUserByUsernameAndPassword" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="username != null and username != ''">
AND username = #{username}
</if>
<if test="password != null and password != ''">
AND password = #{password}
</if>
</select>
// Mapper.java
public interface UserMapper {
List<User> selectUserByUsernameAndPassword(User user);
}
choose-when-otherwise
choose-when-otherwise结构相当于Java的switch语句,根据不同的条件拼装不同的SQL语句。
<!-- Mapper.xml -->
<select id="selectUserByOptions" resultType="User">
SELECT * FROM user
WHERE 1=1
<choose>
<when test="id != null">
AND id = #{id}
</when>
<when test="username != null and username != ''">
AND username = #{username}
</when>
<when test="email != null and email != ''">
AND email = #{email}
</when>
<otherwise>
AND 1=0
</otherwise>
</choose>
</select>
// Mapper.java
public interface UserMapper {
List<User> selectUserByOptions(User user);
}
trim-where
trim-where结构可以将WHERE关键字和AND、OR等连接词拼接在一起。
<!-- Mapper.xml -->
<select id="selectUserByOptions" resultType="User">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="id != null">
AND id = #{id}
</if>
<if test="username != null and username != ''">
AND username = #{username}
</if>
<if test="email != null and email != ''">
AND email = #{email}
</if>
</trim>
</select>
// Mapper.java
public interface UserMapper {
List<User> selectUserByOptions(User user);
}
分页查询
使用分页查询可以优化查询速度,提升用户体验。Mybatis提供了多种分页查询方式。
RowBounds
通过RowBounds可以实现简单的分页查询,需要在Mapper接口定义对应的方法,方法参数为RowBounds对象。
<!-- Mapper.xml -->
<select id="selectUserByPage" resultType="User">
SELECT * FROM user LIMIT #{offset},#{pageSize}
</select>
// Mapper.java
public interface UserMapper {
List<User> selectUserByPage(RowBounds rowBounds);
}
// 代码示例
int currentPage = 1;
int pageSize = 10;
int offset = (currentPage - 1) * pageSize;
RowBounds rowBounds = new RowBounds(offset, pageSize);
userMapper.selectUserByPage(rowBounds);
PageHelper
使用PageHelper可以实现更加强大的分页查询功能,只需要添加相应的依赖,配置对应的插件即可。
<!-- pom.xml -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
</dependency>
<!-- Mybatis配置文件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
// 代码示例
int currentPage = 1;
int pageSize = 10;
PageHelper.startPage(currentPage, pageSize);
userMapper.selectUserByPage();
List<User> userList = PageHelper.getResult();
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis各种查询接口使用详解 - Python技术站