Hibernate org.springframework.beans.factory.unsatifiedDependencyException:创建名为';用户控制器';
相关的问题似乎对我没有帮助。这是我第一次使用SpringBoot开发webapp,我遇到了这个错误。这是我的密码 用户控制器Hibernate org.springframework.beans.factory.unsatifiedDependencyException:创建名为';用户控制器';,hibernate,spring-boot,javabeans,crud,Hibernate,Spring Boot,Javabeans,Crud,相关的问题似乎对我没有帮助。这是我第一次使用SpringBoot开发webapp,我遇到了这个错误。这是我的密码 用户控制器 package com.rtc_insurance.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import or
package com.rtc_insurance.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.rtc_insurance.dao.UserDAO;
import com.rtc_insurance.entity.Users;
@Controller
@RequestMapping("/user")
public class UserController {
//inject DAO
//scan for a component that implements UserDAO interface
@Autowired
private UserDAO userDAO;
@RequestMapping("/list")
public String listUsers(Model theModel) {
//get user from the dao
List<Users> theUsers = userDAO.getUsers();
//add the customer to the model
//users = table name
theModel.addAttribute("users",theUsers);
return "list-users";
}
}
package com.rtc_insurance.controller;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.context.annotation.Bean;
导入org.springframework.stereotype.Controller;
导入org.springframework.ui.Model;
导入org.springframework.web.bind.annotation.RequestMapping;
导入com.rtc_insurance.dao.UserDAO;
导入com.rtc_insurance.entity.Users;
@控制器
@请求映射(“/user”)
公共类用户控制器{
//注入刀
//扫描实现UserDAO接口的组件
@自动连线
私有UserDAO UserDAO;
@请求映射(“/list”)
公共字符串列表用户(模型){
//从dao获取用户
列出users=userDAO.getUsers();
//将客户添加到模型中
//users=表名
model.add属性(“users”,theUsers);
返回“列表用户”;
}
}
用户道
package com.rtc_insurance.dao;
import java.util.List;
import com.rtc_insurance.entity.Users;
public interface UserDAO {
public List<Users> getUsers();
}
package com.rtc_insurance.dao;
导入java.util.List;
导入com.rtc_insurance.entity.Users;
公共接口UserDAO{
公共列表getUsers();
}
UserDAOImpl
package com.rtc_insurance.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.rtc_insurance.entity.Users;
@Repository
public class UserDAOImpl implements UserDAO {
//need to inject the session factory
@Autowired
private SessionFactory sessionFactory;
@Override
@Transactional
public List<Users> getUsers() {
//get current hibernate session
Session currentSession = sessionFactory.getCurrentSession();
//query
Query<Users> theQuery =
currentSession.createQuery("from users", Users.class);
//execute result
List<Users> users = theQuery.getResultList();
//return list of users
return users;
}
}
package com.rtc_insurance.dao;
导入java.util.List;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.query.query;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.context.annotation.Bean;
导入org.springframework.stereotype.Repository;
导入org.springframework.transaction.annotation.Transactional;
导入com.rtc_insurance.entity.Users;
@存储库
公共类UserDAOImpl实现UserDAO{
//需要注入会话工厂
@自动连线
私人会话工厂会话工厂;
@凌驾
@交易的
公共列表getUsers(){
//获取当前休眠会话
会话currentSession=sessionFactory.getCurrentSession();
//质疑
查询查询=
currentSession.createQuery(“来自用户”,users.class);
//执行结果
List users=theQuery.getResultList();
//返回用户列表
返回用户;
}
}
Servlet
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- Add support for component scanning -->
<context:component-scan base-package="com.rtc_insurance" />
<!-- Add support for conversion, formatting and validation support -->
<mvc:annotation-driven/>
<!-- Define Spring MVC view resolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- Step 1: Define Database DataSource / connection pool -->
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/rtc_insurance?useSSL=false&characterEncoding=latin1&serverTimezone=UTC" />
<property name="user" value="root" />
<property name="password" value="root" />
<!-- these are connection pool properties for C3P0 -->
<property name="initialPoolSize" value="5"/>
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="maxIdleTime" value="30000" />
</bean>
<!-- Step 2: Setup Hibernate session factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="packagesToScan" value="com.rtc_insurance.entity" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- Step 3: Setup Hibernate transaction manager -->
<bean id="myTransactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- Step 4: Enable configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="myTransactionManager" />
<!-- Add support for reading web resources: css, images, js, etc ... -->
<mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources>
</beans>
org.hibernate.dialogue.mysqldialogue
真的
我一直在犯这个错误。Spring boot为您做了很多开箱即用的事情 配置
数据源
首先是数据源。遗憾的是,C3P0不是受支持的连接池提供程序(只有DBCP、Hikari和Tomcat是)。这意味着您必须手动创建DataSource
bean,例如:
@Bean
@ConfigurationProperties(“custom.datasource”)
公共组合池数据源数据源(){
返回新的ComboPooledDataSource();
}
如果将此方法添加到主类中,或者添加了@Configuration
注释的任何其他类中,Spring将自动拾取数据源bean,并为您创建一个TransactionManager
和一个SessionFactory
。它还支持注释驱动的事务
由于我们使用的是@ConfigurationProperties
,所有以custom.datasource.*
开头的属性都会自动注入到数据源中。这允许您从应用程序.properties
中配置数据源。如果您还没有这样的文件,请在类路径上创建一个,并添加以下属性:
custom.datasource.jdbc-url=jdbc:mysql://localhost:3306/rtc_insurance?useSSL=false&characterEncoding=latin1&serverTimezone=UTC
custom.datasource.user=root
custom.datasource.password=root
custom.datasource.initial-pool-size=5
custom.datasource.min-pool-size=5
custom.datasource.max-pool-size=20
custom.datasource.max-idle-time=30000
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
用Spring数据替换DAO
下一部分是刀。Spring数据项目试图使这些事情变得更容易。首先,您需要将springbootstarter数据jpa
依赖项添加到您的项目中。如果使用Maven,可以执行以下操作:
org.springframework.boot
spring引导启动器数据jpa
com.zaxxer
希卡里普
排除是可选的,但允许您排除默认连接池(即Hikari),因为您不使用它。之后,您可以用以下内容替换整个UserDAO
和UserDAOImpl
:
public interface UserRepository扩展了JpaRepository{
}
通过创建一个接口并从JpaRepository
(或crudepository
,…)扩展,Spring知道它应该为您创建一个存储库bean,类型为User
,标识符类型为Long
(您没有共享您的用户
实体,因此如果它不是长
,您可以更改泛型)
它还将包括一些默认方法,例如findAll()
,findById()
,save()
,delete()
,…这些方法您不再需要编写。因为您是getUsers()
方法基本上与findAll()相同
操作。这意味着您不需要该代码,只需将UserRepository
自动连接到控制器中,然后使用findAll()
操作即可
元件扫描
在XML配置中,您还有一个组件扫描:
这不再是必需的,因为Spring boot将自动扫描同一个包中的组件,或主类的任何子包。如果您想添加额外的componentscan,可以通过在主类顶部添加@componentscan(“com.xyz”)
注释,或使用注释的任何其他类来完成