一、使用注解則不需要創建映射配置文件:即xxxDao.xml
javaBean為什么要實現Serializable接口?
Java的"對象序列化"能讓你將一個實現了Serializable接口的對象轉換成一組byte,這樣日后要用這個對象時候,你就能把這些byte數據恢復出來,並據此重新構建那個對象了。這一點甚至在跨網絡的環境下也是如此,這就意味着序列化機制能自動補償操作系統方面的差異。也就是說,你可以在Windows機器上創鍵一個對象,序列化之后,再通過網絡傳到Unix機器上,然后在那里進行重建。你不用擔心在不同的平台上數據是怎樣表示的,byte順序怎樣,或者別的什么細節。
入門案例:
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,並且指定SQL語句
同時需要在SqlMapConfig.xml中的mapper配置時,使用class屬性指定dao接口的全限定類名
配置主配置文件:SqlMapConifg.xml
<!--指定映射配置文件的位置,映射配置文件指的是每個dao獨立的配置文件 如果用注解來配置,此處應該使用class屬性指定被注解的dao全限定類名 --> <mappers> <mapper class="cn.flypig666.dao.IUserDao"/> </mappers>
在dao中使用注解:@Select("select * from user")
public interface IUserDao { /** * 查詢所有結果 * @return */ @Select("select * from user") List<User> findAll(); }
二、自定義Mybatis的分析
mybatis在使用代理dao的方式實現增刪改查時具體步驟:
1、 創建代理對象
2、 在代理對象中調用selectList
查詢所有的分析:
1. 根據配置文件的信息創建Connection對象
注冊驅動,獲取連接
2. 獲取預處理對象PrepareSatament
此時需要sql語句
con.prepareStatement(sql)
3. 執行查詢
ResultSet resultSet = prepareStatement.executeQuery();
4. 遍歷結果集用於封裝
List<E> list = new ArrayList();
where(resultSet.next()){
E element = (E)Class.forName(配置的全限定類名).newInstance()
//進行封裝,將每個rs的內容都添加到elemet中
/*
我們的實體類屬性和表中的列名是一致的
於是我們就可以把表的列名看成是實體類的屬性名稱-----------------------------------此處使用到的技術:反射封裝
就可以使用反射的方式來根據名稱獲取每個屬性,並把值進去
*/
//把element加入到list中
list.add(element);
}
5. 返回list
return list;