Mybatis學習第二天——mapper的動態代理
阿新 • • 發佈:2019-01-13
參數類型 pub integer map rda 核心 dao層 puts fin
傳統的Dao層開發通過接口與實現類的方式,Mybatis中通過mapper動態代理是需要定義接口。
1.傳統Dao層封裝
那麽可以將公共資源提取出來,剩余的封裝成方法來實現。下面是UserDaoImpl.java中對查詢的簡單封裝
1 package com.mybatis.dao.impl; 2 3 import org.apache.ibatis.session.SqlSession; 4 import org.apache.ibatis.session.SqlSessionFactory; 5 6 import com.mybatis.dao.UserDao; 7 importcom.mybatis.pojo.User; 8 9 public class UserDaoImpl implements UserDao { 10 11 //沒有導入Spring,采用傳參的方式獲取 12 SqlSessionFactory sqlSessionFactory ; 13 14 public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { 15 super(); 16 this.sqlSessionFactory = sqlSessionFactory; 17 }18 19 @Override 20 public User findUserById(Integer id) { 21 SqlSession sqlSession = sqlSessionFactory.openSession(); 22 User user = sqlSession.selectOne("test.findUserById",id); 23 24 sqlSession.close(); 25 return user; 26 } 27 28 }
在測試中通過加載公共資源,確定調用的mapper文件(此時表示User.xml)
1 @Test 2 public void testName() throws Exception { 3 /** 4 * 1. 創建SqlSessionFactoryBuilder對象 5 2. 加載SqlMapConfig.xml配置文件 6 3. 創建SqlSessionFactory對象 7 4. 創建SqlSession對象 8 5. 執行SqlSession對象執行查詢,獲取結果User 9 6. 打印結果 10 7. 釋放資源 11 */ 12 String resource = "SqlMapConfig.xml"; 13 InputStream in = Resources.getResourceAsStream(resource); 14 15 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); 16 17 UserDao userdao = new UserDaoImpl(sqlSessionFactory); 18 19 User user = userdao.findUserById(1); 20 21 System.out.println(user.getUsername());
2.mapper動態代理模式
UserMapper um = sqlSession.getMapper(UserMapper.class);獲取代理,傳入的值為創建的動態代理接口
(個人理解,有誤希望指正)
在UserMapper接口中,創建的方法需要滿足以下四個原則Mybatis才能進行動態代理操作:
1 public interface UserMapper { 2 //四大原則 3 //1.接口中的方法名與User.xml中對應的id名一致 4 //2.方法中的返回類型與User.xml中的一致 5 //3.傳入的參數類型一致 6 //4.命名空間綁定此接口 7 public User findUserById(Integer id); 8 }
前三個好理解,方法的名字,返回類型,參數類型與User.xml文件中的屬性一致。命名空間綁定此接口,只需要在namesapce上用接口的全路徑。如下:
註意:User.xml一定要在核心配置SqlMapConfig.xml中加載
3.mapper映射器
1 <mappers> 2 <!-- 第一種方式只需指定mapper文件路徑即可 --> 3 <mapper resource="sqlmap/User.xml"/> 4 <mapper resource="sqlmap/UserMapper.xml"/> 5 <!-- 第二種方式,需對應接口的路徑,同時mapper文件名需與接口名一致,文件位置必須在同一目錄下 --> 6 <mapper class="com.mybatis.mapper.UserMapper"/> 7 <!-- 第三種方法,指定接口文件的包名,同時mapper文件名需與接口名一致,文件位置必須在同一目錄下 --> 8 <package name="com.mybatis.mapper"/> 9 </mappers>
推薦使用第三種方式。
Mybatis學習第二天——mapper的動態代理