=======================================
环境: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、前端页面等。。。
完成后的项目结构:
===================================================================
建立成的项目结构和目前有的依赖
引入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代码.
完成。