一.if和where的使用。
1.首先在UserMapper接口中声明一个方法:
package com.by.mapper;import com.by.pojo.User;import java.util.List;/*** <p>Project: mybatis - UserMapper</p>* <p>Powered by scl On 2023-12-22 15:52:05</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public interface UserMapper {/*** 动态SQL的练习 if/where* @return*/List<User> findAllById(User user);}
2.在UserMapper.xml文件中实现这个接口:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper"><!--动态SQL练习 if/where--><select id="findAllById" parameterType="user" resultType="user">select * from user<where><if test="id!=null">and id=#{id}</if><if test="username!=null and username!=''">and username=#{username}</if><if test="sex!=null and sex!=''">and sex=#{sex}</if></where></select>
</mapper>
3.测试类:
/** Copyright (c) 2020, 2023, All rights reserved.**/
package com.by;import com.by.mapper.AccountMapper;
import com.by.mapper.RoleMapper;
import com.by.mapper.UserMapper;
import com.by.pojo.Account;
import com.by.pojo.Role;
import com.by.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** <p>Project: mybatis - MyBatisTest</p>* <p>Powered by scl On 2023-12-18 11:44:53</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class MyBatisTestRole {private InputStream inputStream;private SqlSession sqlSession;@Beforepublic void init() throws IOException {// 加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);// 创建sqlSessionFActorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获得数据的绘画实例sqlSession = sessionFactory.openSession();}/*** 动态SQL if/where** @throws IOException*/@Testpublic void findUserById() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("李星云");user.setSex("男");user.setId(42);List<User> userList = userMapper.findAllById(user);for (User user1 : userList) {System.out.println(user1);}}@Afterpublic void close() throws IOException {inputStream.close();sqlSession.close();}}
4.结果展示:
二. set的使用
1.首先在UserMapper接口中声明一个方法:
package com.by.mapper;import com.by.pojo.User;import java.util.List;/*** <p>Project: mybatis - UserMapper</p>* <p>Powered by scl On 2023-12-22 15:52:05</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public interface UserMapper {/*** 动态SQL的练习 set*/void updateUser(User user);}
2.在UserMapper.xml文件中实现这个方法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper"><!--动态SQL练习 set--><update id="updateUser" parameterType="user">update user<set><if test="username!=null and username!=''">username=#{username},</if><if test="sex!=null and sex!=''">sex=#{sex},</if></set>where id=#{id}</update></mapper>
3.实现类:
/** Copyright (c) 2020, 2023, All rights reserved.**/
package com.by;import com.by.mapper.AccountMapper;
import com.by.mapper.RoleMapper;
import com.by.mapper.UserMapper;
import com.by.pojo.Account;
import com.by.pojo.Role;
import com.by.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** <p>Project: mybatis - MyBatisTest</p>* <p>Powered by scl On 2023-12-18 11:44:53</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class MyBatisTestRole {private InputStream inputStream;private SqlSession sqlSession;@Beforepublic void init() throws IOException {// 加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);// 创建sqlSessionFActorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获得数据的绘画实例sqlSession = sessionFactory.openSession();}/*** 动态SQL set** @throws IOException*/@Testpublic void updateUser() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("侯卿");user.setSex("男");user.setId(42);userMapper.updateUser(user);}@Afterpublic void close() throws IOException {inputStream.close();sqlSession.close();}}
4.结果展示:
三.trim的使用
1.首先在User Mapper接口中声明方法:
package com.by.mapper;import com.by.pojo.User;import java.util.List;/*** <p>Project: mybatis - UserMapper</p>* <p>Powered by scl On 2023-12-22 15:52:05</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public interface UserMapper {/*** 动态SQL练习 trim*/void insertUser(User user);
}
2.在UserMapper.xml文件中实现这个方法:、
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper"><!--动态SQL练习 trim--><insert id="insertUser" parameterType="user">insert into user<trim prefix="(" suffix=")" suffixOverrides=","><if test="username!=null and username !=''">username,</if><if test="sex!=null and sex !=''">sex,</if><if test="address!=null and address !=''">address,</if><if test="birthday!=null ">birthday,</if></trim><trim prefix="values(" suffix=")" suffixOverrides=","><if test="username!=null and username !=''">#{username},</if><if test="sex!=null and sex !=''">#{sex},</if><if test="address!=null and address !=''">#{address},</if><if test="birthday!=null ">#{birthday},</if></trim></insert></mapper>
3.实现类:
/** Copyright (c) 2020, 2023, All rights reserved.**/
package com.by;import com.by.mapper.AccountMapper;
import com.by.mapper.RoleMapper;
import com.by.mapper.UserMapper;
import com.by.pojo.Account;
import com.by.pojo.Role;
import com.by.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** <p>Project: mybatis - MyBatisTest</p>* <p>Powered by scl On 2023-12-18 11:44:53</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class MyBatisTestRole {private InputStream inputStream;private SqlSession sqlSession;@Beforepublic void init() throws IOException {// 加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);// 创建sqlSessionFActorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获得数据的绘画实例sqlSession = sessionFactory.openSession();}/*** 动态SQL trim** @throws IOException*/@Testpublic void insertUser() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("侯卿");user.setSex("男");userMapper.insertUser(user);}@Afterpublic void close() throws IOException {inputStream.close();sqlSession.close();}}
4.结果展示:
四.foreach的使用
1.UserMapper接口中定义方法:
/*** 动态SQL练习 foreach*/void deleteUserByIds(@Param("arrIds") Integer[] arrIds);
2.UserMapper.xml文件中实现方法:
<!--动态sql foreach--><delete id="deleteUserByIds" parameterType="int[]">delete from user where id in<foreach collection="arrIds" open="(" close=")" separator="," item="id">#{id}</foreach></delete>
3.测试类:
/*** 动态SQL foreach** @throws IOException*/@Testpublic void deleteUserByIds() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//List<Integer> list=new ArrayList<>();//list.add(41);//list.add(42);//list.add(43);Integer[] integers = new Integer[]{41,42,43};userMapper.deleteUserByIds(integers);}