簡化了原來xml 的配置
<context:component-scan base-package="com.xdl"></context:component-scan>
@PostConstruct 構造方法之後進行初始化
@PreDestroy 銷燬之前指定銷燬方法
@Scope 指定對象作用域
@Value 注入簡單類型的值 (現在可以注入對象類型 但是結合EL表達式)
1.2 和組件裝配有關的標註
@Autowired 可以用在成員變量 set方法 構造方法上 (依然是要參數個數匹配)
優先按照類型進行組件的查找 如果找不到則使用名字進行查找
配合 @Qualifier 可以直接指定名字進行查找 但是這樣就不能用在構造方法上了
@Resource 可以用在成員變量 set方法上 不能用在構造器上 但是這基本上就夠用了
這個標註不是spring 框架中 而是java的基本標註
優先按照名字 去查找 如果沒有找到則啓用類型查找
2.Spring DAO
2.1 什麼是 DAO
Data Access Object 數據訪問對象 以面向對象的方式訪問數據庫
2.2 Spring DAO 做了哪些工作?
對JDBC 做了封裝 和 簡化 使用Spring 提供的對象和api 這樣可以不用考慮連接 執行環境的獲取 以及資源的釋放
提供了AOP模式的事務處理 讓業務代碼 和 事務管理進行分離
把JDBC的異常處理進行封裝 由原來的檢查異常(必須處理) 變成成了一個 DataAccessException 這個異常
繼承RuntimeException 是運行時異常不用強制處理
2.3 JdbcTemplate
SpringDAO 把最核心的封裝 交給了 JdbcTemplate 這個對象來負責 驅動加載 連接獲取 執行環境獲取 以及
資源的釋放。 使用 JdbcTemplate 有兩種手段 第一種使用 繼承JdbcDaoSupport類的方式 這種方式 大家無需注入
JdbcTemplate 從JdbcDaoSupport 直接獲取使用即可。 第二種方式 我們自己手工注入JdbcTemplate。
<util:properties id="dbparam2">
<prop key="driverClassName" >oracle.jdbc.OracleDriver</prop>
<prop key="url">jdbc:oracle:thin:@127.0.0.1:1521:xe</prop>
<prop key="username">system</prop>
<prop key="password">123456</prop>
</util:properties>
<!-- 定義一個數據源對象 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="#{dbparam2.driverClassName}"></property>
<property name="url" value="#{dbparam2.url}"></property>
<property name="username" value="#{dbparam2.username}"></property>
<property name="password" value="#{dbparam2.password}"></property>
</bean>
2.4.1 先建立一張表 和序列 插入幾條數據
drop table xdl_bank_account cascade constraints;
create table xdl_bank_account(
id number constraint xdl_bank_account_id_pk primary key,
card_no varchar2(30),
card_name varchar2(30),
card_password varchar2(30),
card_money number
);
drop sequence xdl_bank_account_id_seq;
create sequence xdl_bank_account_id_seq;
insert into xdl_bank_account values(xdl_bank_account_id_seq.nextval,
'110001','mengge','123456',12345678);
insert into xdl_bank_account values(xdl_bank_account_id_seq.nextval,
'110002','liangge','123456',10005678);
insert into xdl_bank_account values(xdl_bank_account_id_seq.nextval,
'110002','xiaoma','123456',2234567);
commit;
2.4.2 建立一個項目 拷貝 ioc aop 和 dao 以及連接數據庫的連接池包 和 數據庫驅動包
2.4.3 寫一個 dao 接口 定義一個方法 可以用來獲取表中的數據量
2.4.4 寫一個dao的實現類 繼承 JdbcDaoSupport 並實現 dao 接口
注入一個 dataSouce 對象 dataSource對象定義在配置文件中
使用JdbcDaoSupport 中對應的模板對象 完成具體的查詢工作
思考如何把dao的實現類 加載到spring 容器
2.4.5 從容器中 獲取 dao 對象 調用查詢表中數據量的方法進行測試
2.5 JdbcTemplate 提供的核心方法
queryForInt(sql)
queryForObject(sql,對象類型或者映射器類型) 查詢一個整數 或者一個對象
query 查詢多條數據
update 實現 增 刪 改
execute 可以執行任何語句 一般不使用
@Repository("bankDao")
public class BankAccountDAOOracleImp extends JdbcDaoSupport implements BankAccountDAO {
// 注入一個 dataSource 對象
// private DataSource dataSource;
@Resource
public void setMyDataSource(DataSource dataSource) {
//this.dataSource = dataSource;
// 傳給父類使用
super.setDataSource(dataSource);
}
@Override
public int getBankAccountCount() {
// 使用父類中對應的模板 完成查詢
/* return super.getJdbcTemplate().
queryForInt("select count(*) from xdl_bank_account"); */
String sql = "select count(*) from xdl_bank_account";
return super.getJdbcTemplate().queryForObject(sql, Integer.class);
}
@Override
public BankAccount getBankAccountByNameAndPassword
(String card_name, String card_password) {
String sql = "select * from xdl_bank_account where card_name = ? and card_password = ?";
// new BankAccountMapper() 說明數據和對象之間的翻譯規則
return super.getJdbcTemplate().queryForObject(sql, new BankAccountMapper(),
card_name,card_password);
}
@Override
public List<BankAccount> getBankAccountList() {
String sql = "select * from xdl_bank_account";
return super.getJdbcTemplate().query(sql, new BankAccountMapper());
}
@Override
public int insertBankAccount(BankAccount account) {
String sql = "insert into xdl_bank_account values(xdl_bank_account_id_seq.nextval,"
+ "?,?,?,?)";
return super.getJdbcTemplate().update(sql, account.getCard_no(),
account.getCard_name(),account.getCard_password(),account.getCard_money());
}
}
1.根據表 設計一個實體類 BankAccount
2.在接口中 增加一個方法 可以根據 用戶名 和 密碼 進行對象的查詢
3.在實現類中 增加實現方法
少把數據庫中的數據 變成 相應對象的規則,需要使用 RowMapper 接口進行說明
4.測試
2.7 查詢所有的賬戶的信息
1.根據表 設計一個實體類 BankAccount
2.在接口中 增加一個方法 可以查詢所有的賬戶 返回 List
3.在實現類中 增加實現方法
少把數據庫中的數據 變成 相應對象的規則,需要使用 RowMapper 接口進行說明
4.測試
2.8 增加賬戶信息
1.在接口中 增加一個方法
2.寫實現類
3.測試