我尝试使用Mybatis XML配置实现一个简单的CRUD应用程序已经是第三天了,我对整个Spring生态系统还是新手。这个问题有点长,但我只分享了要点。
我有一个类employee.java
:
import lombok.*;
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString
public class Employee {
private long emp_Id;
private String emp_name;
private String emp_dept;
}
然后我写了一个映射器
@Mapper
public interface EmployeeMapper {
public Employee getEmployee(@Param("emp_Id") Long emp_Id);
public List<Employee> getAllEmployee();
}
...
<mapper namespace="Employee">
<select id="getAllEmployee" resultType="com.tmb.mybatiscrudproj.domains.Employee">
select * from employee
</select>
<select id="getEmployee" resultType="com.tmb.mybatiscrudproj.domains.Employee">
select * from employee where emp_Id = #{emp_Id}
</select>
</mapper>
public interface EmployeeService {
public Employee getEmployee(Long emp_Id);
public List<Employee> getAllEmployee();
}
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
EmployeeMapper employeeMapper;
@Override
public List<Employee> getAllEmployee() {
List<Employee> list = employeeMapper.getAllEmployee();
return list;
}
@Override
public Employee getEmployee(Long emp_Id) {
return employeeMapper.getEmployee(emp_Id);
}
}
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
EmployeeService empService;
@RequestMapping(value="/getEmp/{empId}",method = RequestMethod.GET)
public Employee getEmployee(@PathVariable Long empId){
return empService.getEmployee(empId);
}
@GetMapping(value="/getAllEmp")
public List<Employee> getAllEmployee(){
return empService.getAllEmployee();
}
server.port: 8081
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:~/test
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
mybatis.config-location=classpath:mapper/mybatisConfig.xml
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=com.tmb.mybatiscrudproj.domains
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=30
在许多教程和解答之后,我创建了一个MyBatisConfig.xml
,EmployeeMapper.xml
文件也在`Resources文件夹中。
在mybatisconfig.xml
中,我所做的与在.properties
文件中所做的几乎相同
...
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:~/test"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
<property name="path" value="/h2"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="EmployeeMapper.xml"/>
</mappers>
</configuration>
以下是项目结构截图:
嵌套异常是org.springframework.beans.factory.unsatisfiedDependencyException:创建名为“Employee ServiceImpl”的bean时出错:通过字段“Employee Mapper”表示未满足的依赖关系;
嵌套异常是org.springframework.beans.factory.unsatisfieddependencyException:创建文件[my_path/mybatiscrudproject/target/classes/com/tmb/mybatiscrudproj/mapper/employeemapper.class]中定义的名为“employee mapper”的bean时出错:通过bean属性“sql sessionfactory”表示未满足的依赖关系;嵌套异常是org.springframework.beans.factory.beanCreationException:创建类路径资源[org/mybatis/spring/boot/autoconfiguration/mybatisautoconfiguration.class]中定义的名为“SQL SessionFactory”的bean时出错:通过工厂方法实例化bean失败;嵌套异常是org.springframework.beans.beanInstantiationException:未能实例化[org.apache.ibatis.session.sqlSessionFactory]:工厂方法'sql sessionFactory'引发异常;嵌套异常是java.lang.IllegalStateException:属性“配置”和“配置位置”不能同时指定
现在,根据我所做的搜索,我确保在主类中添加:
@MappedTypes({Employee.class})
@MapperScan("com.tmb.mybatiscrudproj.mapper")
@SpringBootApplication
public class MybatiscrudprojApplication {
public static void main(String[] args) {
SpringApplication.run(MybatiscrudprojApplication.class, args);
}
}
但还是一样的错误。我如何才能成功地用我在本问题中分享的结构配置项目?
您的“EmployeeMapper”没有声明为spring bean,因此当依赖项注入时,没有这种类型的bean。尝试在类上添加@组件。
启动应用程序上下文时出错。若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2020-08-05 09:53:05.348 错误 46991 --- [ 主] o.s.boot.Spring 应用程序: 应用程序运行失败 组织.Spring框架.豆子.工厂.不满意依赖性异常:创建名称为“产品控制器”的Bean时出错:通过字段“产品存储库”表示的不满意的依赖关系;嵌套的异常是组织.spri
获取低于错误 UnsatisfiedDependencyException:创建名为“Account Controller”的bean时出错:通过字段“Account Service”表示不满足的依赖关系;嵌套异常是org.springframework.beans.factory.unsatisfiedDependencyException:创建名为“Account ServiceImpl”的b
我有这个错误已经有好几个星期了,我不知道如何修复它。类似的堆栈溢出解决方案不适合我的项目。 我目前使用mysql数据库,但遇到这个问题,每当试图启动服务器: StackTrace [错误]无法执行目标组织。springframework。boot:spring boot maven插件:1.5.6。发布:在project iPbackend上运行(默认cli):运行时发生异常。null:Invoc
创建名称为clienteRestController的bean时出错:通过字段clientService表示的不满意的依赖项。 创建名称为'clientServiceImpl'的bean时出错:通过字段'client道'表示的不满意的依赖项。 创建名称为ICliente道的bean时出错:初始化方法调用失败。 嵌套异常java.lang.IllegalArgumentExcishop:不是托管类型
我查了一些类似的问题,但这些答案帮不了我。 错误 组织。springframework。豆。工厂未满足的依赖项异常:创建名为“accountController”的bean时出错:未满足的依赖项通过字段“accountService”表示;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“com”的合格bean。服务
我想在我的项目中实现Spring Security性。但不管我怎么做,我总是会犯同样的错误。 我创建了必要的类(,,)。它们在同一个包下,但我得到以下错误。 这是发生问题的的一部分 2018-12-31 23:58:10.616信息9952---[main]j.LocalContainerEntityManagerFactoryBean:初始化了持久性单元“默认”的JPA EntityManage