文章目錄
- Spring整合mybatis
- 思路分析
- Mybatis程序核心對象分析
- 整合Mybatis
- 代碼實現
- Spring整合Junit
- 修改成警告
Spring整合mybatis
思路分析
Mybatis程序核心對象分析
上面圖片是mybatis的代碼,上述有三個對象,分別是sqlSessionFactory,sqlSession,accountDao這三個對象,那么哪個是核心對象,哪些類適合交給Spring來管理,因為spring默認是單例的,所有他管理的核心對象最好是無狀態的,單例的,對于sqlSessionFactory來說它只創建一次,而sqlSession每次用的時候都要獲取,用完還要關閉,而accountDao更不用說了,它本來就是由sqlSession創建的。(就像是在沒學框架之前寫那個mybatis工具類時只需在工具類中創建一次sqlSessionFactory對象,之后都是由工具類創建sqlSession對象)所以核心對象就是sqlSessionFactory對象
整合Mybatis
- 使用SqlSessionFactoryBean封裝SqlSessionFactory需要的環境信息
- 使用MapperScannerConfigurer加載Dao接口,創建代理對象保存到IOC容器中
代碼實現
前置工作
創建與數據庫表對應的實體類,還有dao接口并寫對應的方法以及對應的sql語句
public class Student {private Integer id;private String name;public Student() {}public Student(Integer id, String name) {this.id = id;this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +'}';}
}
public interface StudentDao {@Select("select * from student where id = #{id}")Student findById(Integer id);
}
- 導入依賴
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency></dependencies>
- 創建JdbcConfig配置DataSource數據源
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false
jdbc.username=root
jdbc.password=root
JdbcConfig
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}
}
- 創建MybatisConfig整合Mybatis
public class MybatisConfig {//定義bean,SqlSessionFactoryBean,用于產生SqlSessionFactory對象@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setTypeAliasesPackage("com.itheima.domain");ssfb.setDataSource(dataSource);return ssfb;}//定義bean,返回MapperScannerConfigurer對象@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.itheima.dao");return msc;}
}
- 創建SpringConfig主配置類進行包掃描和加載其他配置類
@Configuration
@ComponentScan("com.itheima")
//@PropertySource:加載類路徑jdbc.properties文件
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}
- 定義測試類進行測試
public class App {public static void main( String[] args ) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);StudentDao studentDao = ctx.getBean(StudentDao.class);Student student = studentDao.findById(3);System.out.println(student);}
}
Spring整合Junit
- 導入依賴坐標
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version></dependency>
- 測試哪個類在test包下創建相同包的類(規范)
- 使用Spring整合junit專用的類加載器和加載配置類
//【第二步】使用Spring整合Junit專用的類加載器
@RunWith(SpringJUnit4ClassRunner.class)
//【第三步】加載配置文件或者配置類
@ContextConfiguration(classes = {SpringConfiguration.class}) //加載配置類
//@ContextConfiguration(locations={"classpath:applicationContext.xml"})//加載配置文件
public class AccountServiceTest {//支持自動裝配注入bean@Autowiredprivate StudentDao studentDao;@Testpublic void testFindById(){Student student = studentDao.findById(1);System.out.println(student);}
}
注意:junit的依賴至少要是4.12版本,可以是4.13等版本,否則出現如下異常
修改成警告
如何將上圖中箭頭處修改成警告,看下圖
鼠標點擊studentDao處,按alt+enter鍵