再温MyBatis(六、注記と五:注記ベースの動的SQL)
UserInfoMapper.javaファイルのコード:
UserInfoDynaSqlProvider.javaファイルのコード:
public interface UserInfoMapper {
/**
* SQL ===
*/
@SelectProvider(type = UserInfoDynaSqlProvider.class, method = "selectWithParam")
List<UserInfo> findUserInfoByCondWithDynaSQL(Map<String, Object> param);
@InsertProvider(type = UserInfoDynaSqlProvider.class, method = "insertUserInfo")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertUserInfoWithDynaSQL(UserInfo userInfo);
@UpdateProvider(type = UserInfoDynaSqlProvider.class, method = "updateUserInfo")
int updateUserInfoWithDynaSQL(UserInfo userInfo);
@DeleteProvider(type = UserInfoDynaSqlProvider.class, method = "deleteUserInfo")
int deleteUserInfoWithDynaSQL(Map<String, Object> param);
/**
* SQL ===
*/
}
UserInfoDynaSqlProvider.javaファイルのコード:
package com.springmvc.mapper;
import com.springmvc.pojo.UserInfo;
import org.apache.ibatis.jdbc.SQL;
import java.util.Map;
/**
* @author YuusukeUchiha
* @date 2020/8/19 19:57
* @ide IntelliJ IDEA
*/
public class UserInfoDynaSqlProvider {
public String selectWithParam(Map<String, Object> param) {
return new SQL() {
{
SELECT("*");
FROM("user");
if (param.get("id") != null) {
WHERE("id = #{id}");
}
if (param.get("userName") != null) {
// WHERE("userName = #{userName}");
WHERE("userName like concat(concat('%', #{userName}), '%')");
}
if (param.get("password") != null) {
WHERE("password = #{password}");
}
}
}.toString();
}
public String insertUserInfo(UserInfo userInfo) {
return new SQL() {
{
INSERT_INTO("user");
if (userInfo.getUserName() != null) {
VALUES("userName", "#{userName}");
}
if (userInfo.getPassword() != null) {
VALUES("password", "#{password}");
}
}
}.toString();
}
public String updateUserInfo(UserInfo userInfo) {
return new SQL() {
{
UPDATE("user");
if (userInfo.getUserName() != null) {
SET("userName = #{userName}");
}
if (userInfo.getPassword() != null) {
SET("password = #{password}");
}
WHERE("id = #{id}");
}
}.toString();
}
public String deleteUserInfo(Map<String, Object> param) {
return new SQL() {
{
DELETE_FROM("user");
if (param.get("id") != null) {
WHERE("id = #{id}");
}
if (param.get("userName") != null) {
WHERE("userName = #{userName}");
}
if (param.get("password") != null) {
WHERE("password = #{password}");
}
}
}.toString();
}
}
/**
* SQL ===
*/
// @Test
public void testFindUserInfoByCondWithDynaSQL() {
UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
Map<String, Object> param = new HashMap();
param.put("userName", " ");
List<UserInfo> userInfoList = userInfoMapper.findUserInfoByCondWithDynaSQL(param);
for (UserInfo userInfo : userInfoList) {
System.out.println(userInfo.toString());
}
}
// @Test
public void testInsertUserInfoWithDynaSQL() {
UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
UserInfo userInfo = new UserInfo();
userInfo.setUserName(" ");
userInfo.setPassword("123456");
int result = userInfoMapper.insertUserInfoWithDynaSQL(userInfo);
if (result > 0) {
System.out.println(" , id :" + userInfo.getId());
} else {
System.out.println(" ");
}
}
// @Test
public void testUpdateUserInfoWithDynaSQL() {
UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
// Map
Map<String, Object> map = new HashMap<>();
map.put("id", "14");
// “testFindUserInfoByCond” , id 14
System.out.println();
// List userInfoList = userInfoMapper.findUserInfoByCondWithDynaSQL(map);
UserInfo userInfo = userInfoMapper.findUserInfoByCondWithDynaSQL(map).get(0);
// userInfoList.get(0).setPassword("654654");
userInfo.setPassword("654987");
// int result = userInfoMapper.updateUserInfoWithDynaSQL(userInfoList.get(0));
int result = userInfoMapper.updateUserInfoWithDynaSQL(userInfo);
if (result > 0) {
// System.out.println(" , :" + userInfoList.get(0).getPassword());
System.out.println(" , :" + userInfo.getPassword());
} else {
System.out.println(" ");
}
}
@Test
public void testDeleteUserInfoWithDynaSQL() {
UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
// Map
Map<String, Object> map = new HashMap<>();
map.put("id", "88");
// map.put("id", "14");
int result = userInfoMapper.deleteUserInfoWithDynaSQL(map);
if (result > 0) {
System.out.println(" ");
} else {
System.out.println(" ");
}
}
/**
* SQL ===