MyBatis(三)CRUD
阿新 • • 發佈:2021-08-16
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>