提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、创建SpringBoot项目
- 二、遇到的问题
- 1.问题:whitelabel error page
- 2.问题:Failed to configure a DataSource: 'url' attribute is not specified and no embedded
- 3.问题:com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from DATE to java.lang.Integer
- 4.问题:网页查询结果显示的数据不完整,role的数据都不显示。
- 5.问题:xml文件中的if语句判断null出错
- 6.问题:spring-boot-maven-plugin报红
- 7.问题:Invalid bound statement (not found): com.example.course.dao.UserMapper.findById
前言
一些关于springboot的内容
一、创建SpringBoot项目
我用的idea进行创建,所以较为简单。
这里选8,我之前没选8就提示我有问题。
也有的说数据库选jdbc,这些问题都不大,SpringWeb一定要选。数据库和mybatis之后可以在配置文件加。
大概就是这样。
<?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.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springBootDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springBootDemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后就是编写application.properties,位置在这
主要是关于数据库的配置和mapper文件路径的一些配置。
代码大概是这样
spring.thymeleaf.cache=false
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
#注意加cj,我之前没加cj就报错了,暂时还没去查有什么区别
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mybatis是我的数据库名字,根据你的数据库名来写,?serverTimezone=UTC这个是设置时区
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
mybatis.type-aliases-package=com.example.entity
#设置mapper.xml文件路径
mybatis.mapperLocations=classpath:mapper/*.xml
然后就是各个文件的文件的编写了。
大概是这六个文件,那个UserMapper我也不知道放哪里,放哪里问题应该不大,先放在dao里面。顺序也标出来了,先写哪个后写哪个。
1.User.class
要跟数据库里的数据以及数据类型对应。记得写getter和setter,以及toString,构造函数可以不用写,写了有时候还要出问题。
快速设置setter和getter:点一下你要设置的.class文件内部代码,然后同时按alt和insert键,选择一下就好了
代码大概如下:
package com.example.course.dao;
import java.util.Date;
public class User {
private int id;
private String uname;
private String name;
private int age;
private Date birth;
@Override
public String toString() {
return "User{" +
"id=" + id +
", uname='" + uname + '\'' +
", name='" + name + '\'' +
", age=" + age +
", birth=" + birth +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
2.UserMapper.java(这是个接口)
package com.example.course.dao;
//写一个方法,比如通过id寻找,记得加@Mapper,要不然其他东西找不到,我也不知道为什么,这有啥找不到的
@Mapper
public interface UserMapper {
User findById(int id);
}
3.User.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--注意namespace要和你的项目对应,resultType也要和你的项目对应-->
<mapper namespace="com.example.course.dao.UserMapper">
<select id="findById" resultType="com.example.course.dao.User">
select * from user where id=#{id};
</select>
</mapper>
4.UserService.java
package com.example.course.service;
import com.example.course.dao.User;
//要和UserMapper中的对应
public interface UserService {
User findById(int id);
}
5.UserServiceImpl.java
package com.example.course.serviceImpl;
import com.example.course.dao.User;
import com.example.course.dao.UserMapper;
import com.example.course.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findById(int id){
return userMapper.findById(id);
}
}
6.UserController.java
注意各个@的使用,不要弄错了,我现在还弄不怎么明白
package com.example.course.controller;
import com.example.course.dao.User;
import com.example.course.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@Autowired
private UserService userService;
@ResponseBody
@GetMapping("findById")
public User findById(int id){
return userService.findById(id);
}
}
好了,六个写完了,现在运行这个application看看。
没有问题
再在网页里看看。
输入:http://localhost:8080/findById?id=1
成功了,其实中间出了一个问题,结果发现是xml文件下的namespace写错了,有点尴尬。
二、遇到的问题
1.问题:whitelabel error page
解决方案:
如果代码没错的话,路径也要对,controller文件夹必须和application文件放在同一个文件夹下,controller放在controller文件夹下。
2.问题:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded
原因就是没有写配置文件,没有连接数据库。
spring.thymeleaf.cache=false
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
mybatis.type-aliases-package=com.example.entity
mybatis.mapperLocations=classpath:mapper/*.xml
3.问题:com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from DATE to java.lang.Integer
原因:
从数据库获取出来数据后,是按数据库里的数据顺序对我们的类中数据进行赋值。
比如:
数据库里的顺序是:
但是我的构造函数是:
birth在最后了,跟数据库中的数据顺序对不上,所以赋值报错。
改一下顺序就好了。好像不写构造函数也不会出现这种问题
4.问题:网页查询结果显示的数据不完整,role的数据都不显示。
我也不知道具体什么原因,当我把resultmap中的collection改成association就好了。可能存在一些我不知道的规则。
5.问题:xml文件中的if语句判断null出错
解决方法:
通过网址进行传参,对于role_name=
传过去的时候,role_name不是null,而是空字符串所以role_name!=null
,roll_name==""
所以在进行if判断时,就应该用role_name.length()!=0
来进行判断。
还有的数据类型会自动赋初始值,比如int,所以用null进行判断的时候要多注意
6.问题:spring-boot-maven-plugin报红
原因:缺少版本号,但是我有的项目也没写版本号啊,就奇了个怪。
版本号要跟springboot的版本号相同,可以看看前面的spring-boot-starter-web或者spring-boot-starter-test的版本号,鼠标放上去就可以看到。
7.问题:Invalid bound statement (not found): com.example.course.dao.UserMapper.findById
我还在笔记里提示,不要把namespace写错了,结果我立马就写错了,啊,这。