springboot学习:建立springboot项目及相关注意事项

一、建立maven项目后引入依赖:
以下没有版本号的依赖表示在springboot父依赖中已锁定相应的版本号

必需依赖:

1.springboot父依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version>
</parent>

2.web依赖启动器

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

3.mysql驱动

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

4.mybatis的启动器

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.3.0</version>
    </dependency>

5.junit依赖启动器

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

非必需依赖:

1.lombok

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

通过在类上添加注释的方式为其建立get,set方法,构造器等,以及开启构建者模式
@Data
@NoArgsConstructor //无参构造器
@AllArgsConstructor //全参构造器
@Builder //构建者设计模式
2.解决配置文件绑定到bean上的提示问题

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

二、建立项目结构
1.建立如下图所示的项目结构与相应的引导类(StudentService为个人项目业务端接口,可忽略)
项目结构:

引导类(类名通常为你的项目名加上Application):

@SpringBootApplication
@MapperScan(basePackages = "(你的组织名所对应的包).boot.mapper")
public class SpringbootmybatisdemoApplication {//所有的java代码都要放在这个类所在的包下面(将包下所有的组件类加入springboot管理),它取代了配置类的组件扫描功能,test类也要在相对应的位置
    public static void main(String[] args) {
        SpringApplication.run(SpringbootmybatisdemoApplication.class,args);
    }
}

domain包存放数据库表所对应的实体类,mapper包存放持久层mapper接口,service包存放业务层接口及实现类,entity包存放统一返回类型的实体类,utils包存放工具类,web包存放控制器与统一异常处理类。
2.在引导类的包相对应的测试包下加入测试代码,比如加入mapper接口测试类:

3.在你的java包资源文件中加入static(前端资源(html,css,javascript,音频图片等)),mapper包为mapper接口映射文件,application.yml是配置文件(取代ssm中的配置类)

配置文件的编写

#tomcat配置(默认8080,非必需)
server:
  port: 80


#数据库驱动配置(必需)
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: 2474600586liu


#日志配置(公司项目中必需)
logging:
  level:
    组织包名: debug


#mybatis配置(必需)
mybatis:
  configuration:
    map-underscore-to-camel-case: true       #开启驼峰映射
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl    #开启数据库操作日志
  type-aliases-package: 组织包名.boot.domain.Student      #开别名(效果为可以将映射文件中Student的全类名替换为Student,可以选择不要这行)
  mapper-locations: classpath:mapper/*StudentMapper.xml   #映射文件路径

三、注意事项
1.在持久层mapper接口上添加,可以防止出现引用代理对象爆红

@Mapper
@Repository

2.在业务层实现类上添加@Transactional,在只有读取数据库操作的方法上添加@Transactional(readOnly = true)可以提高效率

@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;
    @Override
    @Transactional(readOnly = true)
    public Result findAll() {
        List<Student> all = studentMapper.findAll();
        return Result.success(all);
    }

    @Override
    public Result insert(Student student) {
        int inert = studentMapper.inert(student);
        if(inert>0){
            return Result.success();
        }
        else{
            return Result.error("添加失败");
        }
    }
}

3.业务层尽量restful的代码风格,即相应的请求类型处理相应的操作,比如get请求对应查询,post请求对应插入,put请求对应修改,delete请求对应删除

@RestController
@RequestMapping("/student")
@Slf4j
public class StudentController {
    @Autowired
    private StudentService studentService;
    @GetMapping
    public Result findAll(){
        Result all = studentService.findAll();
        log.info("findall");
        return all;
    }
    @PostMapping
    public Result insert(@RequestBody Student student){
        log.info("insert");
        return studentService.insert(student);
    }
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable(name = "id") Long id){
        log.info("delete");
        return studentService.delete(id);
    }
    @PutMapping
    public Result update(@RequestBody Student student){
        log.info("update");
        return studentService.update(student);
    }
    @GetMapping("/{id}")
    public Result findById(@PathVariable(name = "id") Long id){
        log.info("findbyid");
        return studentService.findById(id);
    }
}

4.在static粘贴引入前端时,需要使用maven的清理命令(clean)清理项目的target目录和通过构建过程生成的其他临时文件,否则可能会报错

posted @ 2024-01-27 11:08  liu52program小白  阅读(221)  评论(0)    收藏  举报