spring boot day(1)hello world
一、idea创建spring boot项目
1.1 选择Spring initializr
1.2 修改项目名称
1.3 依赖选择
- spring boot devtools
- spring web
1.4 编写controller
package com.example.helloworld.contoller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class helloController {
@RequestMapping("/say")
public String showHello(){
return "hello world";
}
}
1.5 运行HelloworldApplication
- 右键:run HelloworldApplication
package com.example.helloworld;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
}
1.6 8080,默认到login页面
- 因为我们在 SpringBoot 项目中使用了 SpringSecurity
- 用户名user,密码是项目启动给我们说的
1.7 进入login,访问"http://localhost:8080/hello/say"
二、遇到的错误
2.1 数据库未配置错误
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-11-21 18:19:38.935 ERROR 15048 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
- 问题原因
spring boot 会默认加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个类, 而DataSourceAutoConfiguration类使用了@Configuration注解向spring注入了dataSource bean,又因为项目(oss模块)中并没有关于dataSource相关的配置信息,所以当spring创建dataSource bean时因缺少相关的信息就会报错。 解决办法:在@SpringBootApplication注解上加上exclude,解除自动加载DataSourceAutoConfiguration
- 解决方法
@SpringBootApplication(exclude= {
DataSourceAutoConfiguration.class})
2.2 拒绝连接
- 之前的是name现在改成username
spring.datasource.username=root
2.3 Could not find acceptable representation
- 实体类中没有get/set方法
三、spring boot mybatis
3.1 添加所需依赖
- mysql是连接数据库需要的
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
3.2 数据库配置
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=510363
# JDBC Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JDBC URL
spring.datasource.url=jdbc:mysql://localhost:3306/world
#spring.datasource.url=jdbc:mysql://localhost:3306/world?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
#spring.datasource.url=jdbc:mysql://localhost:3306/db_student?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
3.3 entity类
- 与数据库中的表对应
package com.example.helloworld.entity;
public class Dog {
String name;
String age;
int number;
public Dog(String name, String age)
{
this.name = name;
this.age = age;
}
}
3.4 dao类
@Mapper
public interface DogMapper {
@Select("select * from dog where number = #{number}")
public Dog findMsg(int number);
@Delete("delete from dog where number = #{number}")
public int DeleteMsg(int number);
@Update("update dog set name=#{name} where number = #{number}")
public int updateMsg(String name, int number);
@Insert("insert into dog(name,age) values(#{name},#{age})")
public int insertMsg(Dog dog);
}
3.5 service类
@RestController
@ResponseBody
public class DogController {
@Autowired
DogMapper dogMapper;
@RequestMapping("/getMsg/{id}")
public Dog select(@PathVariable int id){
Dog dog = dogMapper.findMsg(id);
return dog;
}
@RequestMapping("/delMsg/{id}")
public int delMsg(@PathVariable int id){
int number = dogMapper.DeleteMsg(id);
return number;
}
@RequestMapping("/upMsg/{name}/{id}")
public int UpMsg(@PathVariable String name, @PathVariable int id){
int num = dogMapper.updateMsg(name, id);
return num;
}
@RequestMapping("/insMsg/{name}/{age}")
public int InsMsg(@PathVariable String name,@PathVariable String age){
Dog dog = new Dog(name, age);
int res = dogMapper.insertMsg(dog);
return res;
}
}
3.6 说明
- select返回的是对象类
- del返回的是0或者1
- ins返回的是0或者1
- update返回的是0或者1
3.7 分页功能的实现
- 实现分页功能
- Math.ceil():向上取整
- Math.floor():向下取整
public ArrayList<Dog> getPageMsg(@PathVariable("pageNum")int pageNum,@PathVariable("everyPageNum")int everyPageNum){
//获取数据库总数
int totalNumber = dogMapper.getMsgNumber();
//每一页的数目
int everyPageRealNumber;
//计算查询的页数从第几个开始
int start = everyPageNum * (pageNum - 1);
//判断是不是最后一页,最后一页的数据数目不确定
if(pageNum == (int)Math.ceil((float)totalNumber / (float)everyPageNum)){
everyPageRealNumber = totalNumber - start;
}else {
everyPageRealNumber = everyPageNum;
}
System.out.println(totalNumber / everyPageNum);
System.out.printf("当前页的页码:%d",pageNum);
System.out.println();
System.out.printf("数据表的数据总数为:%d",totalNumber);
System.out.println();
System.out.printf("当前页的起始页码:%d",start);
System.out.println();
System.out.printf("当前页的数据数量:%d",everyPageRealNumber);
System.out.println();
ArrayList<Dog> list = dogMapper.getPageMsg(start,everyPageRealNumber);
return list;
}
3.8 Arraylist数组中类对象排序
public class DogListSort {
public static ArrayList<Dog> listSortUtil(ArrayList<Dog> dogs) {
Collections.sort(dogs, new Comparator<Dog>() {
@Override
public int compare(Dog o1, Dog o2) {
return o1.getNumber() - (o2.getNumber());
}
});
return dogs;
}
public static void main(String[] args) {
Dog dog = new Dog("jack","12",2);
Dog dog1 = new Dog("rose","9",7);
Dog dog2 = new Dog("jerry","19",5);
Dog dog4 = new Dog("coos","19",9);
Dog dog5 = new Dog("coos","19",1);
Dog dog6 = new Dog("coos","19",29);
ArrayList<Dog> doglist = new ArrayList<>(3);
doglist.add(dog);
doglist.add(dog1);
doglist.add(dog2);
doglist.add(dog4);
doglist.add(dog5);
doglist.add(dog6);
ArrayList<Dog> list = listSortUtil(doglist);
for(Dog dog3 : list){
System.out.printf("%s,%s,%s",dog3.getAge(),dog3.getName(),dog3.getNumber());
System.out.println();
}
}
}
四、其他安装
4.1 maven安装
参考:maven下载与安装
4.2 检测maven配置文件是否正确
mvn help:system