3、MyBatis初級教程之CURD操作
阿新 • • 發佈:2020-07-20
4、CURD操作
1、查詢
- 根據使用者 Id查詢使用者
- 在UserMapper中新增對應方法
public interface UserMapper {
List<User> getUserList();
List<User> getUserListById(int id);
}
2、在UserMapper.xml中新增Select語句
<select id="getUserListById" resultType="com.feng.pojo.User" parameterType="int"> select * from User where id=#{id} </select>
3、測試類中測試
@Test public void testgetUserById() { SqlSession sqlSession = MyBatisUtil.getSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserListById(1); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
- 根據使用者名稱和密碼獲取使用者
思路一:直接在方法中傳遞引數(註解)
1、在介面方法的引數前加 @Param屬性
2、Sql語句編寫的時候,直接取@Param中設定的值即可,不需要單獨設定引數型別
//通過密碼和名字查詢使用者 User selectUserByNP(@Param("username") String username,@Param("pwd") Stringpwd); /* <select id="selectUserByNP" resultType="com.feng.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select> */
思路二:使用萬能的Map
1、在介面方法中,引數直接傳遞Map;
User selectUserByMP(Map<String,Object> map);
2、編寫sql語句的時候,需要傳遞引數型別,引數型別為map
<select id="selectUserByMP" parameterType="map" resultType="com.deng.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
3、在使用方法的時候,Map的 key 為 sql中取的值即可,沒有順序要求!
Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = mapper.selectUserByNP2(map);
總結:如果引數過多,我們可以考慮直接使用Map實現,如果引數比較少,直接傳遞引數即可
2、增加
1、在UserMapper介面中新增對應的方法
//新增一個使用者
int addUser(User user);
2、在UserMapper.xml中新增insert語句
<insert id="addUser" parameterType="com.feng.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
3、測試
@Test
public void testAddUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User(5,"王五","zxcvbn");
int i = mapper.addUser(user);
System.out.println(i);
session.commit(); //提交事務,重點!不寫的話不會提交到資料庫
session.close();
}
注意點:增、刪、改操作需要提交事務!
3、更新
我們一般使用update標籤進行更新操作,它的配置和select標籤差不多!
需求:修改使用者的資訊
1、同理,編寫介面方法
//修改一個使用者
int updateUser(User user);
2、編寫對應的配置檔案SQL
<update id="updateUser" parameterType="com.feng.pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
3、測試
@Test
public void testUpdateUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
user.setPwd("asdfgh");
int i = mapper.updateUser(user);
System.out.println(i);
session.commit(); //提交事務,重點!不寫的話不會提交到資料庫
session.close();
}
4、刪除
我們一般使用delete標籤進行刪除操作,它的配置和select標籤差不多!
需求:根據id刪除一個使用者
1、同理,編寫介面方法
//根據id刪除使用者
int deleteUser(int id);
2、編寫對應的配置檔案SQL
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
3、測試
@Test
public void testDeleteUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
int i = mapper.deleteUser(5);
System.out.println(i);
session.commit(); //提交事務,重點!不寫的話不會提交到資料庫
session.close();
}
小結:
- 所有的增刪改操作都需要提交事務!
- 介面所有的普通引數,儘量都寫上@Param引數,尤其是多個引數時,必須寫上!
- 有時候根據業務的需求,可以考慮使用map傳遞引數!
- 為了規範操作,在SQL的配置檔案中,我們儘量將Parameter引數和resultType都寫上!
思考題
模糊查詢like語句該怎麼寫?
第1種:在Java程式碼中新增sql萬用字元。
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
第2種:在sql語句中拼接萬用字元,會引起sql注入
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>