新拉的java项目如何设置_spring

=======================================


环境:IDEA2021+JDK8+MAVEN3.8

前端:axios、vue.js、elementUI

请求响应、数据交互:axios+jackson

后端:见POM.XML由springboot整合。主要有数据库MySQL ,数据源Druid,持久层狂框架mybatis,mybatis-spring、spring核心容器、spring事务、spring MVC、测试junit和spring-test。

web服务器:tomcat(有springboot整合)
版本:springboot2.5.6。其他除了druid数据源版本,由springboot统一控制自动匹配。

springboot整合数据源、连接池、mybatis步骤:

        1创建SpringBoot工程

        2勾选配置使用的技术

        3设置dataSource相关属性(JDBC参数)

        4定义数据层接口映射配置

         5编写service、controller、前端页面等。。。

完成后的项目结构:

新拉的java项目如何设置_新拉的java项目如何设置_02

 

新拉的java项目如何设置_List_03

===================================================================

新拉的java项目如何设置_新拉的java项目如何设置_04

 

新拉的java项目如何设置_新拉的java项目如何设置_05

 建立成的项目结构和目前有的依赖

新拉的java项目如何设置_spring_06

引入Druid坐标

<!--TODO 添加必要的依赖坐标-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>

将配置文件更名为application.yml,yml格式的文件相比于properties格式的更利于数据的交互。配置数据源信息和连接池

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db #?servierTimezone=UTC
    username: root
    password: 1234
    type: com.alibaba.druid.pool.DruidDataSource
#解决接收参数乱码
server:
  tomcat:
    uri-encoding: UTF-8
  servlet:
    encoding:
      charset: UTF-8

根据数据库表结构创建实体类

public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;

编写mybatis使用的mapper,并使用注解编写SQL语句,并通过@Mapper注解告诉IOC容器,这是mybatis的mapper

package com.example.ssm2springboot.dao;


import com.example.ssm2springboot.domain.Book;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface BookDao {

    //    @Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
    @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
    public int save(Book book);

    @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
    public int update(Book book);

    @Delete("delete from tbl_book where id = #{id}")
    public int delete(Integer id);

    @Select("select * from tbl_book where id = #{id}")
    public Book getById(Integer id);

    @Select("select * from tbl_book")
    public List<Book> getAll();

    @Select("select * from tbl_book where name like #{bookName} ")
    List<Book> getByName(String bookName);
}

在test目录中编写DAO测试类

package com.example.ssm2springboot.dao;

import com.example.ssm2springboot.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class DaoTest {
    @Autowired
    BookDao bookDao;

    @Test
    void contextLoads() {
        List<Book> all = bookDao.getAll();
        System.out.println(all);
    }
}

测试通过编写service和impl

package com.example.ssm2springboot.service;


import com.example.ssm2springboot.domain.Book;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
public interface BookService {

    /**
     * 保存
     *
     * @param book
     * @return
     */
    public boolean save(Book book);

    /**
     * 修改
     *
     * @param book
     * @return
     */
    public boolean update(Book book);

    /**
     * 按id删除
     *
     * @param id
     * @return
     */
    public boolean delete(Integer id);

    /**
     * 按id查询
     *
     * @param id
     * @return
     */
    public Book getById(Integer id);

    /**
     * 查询全部
     *
     * @return
     */
    public List<Book> getAll();

    List<Book> getByName(String bookName);
}
package com.example.ssm2springboot.service.impl;


import com.example.ssm2springboot.controller.Code;
import com.example.ssm2springboot.dao.BookDao;
import com.example.ssm2springboot.domain.Book;
import com.example.ssm2springboot.exception.BusinessException;
import com.example.ssm2springboot.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author ldj
 */
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private  BookDao bookDao;
    @Override
    public boolean save(Book book) {
        return bookDao.save(book) > 0;
    }

    @Override
    public boolean update(Book book) {
        return bookDao.update(book) > 0;
    }

    @Override
    public boolean delete(Integer id) {
        return bookDao.delete(id) > 0;
    }

    @Override
    public Book getById(Integer id) {
        if (id == 1) {
            System.out.println("id=1不能编辑");
            throw new BusinessException(Code.BUSINESS_ERR, "请不要使用你的技术挑战我的耐性!");
        }
//        //将可能出现的异常进行包装,转换成自定义异常
//        try{
//            int i = 1/0;
//        }catch (Exception e){
//            throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服务器访问超时,请重试!",e);
//        }
        return bookDao.getById(id);
    }

    @Override
    public List<Book> getAll() {
        return bookDao.getAll();
    }

    @Override
    public List<Book> getByName(String bookName) {
        bookName = "%" + bookName + "%";
        return bookDao.getByName(bookName);
    }
}

编写service测试类

package com.example.ssm2springboot.service;

import com.example.ssm2springboot.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class ServiceTest {
    @Autowired
    BookService bookService;

    @Test
    public void getAll() {
        List<Book> all = bookService.getAll();
        System.out.println(all);
    }
}

service测试通过,编写自定义异常、编写统一异常处理类、编写controller,编写统一状态码、编写统一返回值类。代码见SSM代码。

maven clean再install,再从springboot启动类启动项目。

postman测试接口。

将之前SSM项目中与WEB-INF文件夹同级别的前端资源拷贝到springboot项目的static目录下即可。代码见SSM代码.

完成。