Spring整合Ibatis教程:数据源管理与SqlMapClient支持

需积分: 3 13 下载量 140 浏览量 更新于2024-08-16 收藏 732KB PPT 举报
"Spring整合Ibatis实现轻量级持久层框架" Spring是一个强大的轻量级容器,它通过控制反转(IoC)和依赖注入(DI)原则来管理对象的生命周期和依赖关系。Spring不仅自身功能丰富,还提供了对多种主流持久层框架的整合支持,包括Ibatis。Ibatis是一个优秀的SQL映射框架,它允许开发者直接编写SQL语句,将数据访问逻辑与业务逻辑分离,提高了代码的可读性和可维护性。 Spring对Ibatis的支持主要体现在以下几个方面: 1. **数据源管理**:Spring提供`DriverManagerDataSource`类,可以方便地通过IOC容器管理数据源,这样就无需在Ibatis配置文件中重复配置数据源。 2. **SqlMapClient支持**:Spring的`SqlMapClientFactoryBean`类使得`SqlMapClient`实例可以通过IOC容器进行管理,使得配置更加简洁,同时也便于依赖注入。 3. **DAO支持**:Spring提供了`SqlMapClientDaoSupport`类,这个类可以作为DAO的基础类,用于注入`SqlMapClient`,类似于Hibernate中的`SessionFactory`注入。 4. **模板方法**:`SqlMapClientTemplate`类提供了Ibatis的持久化操作API,它是基于模板方法设计模式,可以安全地执行SQL操作,避免了直接在DAO层中编写事务控制代码。 Spring整合Ibatis的基本步骤如下: 1. **创建项目并添加依赖**:新建一个Web项目,通过Myeclipse等工具添加Spring支持,同时引入Ibatis及其依赖,包括数据库驱动包。 2. **配置Spring**:在`applicationContext.xml`中配置Spring管理的数据源,使用`DriverManagerDataSource`。 3. **配置SqlMapClient**:引入`SqlMapClientFactoryBean`来管理`SqlMapClient`对象,并指定SqlMapConfig.xml配置文件的位置。 4. **定义实体类及映射文件**:根据业务需求创建对应的Java POJO类,以及相应的XML映射文件,这些文件定义了数据库表和Java对象之间的映射规则。 5. **配置SqlMapConfig.xml**:在Ibatis的主配置文件中,定义数据源、事务管理器等信息,但因为Spring已经管理了数据源,所以这里不需要再配置。 6. **创建DAO接口和实现**:定义DAO接口,然后在实现类中继承`SqlMapClientDaoSupport`,通过`getSqlMapClientTemplate()`方法获取`SqlMapClientTemplate`实例,从而调用Ibatis的相关操作。 7. **业务逻辑层的配置**:在Spring的配置文件中,通过`<bean>`标签定义业务服务类,并注入对应的DAO实现。 8. **测试与运行**:编写测试用例,验证Spring和Ibatis整合后的功能是否正常工作。 通过以上步骤,Spring和Ibatis的整合可以让开发者专注于业务逻辑,而无需关心底层数据访问的细节,大大简化了开发流程。此外,Spring还提供了事务管理、AOP等功能,可以进一步提升系统的可维护性和稳定性。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deptServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptMapper' defined in file [D:\WorkSpace\work13\djd_server\target\classes\com\jiading\djd\mapper\DeptMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 40; 元素内容必须由格式正确的字符数据或标记组成。 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:893) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at com.jiading.djd.DjdApplication.main(DjdApplication.java:14) [classes/:na]报错了

2023-07-25 上传

java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) [spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) [spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) [spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE] at com.unkown.data.hw.ipran.straight.collect.UnkownDataHwIpranStraightCollectApplication.main(UnkownDataHwIpranStraightCollectApplication.java:39) [classes/:na] Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.unkown.data.hw.ipran.straight.collect.dao.RTrsHwIpranCircuitDao.queryById at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.5.jar:3.5.5] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.5.jar:3.5.5] at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:115) ~[mybatis-3.5.5.jar:3.5.5] at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_271] at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:102) ~[mybatis-3.5.5.jar:3.5.5] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) ~[mybatis-3.5.5.jar:3.5.5] at com.sun.proxy.$Proxy108.queryById(Unknown Source) ~[na:na] at com.unkown.data.hw.ipran.straight.collect.service.impl.RTrsHwIpranCircuitServiceImpl.queryById(RTrsHwIpranCircuitServiceImpl.java:29) ~[classes/:na] at com.unkown.data.hw.ipran.straight.collect.controller.RTrsHwIpranCircuitController.IpranSend(RTrsHwIpranCircuitController.java:54) ~[classes/:na] at com.unkown.data.hw.ipran.straight.collect.MyRunner.run(MyRunner.java:24) ~[classes/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) [spring-boot-2.3.4.RELEASE.jar:2.3.4.RELEASE] ... 5 common frames omitted

2023-05-18 上传