Mybatis如何使用注解優化代碼
entity層代碼不變,因為是優化,所以在dao層新增了一個通過id查詢用戶的功能,現在來演示一下優化前后的代碼對比,希望你們喜歡
entity層代碼不變,dao層中的UserMapper中添加一個方法
/*** 根據id查詢用戶*/User findUserById(int id);
在UserMapper.xml映射文件中添加
<select parameterType='int' resultType='com.vg.entity.User'> select * from user where id = #{id}; </select>
在test層中的test中使用沒有優化的代碼展示
package com.vg.test;import com.vg.dao.UserMapper;import com.vg.entity.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import java.io.InputStream;import java.util.List;/** * 測試類 */public class TestUserMapper {/** * 測試方法:查詢所有學生 * SqlSessionFactoryBuilder => SqlSessionFactory => SqlSession:相當于JDBC中的Connection對象,提供了操作數據庫的CRUD方法 */@Testpublic void testFindAllUsers()throws Exception{// 1. 通過Resources類,加載sqlMapConfig.xml,得到文件輸入流對象// Resources類作用:專門讀取src目錄下的資源文件InputStream in = Resources.getResourceAsStream('sqlMapConfig.xml');// 2. 實例化會話工廠創建類SqlSessionFactoryBuilderSqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3. 通過會話工廠創建類,讀取上面的輸入流,得到會話工廠SqlSessionFactory類SqlSessionFactory sqlSessionFactory = builder.build(in);// 4. 使用SqlSessionFactory對象,創建SqlSession對象// a) 它相當于JDBC中的Connection對象,提供了操作數據庫的CRUD方法// b) 它提供了一個getMapper()方法,獲取接口的實現對象。SqlSession sqlSession = sqlSessionFactory.openSession();// 5. 獲取接口 UserMapper 實現類對象(代理對象)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);System.out.println('userMapper = ' +userMapper);// 6. 執行數據庫的查詢操作,輸出用戶信息List<User> userList = userMapper.findAllUsers();for (User user : userList) {System.out.println(user);}// 7. 關閉會話,釋放資源。sqlSession.close();}@Testpublic void testFindUserById()throws Exception{// 1. 通過Resources類,加載sqlMapConfig.xml,得到文件輸入流對象// Resources類作用:專門讀取src目錄下的資源文件InputStream in = Resources.getResourceAsStream('sqlMapConfig.xml');// 2. 實例化會話工廠創建類SqlSessionFactoryBuilderSqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3. 通過會話工廠創建類,讀取上面的輸入流,得到會話工廠SqlSessionFactory類SqlSessionFactory sqlSessionFactory = builder.build(in);// 4. 使用SqlSessionFactory對象,創建SqlSession對象// a) 它相當于JDBC中的Connection對象,提供了操作數據庫的CRUD方法// b) 它提供了一個getMapper()方法,獲取接口的實現對象。SqlSession sqlSession = sqlSessionFactory.openSession();// 5. 獲取接口 UserMapper 實現類對象(代理對象)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);System.out.println('userMapper = ' +userMapper);// 6. 調用接口的方法根據id查詢用戶User user = userMapper.findUserById(1);System.out.println('user = ' + user);// 7. 關閉會話,釋放資源。sqlSession.close();}}
你會發現在這倆個方法中有很多相似的代碼,每次寫都要重新寫,關鍵是還沒有啥軟用,現在來看看優化之后的代碼
package com.vg.test;import com.vg.dao.UserMapper;import com.vg.entity.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.After;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;/** * 測試類 */public class TestUserMapper {private static SqlSessionFactory sqlSessionFactory =null;private SqlSession sqlSession =null;private UserMapper userMapper =null;// 該方法在所有測試方法執行之前執行1次@BeforeClasspublic static void init() throws Exception {// 1. 通過Resources類,加載sqlMapConfig.xml,得到文件輸入流對InputStream in = Resources.getResourceAsStream('sqlMapConfig.xml');// 2. 實例化會話工廠創建類SqlSessionFactoryBuilder對象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3. 根據字節輸入流獲取SqlSessionFactory對象sqlSessionFactory = builder.build(in);}// 該方法會在每個測試方法執行之前執行1次@Beforepublic void before(){// 4. 獲取SqlSession對象,等價連接對象// true:事務自動提交,false:不自動提交,默認值sqlSession = sqlSessionFactory.openSession();// 5. 創建接口 實現類對象 userMapper = sqlSession.getMapper(UserMapper.class);}/** * 測試方法:查詢所有學生 * SqlSessionFactoryBuilder => SqlSessionFactory => SqlSession:相當于JDBC中的Connection對象,提供了操作數據庫的CRUD方法 */@Testpublic void testFindAllUsers() throws Exception{List<User> userList = userMapper.findAllUsers();for (User user : userList) {System.out.println(user);}}@Testpublic void testFindUserById()throws Exception{// 6. 調用接口的方法根據id查詢用戶User user = userMapper.findUserById(1);System.out.println('user = ' + user);}@Afterpublic void after() {// 7. 關閉會話,釋放資源。sqlSession.close();}}
這樣子是不是比以前的代碼簡單起來了呢?
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章:
1. 用SQL語句查找Access中某表是否存在的小技巧2. oracle數據庫去除重復數據常用的方法總結3. SQL Server使用CROSS APPLY與OUTER APPLY實現連接查詢4. MariaDB的安裝與配置教程5. 如何讓access自動編號從1開始排序實現方法6. DB2大事記7. access不能打開注冊表關鍵字錯誤處理方法(80004005錯誤)8. 恢復從 Access 2000、 Access 2002 或 Access 2003 中數據庫刪除表的方法9. SQL案例學習之字符串的合并與拆分方法總結10. SQL Server一個字符串拆分多行顯示或者多行數據合并成一個字符串
