ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Spring整合Mybatis方式一 - 常规整合 - 注册映射器
[打印本页]
作者:
灌篮少年
时间:
2024-5-15 14:31
标题:
Spring整合Mybatis方式一 - 常规整合 - 注册映射器
前置工作
导包(mybatis-spring、mysql-connector-java、mybatis、spring-webmvc等)
实体类
DAO层两个文件(接口、xml文件);Service层的接口
编写Spring管理mybatis的xml-spring-dao.xml
核心代码(两种方式实现)
第一种:xml
<bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean>
复制代码
第二种:annotation方式
点击查看代码
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
@Bean
public MapperFactoryBean<UserMapper> userMapper() throws Exception {
<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
MapperFactoryBean<UserMapper> factoryBean = new MapperFactoryBean<>(UserMapper.class);
<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
factoryBean.setSqlSessionFactory(sqlSessionFactory());
<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
return factoryBean;
}
复制代码
完整xml文件
<bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean><bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean>
复制代码
重新编写Service实现类
public class BookServiceImpl implements BookService{<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
private BookMapper bookMapper;<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
@Autowired //需要spring-aop包<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
public BookServiceImpl(BookMapper bookMapper) {<bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean>this.bookMapper = bookMapper;<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
}<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
@Override<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
public Book getBookById(Integer bookID) {<bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean>return bookMapper.getBookById(bookID);<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
}}
复制代码
测试
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookServiceImpl = context.getBean("BookServiceImpl", BookService.class);
Book book = bookServiceImpl.getBookById(2);
System.out.println(book);
复制代码
改进注册映射器方式:使用发现映射器方式
MapperFactoryBean注册映射器的最大题目,就是需要一个个注册所有的映射器,而现实上mybatis-spring提供了扫描包下所有映射器接口的方法。
注意:以下两种设置方法,均可替换上述MapperFactoryBean设置,而其余代码与设置不变
方式一:设置扫描器标签
1.与上面设置MapperFactoryBean差异,该设置无需注入SqlSessionFactory,它会自动匹配已有的会话工厂bean
2.假如设置了多个DataSource,也就是多个sqlSessionFactory时,可以使用factory-ref参数指定需要的会话工厂
<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
复制代码
方式二:MapperScannerConfigurer类
1.与上面标签的功能差不多,同样是扫描基准包,自动注入会话工厂
2.假如要更换注入的会话工厂,差异于常用的ref引入bean,而是使用value指定bean名,且属性是sqlSessionFactoryBeanName
<bean id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
</bean>
<bean id="userMapper" >
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
</bean>
复制代码
annotation方式
@Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
mapperScannerConfigurer.setBasePackage("com.ylzl.dao");<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
return mapperScannerConfigurer;}
复制代码
图片:
转载请注明原文链接:
https://www.cnblogs.com/yulingzhiling/p/18099455
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,接待转载,但未经作者同意必须保留此段声明,且在文章页面显着位置给出原文毗连,否则保留追究法律责任的权利.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4