java - 找不到 Spring Boot 启动休眠配置
问题描述
您好我正在尝试使用spring boot创建一个学生webapp,但我似乎无法让它运行,因为每次找不到hibernate sessionfactory时都会出现错误,我应该在我的配置。
我以为我正确配置了 webapp,但我似乎无法让它找到我在 DAO 中配置的休眠会话工厂,任何关于我哪里出错的帮助将不胜感激。
这里是 Spring Boot 启动器类
@SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class)
@ComponentScan({"model", "controller", "dao", "service"})
public class StudentsApplication {
public static void main(String[] args) {
SpringApplication.run(StudentsApplication.class, args);
}
}
这是我的 DAO 课程
@Repository
@Transactional
public class StudentDao {
@Autowired
SessionFactory sessionFactory;
public Student getStudent(final int id) {
@SuppressWarnings("unchecked")
TypedQuery<Student> q = sessionFactory.getCurrentSession().createQuery(
"from student where = id").setParameter("id", id);
return q.getSingleResult();
}
public List<Student> getAllStudents() {
@SuppressWarnings("unchecked")
TypedQuery<Student> q = sessionFactory.getCurrentSession().createQuery(
"from student");
return q.getResultList();
}
public void addStudent(final Student student) {
sessionFactory.getCurrentSession().save(student);
}
public void updateStudent(final Student student) {
sessionFactory.getCurrentSession().saveOrUpdate(student);
}
public void deleteStudent(final int id) {
sessionFactory.getCurrentSession().createQuery(
"delete from student where = id").setParameter("id", id)
.executeUpdate();
}
}
这是我的配置类
@Configuration
@PropertySource({"classpath:application.properties"})
public class DbConfig {
@Autowired
private Environment environment;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getProperty("jdbc.url"));
dataSource.setUsername(environment.getProperty("jdbc.username"));
dataSource.setPassword(environment.getProperty("jdbc.password"));
return dataSource;
}
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setDataSource(dataSource());
Properties props = new Properties();
props.put("format_sql", "true");
props.put("hibernate.show_sql", "true");
factoryBean.setHibernateProperties(props);
factoryBean.setPackagesToScan("com.alpheus.students.entity");
// factoryBean.setAnnotatedClasses(Student.class);
return factoryBean;
}
@Bean
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}
}
这是我的属性文件
# Connection url for the database
spring.datasource.url=jdbc:mysql://localhost:3308/week04
spring.datasource.username=user
spring.datasource.password=pass
server.port=9999
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#view resolver
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp
这是我的控制器类
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("/home")
public String getAllStudents(Model studentsModel) {
List<Student> listStudents = studentService.getAllStudents();
studentsModel.addAttribute("listStudents", listStudents);
return "student-list";
}
@GetMapping("/student/{id}")
public String editStudent(@PathVariable int id, Model studentModel) {
studentModel.addAttribute("student", studentService.getStudent(id));
return "student-form";
}
@PostMapping("/student/new")
public String saveStudent(@ModelAttribute("student")Student student) {
studentService.addStudent(student);
return "redirect:/";
}
@GetMapping("/student")
public String showNewForm() {
return "student-form";
}
@PostMapping("/student/update/{id}")
public String updateStudent(@ModelAttribute("student") Student student) {
studentService.updateStudent(student);
return "redirect:/";
}
@GetMapping(value = "/student/delete/{id}")
public String deleteStudent(@PathVariable int id) {
studentService.deleteStudent(id);
return "redirect:/";
}
}
解决方案
推荐阅读
- svg - svg viewBox 奇怪的行为?
- jenkins - Bitbucket 团队/项目 - 在管道 Jenkinsfile 中获取 BITBUCKET_PAYLOAD
- node.js - 在用户输入上触发电报机器人命令
- spring-boot - 尝试从 docker 上发布的 Neo4jRepository 检索数据时出现 Neo4jSession 错误[ONLY DOCKER ISSUE]
- ios - 将 UIView/UIGestureRecognizer 添加到 UIPresentationController 中的呈现视图
- tensorflow - 如何在云中部署实时学习张量流模型?
- apache-spark - 提取键值时保持从 MapType 中键的顺序
- jenkins-pipeline - 从 shell 阶段中止 jenkins pipline 项目
- java - 登录后如何为不同角色的用户(如学生、教师和家长)添加导航抽屉?
- angular - 角度用 formArray 填充数据