1. 程式人生 > 其它 >MyBatis(三)CRUD

MyBatis(三)CRUD

3、CRUD

3.1、namespace

namespace中的包名要和Dao/Mapper介面的包名一致

3.2 select

選擇,查詢語句:

  • id:就是對應的namespace中的方法名(相當於重寫方法)
  • resultType:SQL語句執行的返回值
  • parameterType:引數型別

編寫介面

// 根據ID查詢使用者
    User getUserById(int id);

編寫對應Mapper中sql語句

<select id="getUserById" parameterType="int" resultType="pojo.User">
        select * from mybatis.user where id = #{id}
    </select>

測試

@Test
    public void getUserById(){

        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.getUserById(2);

        System.out.println(userById);

        sqlSession.close();

    }

3.3 insert

注意:增刪改都需要提交事務,mybatis是預設開啟事務的

編寫介面

// insert一個使用者
    // int型別:返回的是受影響的行數
    int addUser(User user);

編寫對應Mapper中的sql語句

<!--    物件中的屬性,可以直接取出來-->
<!--    所以實體類中命名經常與資料庫欄位相同-->
    <insert id="addUser" parameterType="pojo.User">
        insert into mybatis.user(id, name, pwd) VALUES (#{id},#{name},#{pwd})
    </insert>

測試

// 增刪改需要提交事務
    @Test
    public void insert(){

        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.addUser(new User(4,"孫紅雷","123456"));

        // 提交事務
        sqlSession.commit();

        sqlSession.close();

    }

3.4 update

編寫介面

// 修改使用者
    int updateUser(User user);

編寫對應sql語句

<update id="updateUser" parameterType="pojo.User">
        update mybatis.user
        set `name` = #{name},`pwd` = #{pwd}
        where `id` = #{id};
    </update>

測試

@Test
    public void add(){

        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser(new User(2,"王磊","234567"));

        sqlSession.commit();
        sqlSession.close();

    }

3.5 delete

編寫介面

// 刪除使用者
    int deleteUser(int id);

編寫對應sql語句

<delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id}
    </delete>

測試

@Test
    public void delete(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(4);

        sqlSession.commit();
        sqlSession.close();

    }

3.6 錯誤異常排查

  • 標籤不要匹配錯
  • resource繫結mapper,需要使用路徑(不用點用斜槓)
  • 程式配置檔案必須符合規範!
  • NullPointerException,沒有註冊到資源
  • 輸出的xml檔案中存在中文亂碼問題
  • maven資源沒有到處問題

3.7 Map

假設,我們的實體類,或者資料庫中的表,欄位或者引數過多,我們應當考慮使用Map

//萬能的Map
User addUser2(Map<String,Object> map);
<!--傳遞map的key-->
<insert id="addUser2" parameterType="map">
    insert into mybatis.user (id,name,pwd) values (#{userid},#{userName},#{passWord})
</insert>

Map傳遞引數,直接在sql中取出key即可 【parameterType=“Map”】

物件傳遞引數,直接在sql取物件的屬性即可【parameterType=“Object”】

只有一個基本型別引數的情況下,可以直接在sql中取到

多個引數使用Map,或者註解

3.8 實現模糊查詢

<select id="getUserLike" parameterType="String" resultType="pojo.User">
        select * from mybatis.user where `name` like "%"#{value}"%"
    </select>