1. 程式人生 > 其它 >myBatis3 動態SQL

myBatis3 動態SQL

技術標籤:筆記java

動態SQL解釋

MyBatis動態SQL
1、單條件
1.1、版本1
① queryAllUserByUserName

@Test
	public void queryAllUserByUserName() {
		// 獲取SqlSession
		SqlSession session = DBFactory.getSqlSession();
		// 得到mybatis代理介面mapper
		UserMapper mapper = session.getMapper(UserMapper.class);
		// 業務
		//String userName = "唐僧";
List<User> userList = mapper.queryAllUserByUserName(userName); // 遍歷 for (User user2 : userList) { System.out.println(user2); } }

② 2UserMapper

/** 查詢:所有使用者通過使用者名稱稱 */
	public List<User> queryAllUserByUserName(String userName);

③ 3User.xml

<!-- 查詢:所有使用者通過使用者名稱稱 -->
	<
select id="queryAllUserByUserName" resultMap="user" parameterType="java.lang.String"> select * from user where user_name = #{userName} </select>

④ 4條件//String userName = “唐僧”;
控制列印SQL:

 - ==>  Preparing: select * from user where user_name = ? 
 - ==> Parameters:
唐僧(String) - <== Total: 3

⑤ 5條件//String userName = null;
控制列印SQL:

 - ==>  Preparing: select * from user where user_name = ? 
 - ==> Parameters: null
 - <==      Total: 0

1.2、版本2
① UserMapper
/** 查詢:所有使用者通過使用者名稱稱 */

public List<User> queryAllUserByUserName2(@Param("userName") String userName);

② User.xml

<!-- 查詢:所有使用者通過使用者名稱稱 -->
<select id="queryAllUserByUserName2" resultMap="user"
	parameterType="java.lang.String">
	select * from user
	<if test="userName!=null">
		where user_name = #{userName}
	</if>
</select>

③ 條件//String userName = “唐僧”;
控制列印SQL:

 - ==>  Preparing: select * from user where user_name = ? 
 - ==> Parameters: 唐僧(String)
 - <==      Total: 3

④ 條件//String userName = null;
控制列印SQL:

 - ==>  Preparing: select * from user 
 - ==> Parameters: 
 - <==      Total: 17

2、多條件
2.1、和
① UserMapper
/** 查詢:所有使用者通過使用者名稱稱 :多條件 */

public List<User> queryAllUserByUserName3(User user);

② User.xml

<!-- 查詢:所有使用者通過使用者名稱稱 -->
	<!-- 查詢:所有使用者通過使用者名稱稱 -->
	<select id="queryAllUserByUserNameAndUserSex" parameterType="com.model.system.User"
		resultMap="user">
		select * from user where 1=1
		<if test="userName!=null">
			and user_name = #{userName}
		</if>
		<if test="userAge!=null">
			and user_age = #{userAge}
		</if>
	</select>

③ queryAllUserByUserNameAndUserSex

@Test
public void queryAllUserByUserNameAndUserSex() {
	// 獲取SqlSession
	SqlSession session = DBFactory.getSqlSession();
	// 得到mybatis代理介面mapper
	UserMapper mapper = session.getMapper(UserMapper.class);
	// 業務
	User user = new User();
	user.setUserName("唐僧");
	user.setUserAge(32);
	List<User> userList = mapper.queryAllUserByUserNameAndUserSex(user);
	// 遍歷
	for (User user2 : userList) {
		System.out.println(user2);
	}
}

④ 控制列印SQL:

 - ==>  Preparing: select * from user where 1=1 and user_name = ? and user_age = ? 
 - ==> Parameters: 唐僧(String), 32(Integer)
 - <==      Total: 2

2.2、或
① Mapper介面:UserMapper
/** 查詢:所有使用者通過使用者名稱稱 :多條件 */

public List<User> queryAllUserBy_OR_(User user);

② 對映檔案:User.xml


```kotlin
<!-- 查詢:所有使用者通過使用者名稱稱 -->
	<select id="queryAllUserBy_OR_" parameterType="com.model.system.User"
		resultMap="user">
		select * from user where 1=1
		<choose>
			<when test="userName!=null">
				and user_name = #{userName}
			</when>
			<when test="userAge!=null">
				and user_age like #{userAge}
			</when>
		</choose>
	</select>

③ 測試類:queryAllUserBy
	


```java
@Test
	public void queryAllUserBy_OR_() {
		// 獲取SqlSession
		SqlSession session = DBFactory.getSqlSession();
		// 得到mybatis代理介面mapper
		UserMapper mapper = session.getMapper(UserMapper.class);
		// 業務
		User user = new User();
//		user.setUserName("唐僧");
//		user.setUserAge(66);
		List<User> userList = mapper.queryAllUserByUserNameAndUserSex(user);
		// 遍歷
		for (User user2 : userList) {
			System.out.println(user2);
		}
	}

2.3模糊查詢
① 介面:
public List queryUserLikeByUserName(String userName);

② 對映xml檔案

<!-- 模糊查詢 -->
	<select id="queryUserLikeByUserName" parameterType="java.lang.String"
		resultMap="user">
		select * from user where user_name like #{userName}
	</select>

③ 測試類:

/**
	 * <p>
	 * 查詢:通過使用者名稱
	 * </p>
	 * 
	 * @author zlf
	 * @Date 2018年9月18日
	 */
	@Test
	public void queryUserLikeByUserName7() {
		SqlSession session = DBFactory.getSqlSession();
		UserMapper mapper = session.getMapper(UserMapper.class);

		String userName = "%精%";
		List<User> userList = mapper.queryUserLikeByUserName(userName);

		session.commit();
		if (userList != null) {
			for (User user : userList) {
				System.out.println("------------------" + user);
			}
		}
		session.close();
	}

④ 控制檯列印:

- ==>  Preparing: select * from user where user_name like ? 
 - ==> Parameters: %%(String)
 - <==      Total: 2
------------------User [userId=19, userName=蜘蛛精, userAge=32, userSex=, userBrithday=Mon Sep 17 00:00:00 CST 2018]
------------------User [userId=27, userName=白骨精2, userAge=100, userSex=保密, userBrithday=Mon Sep 17 00:00:00 CST 2018]

2.4、模糊查詢-對映檔案中模糊匹配
① 介面:
public List queryUserLikeByUserName8(String userName);

② 對映xml檔案

<!-- 模糊查詢 -->
<select id="queryUserLikeByUserName8" parameterType="java.lang.String"
	resultMap="user">
	select * from user where user_name like '%${value}%' limit
	0,2
</select>

③ 測試類:

@Test
public void queryUserLikeByUserName8() {
	SqlSession session = DBFactory.getSqlSession();
	UserMapper mapper = session.getMapper(UserMapper.class);

	String userName = "花";
	List<User> userList = mapper.queryUserLikeByUserName8(userName);

	session.commit();
	if (userList != null) {
		for (User user : userList) {
			System.out.println("------------------" + user);
		}
	}
	session.close();
}

④ 控制檯列印:

 - ==>  Preparing: select * from user where user_name like '%花%' limit 0,2 
 - ==> Parameters: 
 - <==      Total: 2
------------------User [userId=29, userName=班花, userAge=32, userSex=保密, userBrithday=Tue Sep 18 00:00:00 CST 2018]
------------------User [userId=38, userName=菜花, userAge=null, userSex=, userBrithday=Tue Sep 18 00:00:00 CST 2018]

2.5、新增返回ID[型別int]
① 介面:
public void addUserBackUser_id(User u);

② 對映xml檔案

<!-- 新增使用者:返回插入這條資訊的id -->
	<insert id="addUserBackUser_id" parameterType="com.model.system.User">
		<selectKey keyProperty="userId" order="AFTER" resultType="int">
			SELECT LAST_INSERT_ID()
		</selectKey>
		INSERT INTO user
		(user_id,user_name,user_sex,user_age,user_brithday)
		VALUES
		(#{userId},#{userName},#{userSex},#{userAge},now())
	</insert>

③ 測試類:

④ 控制檯列印:

 - ==>  Preparing: INSERT INTO user (user_id,user_name,user_sex,user_age,user_brithday) VALUES (?,?,?,?,now()) 
 - ==> Parameters: null, 菜花(String),(String), null
 - <==    Updates: 1
 - ==>  Preparing: SELECT LAST_INSERT_ID() 
 - ==> Parameters: 
- <==      Total: 1
返回使用者ID:44
列印物件:User [userId=44, userName=菜花, userAge=null, userSex=, userBrithday=Tue Sep 18 15:13:56 CST 2018]

2.6、新增返回ID[型別UUID]
① 介面:
public void addUserBackUser_id_uuid(User2 u);

② 對映xml檔案

<!-- 新增使用者:返回插入這條資訊的uuid -->
	<insert id="addUserBackUser_id_uuid" parameterType="com.model.system.User2">
		<selectKey keyProperty="userId" order="BEFORE" resultType="String">
			SELECT uuid()
		</selectKey>
		INSERT INTO user2
		(user_id,user_name,user_sex,user_age,user_brithday)
		VALUES
		(#{userId},#{userName},#{userSex},#{userAge},now())
	</insert>

③ 測試類:

@Test
public void addUserBackUser_id_uuid10() {

	SqlSession session = DBFactory.getSqlSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	// 業務
	// a、例項化領域模型
	User2 u = new User2();
	u.setUserName("菜花");
	u.setUserSex("男");
	u.setUserBrithday(new Date());

	mapper.addUserBackUser_id_uuid(u);

	session.commit();
	session.close();
	System.out.println("返回使用者ID:" + u.getUserId());
	System.out.println("列印物件:" + u);
}

④ 控制檯列印:

 - ==>  Preparing: SELECT uuid() 
 - ==> Parameters: 
 - <==      Total: 1
 - ==>  Preparing: INSERT INTO user2 (user_id,user_name,user_sex,user_age,user_brithday) VALUES (?,?,?,?,now()) 
 - ==> Parameters: e4b79324-0c62-1037-bfe2-1de217cbb424(String), 菜花(String),(String), null
 - <==    Updates: 1
返回使用者ID:e4b79324-0c62-1037-bfe2-1de217cbb424
列印物件:User2 [userId=e4b79324-0c62-1037-bfe2-1de217cbb424, userName=菜花, userAge=null, userSex=, userBrithday=Tue Sep 18 15:16:08 CST 2018]

3、多條件
3.1、where元素
① 介面:

public List<User> getAlluser3(User user);

② 對映xml檔案

	<!-- 查詢所有使用者資訊 -->
<select id="getAlluser3" parameterType="com.model.system.User"
	resultMap="user">
	select * from user
	<where>
		<if test="userName!=null">
			and user_name = #{userName}
		</if>
		<if test="userAge!=null">
			and user_age = #{userAge}
		</if>
	</where>
</select>

③ 測試類:

@Test
	public void getAlluser3() {
		SqlSession session = DBFactory.getSqlSession();
		UserMapper mapper = session.getMapper(UserMapper.class);

		User user = new User();
		 user.setUserName("唐僧");
		 user.setUserAge(66);
		List<User> userList = mapper.getAlluser3(user);

		for (User user2 : userList) {
			System.out.println(user2);
		}
	}

④ 控制列印SQL:

 - ==>  Preparing: select * from user WHERE user_name = ? and user_age = ? 
 - ==> Parameters: 唐僧(String), 66(Integer)
 - <==      Total: 1
User [userId=26, userName=唐僧, userAge=66, userSex=, userBrithday=Mon Sep 17 00:00:00 CST 2018]

3.2、trim元素
① 介面:
public List getAlluser4(User user);

② 對映xml檔案

<!-- 查詢所有使用者資訊 -->
<select id="getAlluser4" parameterType="com.model.system.User"
	resultMap="user">
	select * from user
	<trim prefix="WHERE" prefixOverrides="AND |OR ">
		<if test="userName!=null">
			and user_name = #{userName}
		</if>
		<if test="userAge!=null">
			and user_age = #{userAge}
		</if>
	</trim>
</select>

③ 測試類

@Test
public void getAlluser4() {
	SqlSession session = DBFactory.getSqlSession();
	UserMapper mapper = session.getMapper(UserMapper.class);

	User user = new User();
	user.setUserName("唐僧");
	user.setUserAge(66);
	List<User> userList = mapper.getAlluser3(user);

	for (User user2 : userList) {
		System.out.println(user2);
	}
}

④ 控制列印SQL:

 - ==>  Preparing: select * from user WHERE user_name = ? and user_age = ? 
 - ==> Parameters: 唐僧(String), 66(Integer)
 - <==      Total: 1
User [userId=26, userName=唐僧, userAge=66, userSex=, userBrithday=Mon Sep 17 00:00:00 CST 2018]

3.3、set元素
① 介面:
public int updateUser5(User user);

② 對映xml檔案

<update id="updateUser5" parameterType="com.model.system.User">
		update user
		<set>
			<if test="userName!=null"> user_name=#{userName},</if>
			<if test="userAge!=null"> user_age=#{userAge},</if>
		</set>
		where user_id = #{userId}
	</update>

③ 測試類

@Test
public void updateUser5() {
	SqlSession session = DBFactory.getSqlSession();

	UserMapper mapper = session.getMapper(UserMapper.class);

	User user = new User();
	user.setUserId(23);
	user.setUserName("翠華翠華");
	user.setUserAge(18);

	int i = mapper.updateUser5(user);
	session.commit();
	if (i > 0) {
		System.out.println("修改成功!");
	}
	session.close();
}

④ 控制列印SQL:

 - ==>  Preparing: update user SET user_name=?, user_age=? where user_id = ? 
 - ==> Parameters: 翠華翠華(String), 18(Integer), 23(Integer)
 - <==    Updates: 1
修改成功!