之前搭传统的ssm框架,配置⽂件很多,看了⼏天⽂档才把那些xml的逻辑关系搞得七七⼋⼋,搭起来也是很⿇烦,那时我完全按⽹上那个demo的版本要求(jdk和tomcat),所以最后是各种问题没成功跑起来。 今天尝试⽤springboot来整合,不敢相信才失败⼏次就成功了!!
现在来记录⼀下过程:
⾸先springboot基本的建⽴就不讲了,之前的博客⾥⾯有写。 添加POM依赖:
关于dao层的依赖就是后⾯两个mysql的connector和mybatis的starter(这个可是好东西)
开始写代码:
这⾥我们有个简单是数据表:
我们的⽬的是 ⽤get发⼀个带有 id值的请求,服务器根据id值返回这个图书管理员的全部信息并⽤json的⽅式直接显⽰在页⾯上,
Controller:
@RestController
public class LibrarianController {
@Autowired
private LibrarianService librarianService;
@GetMapping(\"/getLibrarian\")
public Librarian getALibrarianInfo(int id) { //System.out.println(\"test :id: \"+id);
return librarianService.selectLibrarian(id); }}
RestController是responsebody+Controller两个注解的合体,⼀般就拿来直接传json数据。 为什么可以直接传个对象过去呢?这是因为springboot内置了jackson模块,可以在maven的依赖下看到这⽅⾯的jar包(之前我写是按⽹上的教程⽤gson来处理的,⽐起来这个简直⽆敌)
然后看到我们注⼊的sevice,下⾯是service
Service:
public interface LibrarianService { Librarian selectLibrarian(int id);}
就是个接⼝
ServiceImpl:
@Service
public class LibrarianServiceImpl implements LibrarianService{
@Autowired
private LibrarianMapper librarianMapper;
@Override
public Librarian selectLibrarian(int id) { // TODO Auto-generated method stub return librarianMapper.selectLibrarian(id); }}
这⾥记得要加@Service备注,才会被spring⽣成bean然后注⼊到controller那⾥去。然后看到这⾥注⼊了个mapper Dao:
package com.example.dao;
import org.apache.ibatis.annotations.Mapper;import com.example.entity.Librarian;@Mapper
public interface LibrarianMapper { Librarian selectLibrarian(int id);}
这⾥加的@Mapper是 MyBatis的备注,⽬的是为了让spring能够根据xml和这个接⼝动态⽣成这个接⼝的实现。如果是加@Repository,就是spring⽣成⼀个bean,⾃动注⼊service的相关引⽤中。
然后是Mapper的xml⽂件(我的MyBatis的相关sql⽤的是xml)mapper.xml:
第三⾏的namespace很重要噢,它是指定这个xml所对应的是哪个dao(mapper)接⼝
resultMap是做个pojo和数据库表的对应(这⾥只写个Librarian不⽤写全路径是因为做了设置,下⾯会说)select标签的id对应的就是mapper接⼝中的⽅法名,parameterType就是传进来的参数类型
简单的配置与设置:
好现在讲讲设置,这⾥会想到,那些Controller啊,@Service啊还有MyBatis的注解@Mapper什么的spring怎么知道在哪呢?不⽤像mvc那样搞个扫描设置吗?
是的要的,这些我们在启动类做了简单的设置:
package com.example.main;
import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 指定所扫的包,会⾃动扫描指定包下的全部标有@Component的类,并注册成bean, * 当然包括@Component下的⼦注解@Service,@Repository,@Controller。 * @author 85060 * */
@SpringBootApplication(scanBasePackages={\"com.example.*\@MapperScan(\"com.example.dao\")
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args); }}
关于这个SpringBootApplication,它其实是好⼏个注解的合体(之前的博客⾥有讲),所以可以直接在这写扫包的设置,然后那个@MapperScan是MyBatis提供的设置注解。
然后还有点配置⽂件:
spring.thymeleaf.cache=false spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/db_libraryspring.datasource.username=rootspring.datasource.password=4008
mybatis.type-aliases-package=com.example.entitymybatis.mapperLocations=classpath:mappers/*.xml
主要有关的是第四⾏开始的,最后两⾏⼀个是设置基本包(包别名)也就是为什么在mapper.xml中可以只写⼀个Librarian的原因。最后⼀⾏的很重要,是告诉系统在哪⾥去找mapper.xml⽂件。
上⼀个最后的效果图:再放⼀个项⽬结构图:
放两个springboot和mybatis整合讲得⽐较好的博客供参考:
因篇幅问题不能全部显示,请点此查看更多更全内容