spring整合mybatis(基於配置類)
Spring整合MyBatis 是將Spring和MyBatis應用到一個專案中。MyBatis 提供資料庫相關的操作,完成物件資料和關係資料的轉換。Spring完成專案的管理,通過IOC和AOP完成依賴注入,事務管理等操作。
本示例採用idea開發。
建立實體類:
package com.project.bean; public class ManBean { private int id; private String name; private String tel; …… }
建立資料庫表:
create table t_man( pk_id int primary key AUTO_INCREMENT, m_name varchar(20), m_tel varchar(20) );
建立業務介面:
package com.project.service; public interface IManService { public void add(ManBean man); public List<ManBean> findAll(); }
建立mapper介面:
package com.project.mapper; public interface IManMapper { public void add(ManBean man); public List<ManBean> findAll(); }
將mybatis.cfg.xml主配置檔案新增到resources目錄中
<configuration> <settings> <!--定義輸出日誌--> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <typeAliases> <!--允許指定包中的類名做為該類的別名--> <package name="com.project.bean"></package> </typeAliases> </configuration>
將mapper檔案IManMapper.xml新增到com.project.mapper目錄中。
<mapper namespace="com.project.mapper.IManMapper"> <!--需要和介面同名--> <insert id="add"> INSERT INTO t_man (m_name,m_tel) VALUES(#{name},#{tel}); </insert> <resultMap id="manMap" type="ManBean"> <id column="pk_id" property="id"></id> <result column="m_name" property="name"></result> <result column="m_tel" property="tel"></result> </resultMap> <select id="findAll" resultMap="manMap"> select * from t_man </select> </mapper>
在maven專案中匯入依賴:
spring依賴包:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency>
mybatis依賴包:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.1</version> </dependency>
mysql驅動包:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
事務管理器:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.7.RELEASE</version> </dependency>
連線池產品採用druid:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
新增編譯時將XML檔案打包:
<build> <resources> <resource> <directory>${basedir}/src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
好,環境搭建好了,現在來看一下,如何用spring配置類整合mybatis。
首先定義配置類
package com.project;//該包是所有spring元件的父包 @Configuration //申明該類為配置類 //掃描指定類所在的包,及子包中所有的spring元件 @ComponentScan(basePackageClasses = ApplicationConfig.class) //掃描指定包中的mapper檔案 @MapperScan("com.project.mapper") //提供事務支援 @EnableTransactionManagement public class ApplicationConfig { }
在配置類中,使用連線池配置資料來源:
@Bean public DataSource getDataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); //驅動 dataSource.setUrl("jdbc:mysql://localhost:6789/proxyDB?characterEncoding=utf-8&allowMultiQueries=true");//連線資料庫URL dataSource.setUsername("root");//mysql登陸使用者名稱 dataSource.setPassword("lovo");//mysql登陸密碼 dataSource.setMaxActive(100);//連線池最大連線數 dataSource.setMinIdle(20);//連線池最小連線數 dataSource.setMaxWait(1000);//連線池超時時間 return dataSource; }
在spring配置類中,新增會話工廠:
@Bean public FactoryBean getFactory(){ SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); //設定資料來源 factory.setDataSource(this.getDataSource()); //匯入mybatis.cfg.xml配置檔案資訊 factory.setConfigLocation(new ClassPathResource("mybatis.cfg.xml")); return factory; }
在spring配置類中,新增事務管理器:
@Bean public TransactionManager getTrans(){ DataSourceTransactionManager trans = new DataSourceTransactionManager(); //設定資料來源 trans.setDataSource(this.getDataSource()); return trans; }
好,配置類寫好了,現在定義業務介面實現類:
@Service //申明該類為業務類 @Transactional //該類中所有方法提供事務管理 public class ManServiceImpl implements IManService { @Autowired //注入mapper介面實現類 private IManMapper mapper; public void add(ManBean bean) { mapper.add(bean); } public List<ManBean> findAll() { mapper.findAll(); } }
好了,spring整合mybatis完畢,現在測試一下。spring測試框架需要依賴於junit,本示例採用junit4完成測試。匯入junit和spring測試框架的依賴包:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.7.RELEASE</version> <scope>test</scope> </dependency>
在test/java/com/test包中建立測試類:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = ApplicationConfig.class) //載入配置類 public class TestService { @Autowired //注入service實現類 private IManService service; @Test //標識為測試方法 public void testAdd(){ service.add(new ManBean("tom","13920382932")); System.out.println(service.findAll()); } }
好,測試通過……
總結:
該示例是基本配置類+註解的方式,完成spring和mybatis的整合。相比採用spring的XML方式,整合程式碼比較簡單,而且也比較容易維護。
配置類的方式,是spring5以後推薦的方式,springBoot中需要註冊spring元件,採用的就是配置類方式。
當然,很多老專案在整合的時候採用的是XML方式,大家兩種都要會,都要掌握。不過,就大趨勢而言。XML配置方式會越來越少。