0
点赞
收藏
分享

微信扫一扫

MyBatis 动态 SQL

凌得涂 2022-05-02 阅读 55

MyBatis 动态 SQL

public class User{
 private Integer id;
 private String username;
 private String password;
 private Integer age; }

通过 id 和 username 查询 User。
通过 username 和 password 查询 User。
通过 password 和 age 查询 User。

在 UserRepository 中定义上述 3 个方法

public User findByUser1(User user);
public User findByUser2(User user);
public User findByUser3(User user);

UserRepository.xml

<select id="findByUser1" parameterType="User" resultType="User">
 select * from t_user where id = #{id} and username = #{username}
</select> <select id="findByUser2" parameterType="User" resultType="User">
 select * from t_user where username = #{username} and password = #{password}
</select> <select id="findByUser3" parameterType="User" resultType="User">
 select * from t_user where password = #{password} and age = #{age}
</select>

MyBatis 动态 SQL,SQL 不是固定的,可以根据不同的参数信息来动态拼接不同的 SQL,以适应不同的需求。
1、创建实体类

public class User{
 private Integer id;
 private String username;
 private String password;
 private Integer age; }

2、Mapper.java

package com.southwind.repository;
import com.southwind.entity.User;
public interface UserRepository {
 public User findByUser(User user);
}

3、Mapper.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.southwind.repository.UserRepository">
 <select id="findByUser" parameterType="com.southwind.entity.User"
resultType="com.southwind.entity.User">
 select * from t_user where
 id = #{id} and username = #{username}
 and password = #{password} and age = #{age}
 </select>
</mapper>

4、config.xml 注册 Mapper.xml

<mappers>
 <mapper resource="com/southwind/repository/UserRepository.xml"/>
</mappers>

5、测试

package com.southwind.test;
import com.southwind.entity.User;
import com.southwind.repository.UserRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Test7 {
 public static void main(String[] args) {
 InputStream inputStream =
Test2.class.getClassLoader().getResourceAsStream("config.xml");
 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
 SqlSessionFactory sqlSessionFactory =
sqlSessionFactoryBuilder.build(inputStream);
 SqlSession sqlSession = sqlSessionFactory.openSession();
 UserRepository userRepository =
sqlSession.getMapper(UserRepository.class);
 User user = new User();
// user.setId(2);
 user.setUsername("lisi");
 user.setPassword("000");
 user.setAge(5);
 User user2 = userRepository.findByUser(user);
 System.out.println(user2);
 }
}

动态 SQL

if
where

<?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.southwind.repository.UserRepository">
 <select id="findByUser" parameterType="com.southwind.entity.User"
resultType="com.southwind.entity.User">
 select * from t_user
 <where>
 <if test="id!=null">
 id = #{id}
 </if>
 <if test="username!=null">
 and username = #{username}
 </if>
 <if test="password!=null">
 and password = #{password}
 </if>
 <if test="age!=null">
 and age = #{age}
 </if>
 </where>
 </select>
</mapper>

choose、when

<select id="findByUser" parameterType="com.southwind.entity.User"
resultType="com.southwind.entity.User">
 select * from t_user
 <where>
 <choose>
 <when test="id!=null">
 id = #{id}
 </when>
 <when test="username!=null">
 and username = #{username}
 </when>
 <when test="password!=null">
 and password = #{password}
 </when>
 <when test="age!=null">
 and age = #{age}
 </when>
 </choose>
 </where>
</select>

trim
通过设置 prefix 和 suffix 参数来完成使用的

<select id="findByUser" parameterType="com.southwind.entity.User"
resultType="com.southwind.entity.User">
 select * from t_user
 <trim prefix="where" prefixOverrides="and">
 <if test="id!=null">
 id = #{id}
 </if>
 <if test="username!=null">
 and username = #{username}
 </if>
 <if test="password!=null">
 and password = #{password}
 </if>
 <if test="age!=null">
 and age = #{age}
 </if>
 </trim>
</select>

set
set 标签用于 Update 操作,会自动根据参数选择生成 SQL 语句。

Mapper.java

package com.southwind.repository;
import com.southwind.entity.User;
public interface UserRepository {
 public int update(User users);
}

Mapper.xml

<update id="update" parameterType="com.southwind.entity.User">
 update t_user
 <set>
 <if test="username!=null">
 username = #{username},
 </if>
 <if test="password!=null">
 password = #{password},
 </if>
 <if test="age!=null">
 age = #{age}
 </if>
 </set>
 where id = #{id}
</update>
package com.southwind.test;
import com.southwind.entity.User;
import com.southwind.repository.UserRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Test7 {
 public static void main(String[] args) {
 InputStream inputStream =
Test2.class.getClassLoader().getResourceAsStream("config.xml");
 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
 SqlSessionFactory sqlSessionFactory =
sqlSessionFactoryBuilder.build(inputStream);
 SqlSession sqlSession = sqlSessionFactory.openSession();
 UserRepository userRepository =
sqlSession.getMapper(UserRepository.class);
 User user = new User();
 user.setId(2);
 user.setUsername("tom");
 user.setAge(3);
 userRepository.update(user);
 sqlSession.commit();
 }
}
举报

相关推荐

0 条评论