Spring整合Mybatis的方式一
阿新 • • 發佈:2021-02-07
1.在Spring的配置檔案當中編寫資料來源
<!--DataSource資料來源:使用Spring的資料來源替換Mybatis的配置-->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="333" />
</bean>
2.編寫SqlSessionFactory(可以繫結Mybatis的資原始檔:推薦這麼操作,這樣使得mybatis的配置檔案當中程式碼減少只需要保留一些基礎的設定)
<!--SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref= "datasource" />
<!--繫結Mybatis的配置檔案-->
<property name="configLocation" value="classpath:Mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:com/sqx/dao/*.xml"/>
</bean>
3.編寫SqlSessionTemplate(等價於SqlSession)
<!--SqlSessionTemplate-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--構造器注入-->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
4.編寫Mapper介面的實現類,設定一個屬性SqlSessionTemplate的屬性和對應的set方法,以及對方法的重寫
public class UserMapperImpl implements UserMapper {
private SqlSessionTemplate sqlSession;
//以前我們的操作全在sqlSession中執行,現在全在SqlSessionTemplate當中執行
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List<User> queryUsers() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.queryUsers();
}
}
5.將介面的實現類託管給Spring(註冊在Spring的配置檔案當中)
<bean id="userMapper" class="com.sqx.dao.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
6.測試的時候可以直接呼叫實現類的方法即可
@Test
public void queryUsersTest(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
List<User> userList = userMapper.queryUsers();
for (User user : userList) {
System.out.println(user);
}
}
最後一般是團隊合作開發可以把Spring配置檔案全部整合到一個配置檔案當中即可
總結:這樣做盡管多出了一個介面的實現類,但是仍然是利大於弊的,因為使得專案層次更加清晰,也是IOC的思想