如何解决JDBCTemplate 为空
我正在尝试使用 JDBC 模板连接到数据库,并且有一个包含以下内容的 application.config 文件:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/herosighting<br>
spring.datasource.username=root<br>
spring.datasource.password=<br>
我确实知道在我尝试更改 application.properties
时正在读取此 server.port
并且它确实有效。
现在我有以下代码:
@Repository
public class LocationDaoImpl implements LocationDao
{
@Autowired
JdbcTemplate jdbc;
@Override
public Location addLocation(Location l) {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateLocation(Location l) {
// TODO Auto-generated method stub
}
@Override
public List<Location> getAllLocations() {
// TODO Auto-generated method stub
return null;
}
@Override
public void deleteLocationById(int id) {
// TODO Auto-generated method stub
}
@Override
public List<Location> heroLocationsById(int heroId) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Location> sightingsOnDate(Date date) {
// TODO Auto-generated method stub
return null;
}
@Override
public Location getLocationById(int id)
{
final String SELECT_ROOM_BY_ID = "SELECT * FROM location WHERE id = ?";
return jdbc.queryForObject(SELECT_ROOM_BY_ID,new LocationMapper(),id);//returns room Object
}
}
最后一个方法中的返回值是 null,因为 JDBCTemplate 为 null。
我在 main 中调用方法来测试它:
@Repository
public class Test {
@Autowired
static LocationDao dao;
public static void main(String[] args)
{
Location l = dao.getLocationById(1);
}
}
有趣的是,据我所知,我在另一个具有完全相同 pom.xml 和 jdbc 工作的项目的文件中具有完全相同的配置
我的 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sg</groupId>
<artifactId>SuperheroSightings</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SuperheroSightings</name>
<description>Full stack Spring application for Superhero Sightings</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
编辑:由于对我的问题感到困惑,我确实有一个主要的地方,我在那里安装了 spring 应用程序,这很好用:
@SpringBootApplication
public class SuperheroSightingsApplication
{
public static void main(String[] args)
{
SpringApplication.run(SuperheroSightingsApplication.class,args);
}
}
我不是要运行单元测试或其他任何东西。我想要做的就是从我的 DAO 运行一个方法来查看与数据库的连接是否正常工作。问题是 JDBCTemplate 为空,我不知道为什么。
这是确切的错误:
线程“main”中的异常java.lang.NullPointerException:无法调用“com.sg.SuperheroSightings.Dao.LocationDao.getLocationById(int)”,因为“com.sg.SuperheroSightings.Test.dao”为空 在 com.sg.SuperheroSightings.Test.main(Test.java:18)
解决方法
这不是 Spring Boot 应用程序的主要方法应该是什么样子。 正确启动应该是这样的:
public static void main(String[] args)
{
SpringApplication.run(Test.class,args);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。