【Mybatis從0到1-003】mybatis框架及簡單入門程序是解決本章內容的關鍵,本章節主要是實現模糊查詢、更新、刪除、添加用戶。實現步驟與之前一章完全一樣,這裏再傻瓜式的走一遍流程,加深記憶與理解。
只需要兩步,第一,修改映射文件User.xml;第二,書寫程序邏輯代碼。
【1】首先,實現模糊查詢用戶信息。
【1-1】修改映射文件,加入如下代碼:
<!-- 根據用戶名稱模糊查詢用戶信息,可能返回多條
resultType:指定就是單條記錄所映射的java對象 類型
${}:表示拼接sql串,將接收到參數的內容不加任何修飾拼接在sql中。
使用${}拼接sql,引起 sql注入
${value}:接收輸入 參數的內容,如果傳入類型是簡單類型,${}中只能使用value
-->
<select id="findUserByUsername" parameterType="java.lang.String" resultType="po.User">
SELECT *FROM user WHERE username like '%${value}%'
</select>
【1-2】添加程序代碼到MyFirstMybatisTest.java文件,加入如下代碼。
public void findUserByUsername() throws Exception {// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠,傳入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("test.findUserByUsername","%小明%");
System.out.println(userList);
// 釋放資源
sqlSession.close();
【1-3】根據之前的創建單元測試的方法,給函數findUserByUsername()創建單元測試,創建好的代碼如下所示:
【1-4】運行findUserByUsername()函數,將會顯示如下信息:
模糊查詢結束。
剩下的更新、刪除和添加的步驟,與上面一模一樣,這裏只貼出關鍵代碼。
【2】更新用戶信息
【2-1】配置映射文件
<!-- 根據id更新用戶
分析:
需要傳入用戶的id
需要傳入用戶的更新信息
parameterType指定user對象,包括 id和更新信息,注意:id必須存在
#{id}:從輸入 user對象中獲取id屬性值
-->
<update id="updateUser" parameterType="po.User">
UPDATE user SET username =#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id =#{id}
</update>
【2-2】添加程序代碼到MyFirstMybatisTest.java文件,加入如下代碼
// 更新用戶信息
public void updateUserTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠,傳入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
//必須設置id
user.setId(29);
user.setUsername("王小二");
user.setBirthday(new Date());
user.setSex("2");
user.setAddress("北京海淀");
sqlSession.update("test.updateUser", user);
// 提交事務
sqlSession.commit();
// 釋放資源
sqlSession.close();
}
【2-3】創建測試單元和運行略【3】刪除用戶信息
【3-1】配置映射文件
<!-- 刪除 用戶
根據id刪除用戶,需要輸入 id值
-->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM user WHERE id=#{id}
</delete>
【3-2】添加程序代碼到MyFirstMybatisTest.java文件,加入如下代碼
public void deleteUserTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠,傳入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUser",30);
// 提交事務
sqlSession.commit();
// 釋放資源
sqlSession.close();
}
【3-3】創建測試單元和運行略【4】添加用戶
【4-1】配置映射文件
<!-- 添加用戶
parameterType:指定輸入 參數類型是pojo(包括 用戶信息)
#{}中指定pojo的屬性名,接收到pojo對象的屬性值,mybatis通過OGNL獲取對象的屬性值
-->
<insert id="insertUser" parameterType="po.User">
<!-- 將插入數據的主鍵返回,返回到user對象中
SELECT LAST_INSERT_ID():得到剛insert進去記錄的主鍵值,只適用與自增主鍵
keyProperty:將查詢到主鍵值設置到parameterType指定的對象的哪個屬性
order:SELECT LAST_INSERT_ID()執行順序,相對於insert語句來說它的執行順序
resultType:指定SELECT LAST_INSERT_ID()的結果類型
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(username,birthday,address) VALUES(#{username},#{birthday},#{address})
</insert>
【4-2】添加程序代碼到MyFirstMybatisTest.java文件,加入如下代碼
public void insertUserTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠,傳入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setSex("1");
user.setUsername("王小軍");
user.setAddress("河南鄭州");
user.setBirthday(new Date());
sqlSession.insert("test.insertUser",user);
//提交事務
sqlSession.commit();
// 獲取用戶信息主鍵
System.out.println(user.getId());
// 釋放資源
sqlSession.close();
}
【4-3】創建測試單元和運行略
上面就是通過mybatis進行用戶信息的增加、刪除、更新、查找的操作,最後做個總結。
【總結】
1. 在映射文件中通過parameterType指定輸入 參數的類型
2. 在映射文件中通過resultType指定輸出結果的類型
3. #{}表示一個佔位符號,#{}接收輸入參數,類型可以是簡單類型、pojo、hashmap。如果接收簡單類型,#{}中可以寫成value或其它名稱。#{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
4. ${}表示一個拼接符號,會導致sql注入,所以不建議使用${}。${}接收輸入參數,類型可以是簡單類型,pojo、hashmap。如果接收簡單類型,${}中只能寫成value。${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
5. selectOne表示查詢出一條記錄進行映射。如果使用selectOne可以實現使用selectList也可以實現(list中只有一個對象)
6. selectList表示查詢出一個列表(多條記錄)進行映射。如果使用selectList查詢多條記錄,不能使用selectOne