# 增刪改查(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> ```