三.Mybatis
1.SpringJdbc
1.1 SpringJdbc是什么?
是Spring框架對jdbc的封裝.目的是為了簡化代碼,提高質量效率,比如訪問數據庫要先連接跟關閉連接都已經寫好了。
1.2 怎么用?
step1.導spring-webmvc,spring-jdbc,ojdbc,dbcp,junit
step2.添加配置文件,spring容器表配置JdbcTemplate
配置就相當於調用JdbcTemplate的方法訪問連接了數據庫. Dao封裝一個內部類實現RowMapper< T >接口,有結果集,查詢語句必用
jt.update(sql,args); ++ jt.query(sql,new EmpRowMapper());返回一個集合
jt.queryForObject(sql, args,new EmpRowMapper());返回一個員工數據
2 Mybatis
2.1 Mybtis是什么?——是對jdbc的封裝,開源的持久層框架
2.2 怎么用?
step1.導mybatis,ojdbc,junit
step2.添加配置文件
step3.實體類(屬性名跟表的字段名一樣,不計大小寫)
step4.添加一個映射文件(主要是一些sql語句)
step5.調用SqlSession提供的方法來訪問數據庫
沒有entity也可以通過返回的Map類型獲得,Map封裝的都是大寫的key,如map.get("NAME"),resultType可以=m(簡寫)
2.2 Mybatis的基本原理
a.SqlSessionFactory通過讀取MyBatis配置文件(SqlMapConfig.xml),創建一個Map(key是sql的id,值是PreparedStatement對象)
b.調用SqlSession對象提供的方法來執行sql,SqlSession對象會依據 sqlId在Map中找到對應的PreparedStatement對象,然后執行相應的方法(比如executeUpdate等)
c.如果執行的是查詢,對結果的處理分兩步:.
第一步,是將一條記錄中存放的數據先添加到一個對應的Map對象里面(以字段名作為key,以字段值作為value)
第二步,會將Map對象存放的數據添加到對應的實體對象里面(這也是為什么要求實體類的屬性名必須與表的字段名要求一致的原因)
解決entity實體類屬性名跟數據庫表的字段不一樣的情況
方法一: 使用別名 select id empNo,name ename,salary,age from lin_emp where id=#{num}
方法二: 使用resultMap
2.3 Mapper映射器
2.3.1 Mapper映射器是什么?
是一個符合映射文件要求的接口,它跟上面講的映射文件是互相關聯的叫映射器。MyBatis會自動生成一個符合該接口要求的對象,只需要調用該對象的方法,就可以訪問數據庫
2.3.2 如何寫?
step1.方法名必須跟sqlId一樣
step2.參數類型必須跟parameterType一樣
step3.返回類型必須跟resultType一樣
2.4 Spring集成MyBatis(使用Mapper映射器,沒有附上映射文件跟映射器圖片,上面有這2圖)
step1.導spring-webmvc,mybatis,mybatis-spring,spring-jdbc,ojdbc,dbcp,junit
step2.添加Spring配置文件,MyBatis配置文件就不需要了,使用SqlSessionFactoryBean來代替
step3.實體類 + 映射文件 + Mapper映射器 + 配置MapperScannerConfigurer該bean會調用sqlsession的getMapper方法來獲得映射器的實現對象,並且會將這些對象添加到Spring容器里面(默認id是首字母小寫的接口名,或者加個持久注解)