springBoot + mybatis框架
我们都学过spring 和springmvc框架,也感受到了这两个框架的“地狱配置”,对于新手程序猿来说,可能配置一个项目就要花一天的时间,而springBoot简化了这些配置,使用springBoot构建一个项目可能十多分钟就能构建好一个项目,对程序猿非常友好。
目标:构建的项目是springBoot + mybatis项目
springBoot流程梳理:
和springMVC是一样的,程序无非就是前端请求--》后端服务器--》数据库--》然后返回前端。springBoot也是进行前后端分离,共分为4层
1、dao层
2、pojo层
3、service层
4、controller层
步骤:
1、IDEA构建springBoot项目
1.1 IDEA新建一个项目
1.2 选择Spring Initializr --》选择对于的JDK版本--》 选择springBoot快速构建项目的地址(注:底层还是使用springBoot的官网构建项目,这里IDEA一键式的实现了这个功能)
1.3、使用IDEA集成spring官网可能连接不上,需要设置代理
setting--输入http搜索--HTTP Proxy --Auto... --Check connection--输入网址--点击ok
1.4 根据自己项目修改对于的组名,包名,项目名 ,选择项目类型为maven项目,包类型为jar包,选择和前面一样的JDK版本
1.5 这个页面配置的是SpringBoot项目相关的依赖,可以根据自己的项目来选择相关依赖
1.5.1 开发工具 建议大家选择SpringBoot DevTools 和Lombok
-- SpringBoot DevTools :实现项目的热部署
-- Lombok : SpringBoot 项目的核心,使用注解编程,可以让java变得简洁、快速
1.5.2 选择web工程相关依赖,选择第一个即可
1.5.3 模板引擎,大家如果使用了就选择对于的依赖,这个项目不使用,就不勾选了
1.5.4选择SQL---》选择对于的依赖,JDBC API,MYSQL Driver、mybatis Framework,前两个要连接数据库是必选的,mybatis Framework是这次使用mybatis框架实现连接数据库。
1.6 填写项目名,可默认不修改--》Finish,创建项目
1.7项目创建成功,选择enable Auto-Import 允许自动导入
1.8 我们可以在左侧查看项目结构,在右侧查看导入的依赖等等,如果没有爆红,正常来说就是没问题
1.9 可以选择删除没用的目录,也可以不删除
删除多余的之后的目录结构:
2、分层编写代码
总体结构如下,注意每层都使用注解实现
2.1、dao层
-- 实现数据库操作
package com.duan.dao;
import com.duan.pojo.Books;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper #注解之后这个接口在编译时会生成相应的实现类
@Repository #用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。
public interface BookMapper {
List<Books> queryBookById(int id);
List<Books> queryAllBooks();
int addBook(Books book);
int deleteBookById(int id);
int updateBook(int id);
}
dao层的mapper.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">
<mapper namespace="com.duan.dao.BookMapper">
<!--增加一个Book-->
<insert id="addBook" parameterType="com.duan.pojo.Books">
insert into books (bookID,bookName,bookCount,detail)
value(#{bookID}, #{bookName},#{bookCount},#{detail})
</insert>
<!--根据id删除一个Book-->
<delete id="deleteBookById" parameterType="int">
delete from books where bookID=#{bookID}
</delete>
<!--更新Book-->
<update id="updateBook" parameterType="Books">
update books
set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}
where bookID = #{bookID}
</update>
<!--根据id查询,返回一个Book-->
<select id="queryBookById" resultType="Books">
select * from books
where bookID = #{bookID}
</select>
<select id="queryAllBooks" resultType="Books">
select * from mydatabase.books;
</select>
</mapper>
在resource路径下新建一个dao层的mapper.xml文件,在配置文件中指向这个路径:mybatis.mapper-locations=classpath:mybatis/*.xml
2.2、pojo层
--业务类
package com.duan.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
private int bookID;
private String bookName;
private String bookCount;
private String detail;
}
2.3、service层
-- 实现业务
接口
package com.duan.service;
import com.duan.pojo.Books;
import org.springframework.stereotype.Service;
import java.util.List;
public interface bookService {
List<Books> queryBookById(int id);
List<Books> queryAllBooks();
int addBook(Books book);
int deleteBookById(int id);
int updateBook(int id);
}
实现类
package com.duan.service;
import com.duan.dao.BookMapper;
import com.duan.pojo.Books;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
#Service层的注解:将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了
public class bookServiceImpl implements bookService {
@Autowired(required = false)
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper){
this.bookMapper=bookMapper;
}
@Override
public List<Books> queryBookById(int id) {
return bookMapper.queryBookById( id);
}
@Override
public List<Books> queryAllBooks() {
return bookMapper.queryAllBooks();
}
@Override
public int addBook(Books book) {
return bookMapper.addBook(book);
}
@Override
public int deleteBookById(int id) {
return bookMapper.deleteBookById(id);
}
@Override
public int updateBook(int id) {
return bookMapper.updateBook(id);
}
}
4、controller层
-- 相当于servlet,处理前端请求,返回后端响应
package com.duan.contorller;
import com.duan.pojo.Books;
import com.duan.service.bookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
#controller层注解:将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了
public class BooksController {
#自动装配
@Autowired
@Qualifier("bookServiceImpl") #表明了哪个实现类才是我们所需要的
private bookService bookService;
@GetMapping("/queryBook")
public List<Books> queryBookById(){
List<Books> books =bookService.queryAllBooks();
return books;
}
}
关键的配置文件
1、配置数据库连接信息
2、配mybatis的相关信息
3、spring相关的配置都是由注解实现了,不需程序猿手动配置了,真是太方便了
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#整合mybatis
mybatis.type-aliases-package=com.duan.pojo
#指向mapper.xml文件的路径
mybatis.mapper-locations=classpath:mybatis/*.xml
mybatis.configuration.log-impl=org.apache.ibatis.logging.log4j2.Log4j2Impl
#mybatis.config-location=classpath:mybatis/*.xml
运行springBoot的主方法类:
看到有spring的图标出现,并且没有报错,至此,我们的springboot项目就已经搭建好了
项目结构是这样的: