---
# System prepended metadata

title: 增刪改查(CRUD)
tags: [Mybatis-基礎]

---

# 增刪改查(CRUD)
###### tags: `Mybatis-基礎`

### 1.namespace
namespace中的包名要和Dao/Mapper接口的包名一致

### 2.Selcet
選擇、查詢語句
* id：就是對應的namespace中的方法名
* resultType：Sql語句執行的返回值 
* parameterType：參數類型

1. 編寫接口
```java=
//查詢全部用戶
    List<User> getUserList();
```
2. 編寫對應的mapper中的sql語句
```xml=
<!--select查詢語句-->
    <select id="getUserList" resultType="com.kuang.pojo.User">
        select * from mybatis.user
    </select>
```
3. 測試
```java=
  @Test
    public void getUserById(){
        //獲取執行Sql對象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //相當於UserMapper mapper = new UserMapperImpl();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        User user = mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();
    }
```

```java=
   //增刪改需要提交事務
    @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

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

        int res = mapper.addUser(new User(6, "哈哈", "12333"));
        if(res > 0){
            System.out.println("插入成功");
        }

        //提交事務
        sqlSession.commit();
        sqlSession.close();
    }
```
### 3.Insert
```xml=
<!--對象中的屬性，可以直接取出來-->
    <insert id="addUser" parameterType="com.kuang.pojo.User">
        insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>
```
### 4.Update
```xml=
    <update id="updateUser" parameterType="com.kuang.pojo.User">
        update mybatis.user set name = #{name},pwd = #{pwd} where id = #{id};
    </update>
```
### 5.Delete
```xml=
    <delete id="deleteUser" parameterType="com.kuang.pojo.User">
        delete from mybatis.user where id = #{id};
    </delete>
```

#### 注意點：
如果要改變數據庫，例如增刪改，需要再最後添加        sqlSession.commit();

## 分析錯誤
* 標籤不要寫錯：針對不同sql語句給對應標籤
* resource綁定mapper需要使用路徑(/)
` <mapper resource="com/kuang/dao/UserMapper.xml"/>`
* 報錯時的閱讀方式，最上方是提供錯誤類型，但具體錯誤位置與問題，要看下方(由後往後讀)
![](https://i.imgur.com/edQO9Vl.png)
* 程序配置文件必須符合規範
* 報空指針異常的原因：因為這種寫法，會讓兩個sqlSessionFactory獨立開來，而return返回的是最上方的sqlSessionFactory，但此時的sqlSessionFactory還沒有放入resource創建，因此為空
![](https://i.imgur.com/pE27oqd.png)
**正確寫法：把下方的類名(SqlSessionFactory)去掉，就能讓兩個sqlSessionFactory變為相同一個，訊息也會同步**
* 輸出的xml文件中出現中文亂碼問題
* maven文件沒有導出的問題
加入這段代碼到pom.xml
```xml=
<!--在build中配置resource，來防止我們資源導出失敗的問題-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
```


