1. chapter1
JDBC 是一種橋接模式。 java程序都是通過(guò)JDBC(java data base connectivity)連接數(shù)據(jù)庫(kù)的。
(1)JDBC的弊端:
- 工作量相對(duì)較大。我們需要先連接,然后處理JDBC底層事務(wù),處理數(shù)據(jù)類(lèi)型。我們還需要
操作Connection對(duì)象、Statement對(duì)象和ResultSet對(duì)象去拿到數(shù)據(jù),并準(zhǔn)確關(guān)閉它們。 - 我們要對(duì)JDBC的編程可能產(chǎn)生的異常進(jìn)行捕捉處理并正確關(guān)閉資源。
工作中很少使用JDBC編程,通常使用對(duì)象關(guān)系映射(Object Relational Mapping,ORM),將數(shù)據(jù)庫(kù)對(duì)象和POJO相互映射。
(2)Hibernate的缺點(diǎn):
- 全表映射帶來(lái)的不便,比如更新時(shí)需要發(fā)送所有的字段。
- 無(wú)法根據(jù)不同的條件組裝不同的SQL。
- 對(duì)多表關(guān)聯(lián)和復(fù)雜SQL查詢支持較差,需要自己寫(xiě)SQL,返回后,需要自己將數(shù)據(jù)組裝為POJO。
- 不能有效支持存儲(chǔ)過(guò)程
- 雖然有HQL,但是性能較差。大型網(wǎng)站往往需要優(yōu)化SQL,而Hibernate做不到。
(3)Mybatis特點(diǎn)
- 使用xml維護(hù)sql,對(duì)需要優(yōu)化sql效率的地方提供方便,同時(shí)也分離了代碼和sql
- 動(dòng)態(tài)拼接sql,靈活度很大
- 缺點(diǎn):半自動(dòng)化,sql,pojo,映射規(guī)則都要自己手寫(xiě);編寫(xiě)的sql依賴(lài)于數(shù)據(jù)庫(kù),比如mysql和oracle在字符串連接上就是不一樣的,所以數(shù)據(jù)庫(kù)移植差
Mybatis環(huán)境搭建
初級(jí)
-
pom.xml中引用mybatis依賴(lài) -
spring配置文件中直接配置連接池等信息即可。
如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
....(略過(guò))
<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
"username"、"password"、mysqlJdbc屬性等
<property name="driverClassName" value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql:///cloud_note?useUnicode=true&characterEncoding=utf8">
</property>
</bean>
<bean id="ssf"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dbcp"></property>
<property name="mapperLocations"
value="classpath:cn/whbing/note/sql/*.xml">
</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.whbing.note.dao">
</property>
<!-- 自動(dòng)注入sqlsessionfactory -->
</bean>
<!-- 開(kāi)啟掃描,掃描Controller,Service組件 -->
<context:component-scan base-package="cn.whbing.note"/>
<!-- handlermapping,支持@RequestMapping,@ResponseBody,@Exceptionhanlder -->
<mvc:annotation-driven />
高級(jí)
上述配置的缺點(diǎn):
- 配置文件與spring主配置文件融合在一起
- usename、password等屬性未分離成.properties屬性文件
- mybatis默認(rèn)的配置文件未指定,導(dǎo)致不能修改
分離后的結(jié)構(gòu):