1. 程式人生 > 實用技巧 >3.MyBatis-CRUD操作

3.MyBatis-CRUD操作

何為CRUD?

  • 我們通常稱為增刪改查

  • 增加(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete)

3.1 Select語句

第一步:編寫介面

//查詢方法
List<User> fingAll() throws Exception;

User findById(Integer id) throws Exception;

第二步:編寫對應mapper中的sql語句

  • namespace就不多講了名稱空間就是介面對應包名,id就是對應的方法名

  • 注意這裡SQL語句的佔位符#

<!--resultType返回型別-->
<select id="fingAll" resultType="User">
select * from mybatis.user
</select>

<!--通過id查詢一個user物件-->
<select id="findById" parameterType="Integer" resultType="User">
select * from user where id=#{id}
</select>

第三步:測試

@Test
public void testFindAll() throws Exception {
//獲取SqlSession物件
SqlSession session = MyBatisUtil.getSqlSession();

//呼叫SqlSession的getMapper方法 傳入介面位元組碼檔案返回我們的UserMapper物件
UserMapper mapper = session.getMapper(UserMapper.class);

//遍歷集合
List<User> users = mapper.fingAll();
for (User user : users) {
System.out.println(user);
}

//釋放資源
session.close();
}

@Test
public void testFindById() throws Exception {
//獲取SqlSession物件
SqlSession session = MyBatisUtil.getSqlSession();

//呼叫SqlSession的getMapper方法 傳入介面位元組碼檔案返回我們的UserMapper物件
UserMapper mapper = session.getMapper(UserMapper.class);

User user = mapper.findById(5);
System.out.println(user);
//釋放資源
session.close();
}

3.2 Insert語句

第一步:編寫介面

//增加方法
void addUser(User user) throws Exception;

第二步:編寫mapper對應的sql語句

  • parameterType指的是引數型別

<!--新增一個User物件-->
<insert id="addUser" parameterType="User" >
insert into user (name,email,phone,gender,password,age,create_time,update_time) values (#{name},#{email},#{phone},#{gender},#{password},#{age},#{create_time},#{update_time});
</insert>

第三步:編寫測試

  • 這裡需要注意提交事務(不是查詢都需要提交事務)

@Test
public void testAddUser() throws Exception {

User user=new User();
user.setName("楊堦深");
user.setPhone("1111111111");
user.setAge(18);
user.setGender(1);
user.setPassword("123");
user.setEmail("[email protected]");

//獲取SqlSession物件
SqlSession session = MyBatisUtil.getSqlSession();

//呼叫SqlSession的getMapper方法 傳入介面位元組碼檔案返回我們的UserMapper物件
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.addUser(user);
//提交事務
session.commit();
//釋放資源
session.close();
}

3.3 Delete語句

第一步:編寫介面

//刪除方法
void deleteUser(Integer id) throws Exception;

第二步:編寫mapper對應的SQL語句

<!--刪除一個User物件-->
<delete id="deleteUser" parameterType="Integer">
delete from user where id=#{id}
</delete>

第三步:編寫測試

  • 還是提醒最易提交事務

@Test
public void testDeleteUser() throws Exception {
//獲取SqlSession物件
SqlSession session = MyBatisUtil.getSqlSession();

//呼叫SqlSession的getMapper方法 傳入介面位元組碼檔案返回我們的UserMapper物件
UserMapper mapper = session.getMapper(UserMapper.class);

mapper.deleteUser(5);

session.commit();
//釋放資源
session.close();
}

3.4 Update語句

第一步:編寫介面

//修改方法
Integer updateUser(User user)throws Exception;

第二步:編寫mapper對應的SQL語句

<!--修改User欄位-->
<update id="updateUser" parameterType="User" >
update user set name=#{name},email=#{email},phone=#{phone},gender=#{gender},password={password},age=#{age},create_time=#{create_time},update_time=#{update_time} where id=#{id}
</update>

第三步:編寫測試

  • 還是提醒最易提交事務

@Test
public void testUpdateUser() throws Exception {
//獲取SqlSession物件
SqlSession session = MyBatisUtil.getSqlSession();

//呼叫SqlSession的getMapper方法 傳入介面位元組碼檔案返回我們的UserMapper物件
UserMapper mapper = session.getMapper(UserMapper.class);

Integer integer = mapper.updateUser(new User(6,"yanggoushen","[email protected]","1515155111",1,"1111",38,null,null));
System.out.println(integer);

session.commit();
//釋放資源
session.close();
}

3.5 萬能map

  • 什麼時候用萬能map? 為什麼要用萬能map?

  • 當我們實體類,或者資料庫中表的欄位過多,我們就應當使用map

  • map在公司的開發中用的比較多

第一步:編寫介面(我們這裡就直接用map)

//增加方法
void addUser2(Map<String,Object> map) throws Exception;

第二步:編寫mapper對應的sql語句

  • 這裡就給了三個欄位

  • parameterType指定的是引數型別

  • 很明顯用map我們值可以自定義沒有按照資料庫或者實體類進行限定(也就是直接取出key就可以了)

<!--新增一個User物件-->
<insert id="addUser2" parameterType="map" >
insert into user (name,age,email) values (#{isName},#{isAge},#{email});
</insert>

第三步:編寫測試

@Test
public void testAddUserMap() throws Exception {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);

Map<String,Object> map= new HashMap<String, Object>();
map.put("isName","happyday");
map.put("isAge",11);
map.put("email","[email protected]");
mapper.addUser2(map);

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

3.6 模糊查詢

  • 為什麼需要模糊查詢?

  • 主要還是當我們不確定某個資料的時候當然也可以查出資料庫表中具有相同元素的欄位

第一步:編寫介面

//模糊查詢
List<User> findUserLike(String value) throws Exception;

第二步:編寫mapper對應的sql

  • 這裡用到like關鍵字進行模糊查詢

<!--模糊查詢user集合-->
<select id="findUserLike" resultType="User">
select * from user where name like #{value}
</select>

第三步:編寫測試

  • 我這裡是拿百分號(%)佔位 也可以拿(_)下劃線佔位

  • 下劃線是表示佔一個位 百分號表示佔0個或多個位

@Test
public void testFindUserLike() throws Exception {
//獲取SqlSession物件
SqlSession session = MyBatisUtil.getSqlSession();

//呼叫SqlSession的getMapper方法 傳入介面位元組碼檔案返回我們的UserMapper物件
UserMapper mapper = session.getMapper(UserMapper.class);

//遍歷集合
List<User> users = mapper.findUserLike("%y%");
for (User user : users) {
System.out.println(user);
}

//釋放資源
session.close();
}

當然也可以在sql語句中直接使用佔位符寫測試的時候就不用寫了

select * from user where name like "%"#{value}"%"

3.6.1 模糊查詢常用的四種表示

  • %:表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百 分號(%%)表示。

  • _: 表示任意單個字元。匹配單個任意字元,它常用來限制表示式的字元長度語句:

  • [ ]:表示括號內所列字元中的一個(類似正則表示式)。指定一個字元、字串或範圍,要求所匹配物件為它們中的任一個。

select * from user where realname like '[張蔡王]傑'
查詢出“張傑”,“蔡傑”,“王傑”(而不是“張蔡王傑”)
  • [^] :表示不在括號所列之內的單個字元。其取值和 [] 相同,但它要求所匹配物件為指定字元以外的任一個字元。

select * from user where realname like '[^張蔡王]傑'
查詢出不姓“張”,“蔡”,“王”的“林傑”,“趙傑”等