Springdata+jpa读取mysql数据库代码抛java.lang.NullPointerException错误

LoveSouthCity 2018-10-26 04:12:03
测试主函数:
@SpringBootApplication
public class unitTestApplication {
public static void main(String[] args)
{
ProvinceService provinceService = new ProvinceService();
Province province = new Province();
provinceService.queryProvince(province);
}
}

service层:
@Service
public class ProvinceService {

@Autowired
public ProvinceRepository provinceRepository;

@PersistenceContext
public EntityManager entityManager;

//查询省份信息
public Province queryProvince(Province province) {

List<Province> provinceinfo = provinceRepository.findAll();
Province provinceresult = provinceinfo.get(0);
return provinceresult;
}
}

dao层:
@Transactional
public interface ProvinceRepository extends JpaRepository<Province, Long> {
public List<Province> findAll();
}

entity层:
@Entity
public class Province {
@Id
@GeneratedValue
private Long provinceId;

@Column(nullable = false)
private String provinceName;

public Province() {}

public Province(String provinceName) {
this.provinceName = provinceName;
}

@Column(name="province_id")
public Long getProvinceId() {
return provinceId;
}

public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}

@Column(name="province_name")
public String getProvinceName() {
return provinceName;
}

public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
}



运行主函数,报错如下:
Exception in thread "main" java.lang.NullPointerException
at com.wherever.service.ProvinceService.queryProvince(ProvinceService.java:29)
at com.wherever.unitTestApplication.main(unitTestApplication.java:22)

代码很简单,小弟初学springboot,初次接触jpa+springdata来管理数据库,请各位大神指教,感激不尽!!!
...全文
626 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
taiyangandyueliang 2018-10-30
  • 打赏
  • 举报
回复
spring boot的main方法怎么直接new 接口定义类 要用@Autowired注入 或者在junit中测试
LoveSouthCity 2018-10-30
  • 打赏
  • 举报
回复
引用 18 楼 taiyangandyueliang 的回复:
spring boot的main方法怎么直接new 接口定义类 要用@Autowired注入 或者在junit中测试

正解,结贴,谢谢
java-小学生 2018-10-29
  • 打赏
  • 举报
回复
引用 14 楼 u010564366 的回复:
引用 13 楼 yitian_66 的回复:
dao层没有注解啊 加上@Repository试试
不是这个问题呢兄弟


为什么不用加?不加怎么注入
LoveSouthCity 2018-10-29
  • 打赏
  • 举报
回复
顶贴,希望能出现正确答案啊
LoveSouthCity 2018-10-29
  • 打赏
  • 举报
回复
引用 13 楼 yitian_66 的回复:
dao层没有注解啊 加上@Repository试试
不是这个问题呢兄弟
java-小学生 2018-10-26
  • 打赏
  • 举报
回复
dao层没有注解啊 加上@Repository试试
qq_37378368 2018-10-26
  • 打赏
  • 举报
回复
这只是用来手动测试代码的
LoveSouthCity 2018-10-26
  • 打赏
  • 举报
回复
引用 10 楼 qq_37378368 的回复:
少了配置文件applicationContext.xml 里面要配置数据源,配置sqlSessionFactory,配置Dao层组件 配置service层组件 然后ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:***.xml"); 手动初始化applicationContext 后 appCt.getBean获取service再执行service的方法

我采用的springboot+springdata+jpa,你确定需要配置applicationContext.xml?
qq_37378368 2018-10-26
  • 打赏
  • 举报
回复
少了配置文件applicationContext.xml 里面要配置数据源,配置sqlSessionFactory,配置Dao层组件 配置service层组件 然后ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:***.xml"); 手动初始化applicationContext 后 appCt.getBean获取service再执行service的方法
LoveSouthCity 2018-10-26
  • 打赏
  • 举报
回复
引用 7 楼 qq_37378368 的回复:
@Autowired
public ProvinceRepository provinceRepository; 这个注入问题,application没有初始化,provinceRepository没有被应用放入容器内,注解注入时是个空

您好,请指教一下应该如何优化修改呢?我尝试一下,谢谢
邬魉 2018-10-26
  • 打赏
  • 举报
回复
仔细看了看 感觉好像是没有扫描到那个 dao 吧 如果你愿意 磨磨洋工的话 可以debug一下 看看他是在哪里抛空了
qq_37378368 2018-10-26
  • 打赏
  • 举报
回复
@Autowired
public ProvinceRepository provinceRepository; 这个注入问题,application没有初始化,provinceRepository没有被应用放入容器内,注解注入时是个空
LoveSouthCity 2018-10-26
  • 打赏
  • 举报
回复
引用 4 楼 h604675028 的回复:
实体类 更改为

@Entity
public class Province {
@Id
@GeneratedValue
@Column(name="province_id")
private Long provinceId;

@Column(name="province_name", nullable = false)
private String provinceName;

public Province() {}

public Province(String provinceName) {
this.provinceName = provinceName;
}


public Long getProvinceId() {
return provinceId;
}

public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}

public String getProvinceName() {
return provinceName;
}

public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
}


又或者 以下的写法

@Entity
public class Province {

private Long provinceId;

private String provinceName;

public Province() {}

public Province(String provinceName) {
this.provinceName = provinceName;
}

@Id
@GeneratedValue
@Column(name="province_id")
public Long getProvinceId() {
return provinceId;
}

public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}

@Column(name="province_name", nullable = false)
public String getProvinceName() {
return provinceName;
}

public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
}

如果分开写的话, 以我的拙见 应该会生成四个字段

您好,经测试,你提出的两种写法,不能解决问题,另外您说的这两种写法,本来也和jpa的注解写法规范不符
LoveSouthCity 2018-10-26
  • 打赏
  • 举报
回复
引用 3 楼 yitian_66 的回复:
Province province = new Province(); 这一行去掉
provinceService.queryProvince(province); 这个方法传参去掉
再试试
经过尝试,仍然不行,这个应该不会产生影响
邬魉 2018-10-26
  • 打赏
  • 举报
回复
实体类 更改为

@Entity
public class Province {
@Id
@GeneratedValue
@Column(name="province_id")
private Long provinceId;

@Column(name="province_name", nullable = false)
private String provinceName;

public Province() {}

public Province(String provinceName) {
this.provinceName = provinceName;
}


public Long getProvinceId() {
return provinceId;
}

public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}

public String getProvinceName() {
return provinceName;
}

public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
}


又或者 以下的写法

@Entity
public class Province {

private Long provinceId;

private String provinceName;

public Province() {}

public Province(String provinceName) {
this.provinceName = provinceName;
}

@Id
@GeneratedValue
@Column(name="province_id")
public Long getProvinceId() {
return provinceId;
}

public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}

@Column(name="province_name", nullable = false)
public String getProvinceName() {
return provinceName;
}

public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
}

如果分开写的话, 以我的拙见 应该会生成四个字段
java-小学生 2018-10-26
  • 打赏
  • 举报
回复
Province province = new Province(); 这一行去掉
provinceService.queryProvince(province); 这个方法传参去掉
再试试
LoveSouthCity 2018-10-26
  • 打赏
  • 举报
回复


补充数据库截图
LoveSouthCity 2018-10-26
  • 打赏
  • 举报
回复
补充贴一下配置文件:
application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/wherever?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=Ab12345
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
server.port=8080
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.check-template-location=true
spring.mvc.static-path-pattern=/**
spring.resources.static-locations = classpath:/templates/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent-output=true

pom.xml

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wherever</groupId>
<artifactId>Petgotoweb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<repositories>
<repository>
<id>newalimaven</id>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</repository>
</repositories>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧