Mybatis:
前身是ibatis,但由于種種原因,去年五月時改名為Mybatis,絕大多數API與機制沒有變化,只是少數配置文件變動了。但是官網上有一個自動轉換的工具,可以方便的將Ibatis系統轉換為Mybatis.
Spring:
采用3.x,這是因為Mybatis和Spring3.x有一個較好的結合體驗,Maven庫上有一個Mybatis-Spring結合包.
所需要采用的JAR包:(POM.xml)
- <dependency>
- <groupid>org.springframework</groupid>
- <artifactid>spring-web<artifactid>
- <version>3.0.5.RELEASE<version>
- </dependency>
- <dependency>
- <groupid>org.mybatis</groupid>
- <artifactid>mybatis</artifactid>
- <version>3.0.4</version>
- </dependency>
- <dependency>
- <groupid>mysql</groupid>
- <artifactid>mysql-connector-java</artifactid>
- <version>5.1.14</version>
- </dependency>
這是整體需要采用的JAR包,當然如果要在WEB環境中跑的話,還需要一些其它的包,比如STRUTS,LOG4J,等等。當然這里只關注對于Mybatis和Spring的整合。拋磚引玉而已
Mybatis-config.xml:
(名字可以自定義,最終你會加在Spring配置文件中去加載,讓Spring來進行管理)
- <configuration>
- <settings>
- <setting name="lazyLoadingEnabled" value="false" />
- </settings>
- <typeAliases>
- <typeAlias alias="account" type="com.DreamForce.demo.model.Account" />
- </typeAliases>
- </configuration>
這里有兩個配置,一個是LazyLoadingEnable,設為false,讓Mybatis禁止Lazy加載
在TypeAliases,這是一個別名,之所以要別名,是為了在Mapper映射的時候方便使用,這里type對應的是domin中的Account,按照命名規范的話,我們就account作為別名。
AccountMapper.xml(這是Mybatis的核心,所有的SQL在這里配置)
<mapper namespace="com.DreamForce.Demo.persist.DAO.AccountMapper">
<select id="getAccountByUsername" parameterType="string" resultType="account">
SELECT * FROM ACCOUNT WHERE USERID = #{username}
</select>
</mapper>
namespace在這里只是一個虛目錄,也就是說,你完全可以定一個不存在的目錄,Namespace的存在就相當于public屬性,將此Mapper暴露,方便讓Service調用,也可以讓其它API所用。但為了可維護性,這里將其與AccountMapper接口進行綁定,方便維護。
Select標簽定義了一個"getAccountByUsername"的方法,parameterType代表的是傳入的參數,這里是一個string類型的。
ResultType用的是account,這里是和之前別名的account一致,如果之前沒有建立別名的話,這里不得不用上全路徑:“com.DreamForce.demo.model.Account”,這樣會相當的麻煩。
簡單的示例:(建立一個Account類,然后通過AccountService來進行Account類的管理,也可以建立一個代理類AccountMapper)
Account.java:
public class Account implements Serializable
{
private static final long serialVersionUID = 8751282105532159742L;
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
AccountService.java:
@Service
public class AccountService{
@Autowired
private AccountMapper accountMapper;
public Account getAccount(String username) {
return accountMapper.getAccountByUsername(username);
}
通過@Service注解,可以讓Spring進行依賴管理,讓Spring知道這是一個Service Bean.
@Autowire注解,可以讓自動Set accountMapper,這個也是通過Spring來進行依賴管理的,當然也還需要在Spring配置文件里面進行配置相關的信息,以讓Spring可以知道哪些包需要進行注解掃描,以加入依賴管理
applicationContext.xml:
這里用此配置文件進行總體的維護,
DataSource:
<context:property-placeholder location="classpath:mysql.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
配置DataSource,這里通過mysql.properties導入相當的值。
Transaction:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
這里將dataSource加入Transaction,
在應用中,可以采用@transaction的方式自動開啟事務和關閉事務:
如:
@Transactional
public void insert(Object o){......}
SessionFactory:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
配置sessionFactory,需要加入datasource,這里的datasource引用上面配置好的dataSource.同時將mybatis-config.xml加入管理。
需注意Classpath是從根目錄導入,而這里的mybatis-config.xml按照JEE規范放在:src/main/Resource/mybatis-config.xml
SessionFactory不需要手動去創建,而在服務器啟動時,自動啟動,所有的Transaction及相關操作都是依賴于這個已啟動的SessionFactory.
Scan:
Scan就是Spring的一種簡便的依賴管理,這種之所以簡便是你不需要為每一個Bean,Service,Mapper定義一個依賴管理,而只需要在需要加入依賴的類上加入@Service,@Controller等注解就可以加入依賴
當然最重要的是@AutoWired,當系統掃描到這個注解時,就會在系統中去找相關聯的類或方法進行注入
<context:annotation-config/>
---annotation scan:
<context:component-scan base-package="com.DreamForce.Demo.persist.IbatisImpl,com.DreamForce.demo.integrate" />
上文定義了掃描的路徑,這里定義了兩個路徑以供Spring進行掃描,當然還可以加上一些過濾條件讓掃描更精確,效率更高
---mapper scan:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.DreamForce.Demo.persist.DAO" />
</bean>
這里定義了Mybatis 的Mapper文件路徑,所有的Mapper文件在這里去尋找。
當然你也可以自己手動管理Mapper依賴關系:
可以在mybatis-config.xml中加入如下代碼,手動進行Mapper依賴維護
<sqlMap resource="com/DreamForce/Demo/persist/DAO/AccountMapper.xml"/>
Web.xml:
1.加入Spring Listener
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.contextConfigLocation中加入Spring配置文件,讓Spring Listner進行相關的配置管理
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
當有多個Spring配置文件時可以使用 classpath*:/spring-*.xml這種配置方式..讓容器自動尋找Spring配置文件.
至此Spring-Mybatis基本配置完畢,其它相關信息可以參考其它配置