# Map和模糊查詢拓展
###### tags: `Mybatis-基礎`
假設,我們的實體類,或者數據庫中的表、字段或者參數過多,我們應當考慮使用Map!
#### 例子1:add
```java=
//萬能的Map
int addUser2(Map<String,Object> map);
```
```xml=
<!--對象中的屬性,可以直接取出來,傳遞map的key
-->
<insert id="addUser2" parameterType="map">
insert into mybatis.user(id,name,pwd) values (#{userid},#{userName},#{passWord});
</insert>
```
```java=
//增刪改需要提交事務
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("userid",5);
map.put("userName","hello");
map.put("passWord","222333");
mapper.addUser2(map);
//提交事務
sqlSession.commit();
sqlSession.close();
}
```

使用Map方式,就不用每個參數都輸入,可以自行選擇參數輸入
```java=
map.put("userid",8);
map.put("passWord","222333");
```

#### 例子2:查詢
```java=
//用Map來查詢
User getUserById2(Map<String,Object> map);
```
```xml=
<select id="getUserById2" parameterType="map" resultType="com.kuang.pojo.User">
select * from mybatis.user where id = #{helloId} and name = #{name};
</select>
```
```java=
@Test
public void getUserById2(){
//獲取執行Sql對象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//相當於UserMapper mapper = new UserMapperImpl();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("helloId",2);
User userById2 = mapper.getUserById2(map);
System.out.println(userById2);
sqlSession.close();
}
```
### 參數傳遞整理
* Map傳遞參數,直接在Sql中取出key即可-->parameterType="map"
* 對象傳遞參數,直接在Sql中取對象屬性即可-->parameterType="Objectt"
* 只有一個基本類型參數的情況下,可以直接在sql中取到-->可以不寫
* 多個參數用Map,**或者註解**
### 模糊查詢怎麼寫?
1. java代碼執行的時候,傳遞通配符%%
```java
List<User> userList = mapper.getUserLike("%李%");
```
2. 在sql拼接中使用通配符
```xml=
select * from mybatis.user where name like "%"#{value}"%"
```
#### 例子
```java=
List<User> getUserLike(String value);
```
```xml=
<select id="getUserLike" resultType="com.kuang.pojo.User">
<!--在模糊前後用"%"夾住,避免用戶使用其他寫法導致查詢失效 -->
select * from mybatis.user where name like "%"#{value}"%"
</select>
```
```java=
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserLike("李");
for(User user : userList){
System.out.println(user);
}
sqlSession.close();
}
```
