Mybatis-CRUD
阿新 • • 發佈:2020-08-28
CRUD
目錄
1. namespace
namespace中的包名要和Dao/Mapper介面的包名一致!
2. select
選擇,查詢語句
1. id
就是對應的namespace中的方法名
2. resultType
SQL語句執行的返回值
3. parameterType
引數型別(方法的引數)
其中,基本的引數型別直接寫,而自定義的物件的型別需要寫完整的包名以及類路徑
只有一個基本引數型別的情況下,可以直接在sql中取到!
多個引數用Map或者註解!
3. CRUD
UserMapper介面
package com.wang.dao; import com.wang.pojo.User; import java.util.List; public interface UserMapper { //查詢全部使用者 List<User> getUserList(); //根據ID查詢使用者 User getUserById(int id); //insert一個使用者 int addUser(User user); //修改使用者 int updateUser(User user); //刪除一個使用者 int deleteUser(int id); }
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace=繫結一個對應的Dao/Mapper介面--> <mapper namespace="com.wang.dao.UserMapper"> <!--select查詢語句, id=方法的名字, resultType=返回的型別,寫集合的泛型--> <select id="getUserList" resultType="com.wang.pojo.User"> select * from mybatis.user; </select> <select id="getUserById" parameterType="int" resultType="com.wang.pojo.User"> select * from mybatis.user where id = #{id}; </select> <!--insert,物件中的屬性可以直接取出來--> <insert id="addUser" parameterType="com.wang.pojo.User"> insert into mybatis.user (id, name, pwd) VALUES (#{id},#{name},#{pwd}); </insert> <!--update--> <update id="updateUser" parameterType="com.wang.pojo.User"> update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id}; </update> <!--delete--> <delete id="deleteUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete> </mapper>
測試類
package com.wang.dao;
import com.wang.pojo.User;
import com.wang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
//第一步: 獲取sqlSession物件
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//第一步: 獲取sqlSession物件
sqlSession = MybatisUtils.getSqlSession();
//方式一: 執行SQL
//面向介面程式設計,向getMapper傳遞一個對應的介面的class,用反射
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//從得到的mapper物件中取出對應的方法,不用關心其實現
List<User> userList = userMapper.getUserList();
//方法二:
//List<User> userList = sqlSession.selectList("com.wang.dao.UserDao.getUserList");
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//關閉sqlSession
sqlSession.close();
}
}
@Test
public void testGetUserById() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
//增刪改必須要提交事務!
@Test
public void testAddUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4, "王麻子", "123456789");
int num = mapper.addUser(user);
if (num > 0) {
System.out.println("插入成功!");
}
//提交事務
sqlSession.commit();
sqlSession.close();
}
@Test
public void TestUpdateUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4, "趙六", "987654");
int num = mapper.updateUser(user);
if (num > 0) {
System.out.println("修改成功!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void TestDeleteUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int num = mapper.deleteUser(4);
if (num > 0) {
System.out.println("刪除成功!");
}
sqlSession.commit();
sqlSession.close();
}
}
4. 注意點
1. 增刪改一定要提交事務
sqlSession.commit()
2. xml中的變數寫法為#{}
{}中寫pojo對應的變數名
3. 標籤不要匹配錯
4. 名稱空間路徑寫.
5. resource繫結mapper需要使用路徑,寫/
6. 程式配置檔案必須符合規範
7. maven資源沒有匯出的問題
由於Maven是約定大於配置,為了讀取到不在resource目錄下的資源,需要在Maven的pom.xml中加入如下的程式碼
父工程和子工程都要加!
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
5. 萬能的Map
有時候,資料庫的欄位過多而要修改的欄位很少的時候,使用Map ==> 傳遞一個Map物件給對應的方法,鍵值對為String,Object,分別為欄位名和要修改的引數的值
UserMap介面
//萬能的Map
int addUser2(Map<String,Object> map);
UserMap.xml
其中,欄位名可以和資料庫中的欄位不一致,在使用時使用定義的欄位名!
引數型別寫map!
<!--使用map進行insert操作-->
<insert id="addUser2" parameterType="map">
insert into mybatis.user (id, name, pwd) VALUES (#{userId},#{userName},#{password});
</insert>
測試類
//增刪改必須要提交事務!
@Test
public void testAddUser2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put("userId", 4);
map.put("userName", "王麻子");
map.put("password", "123456789");
int num = mapper.addUser2(map);
if (num > 0) {
System.out.println("插入成功!");
}
//提交事務
sqlSession.commit();
sqlSession.close();
}
6. 模糊查詢
UserMap介面
//模糊查詢
List<User> getUserLike(String value);
UserMap.xml
<!--模糊查詢-->
<select id="getUserLike" resultType="com.wang.pojo.User">
select * from mybatis.user where name like #{value}
</select>
測試類
Java程式碼執行的時候傳遞萬用字元%,這樣比較安全
不要在sql中拼接%,非要拼接的話要寫"%",這樣可以防止sql注入
//模糊查詢
@Test
public void testGetUserLike() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUserLike("%王%");
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}