扫盲了Java基本语法,证明自己不是软件天才,要靠一点一滴;从0开始时,最难理解的是各种概念和缩写,温习了无数遍,仍旧懵懵懂懂。开始想弄明白SpringBoot运行过程,花了很长时间也没看到全貌,只理解如下大概:
选材:使用了SpringBoot,Maven,Mybatis,*.yml配置文件
主体流程:
启动类(main方法)
——》controller类中的方法
——》service类中的方法(业务代码)
——》Mybatis的mapper目录下接口类
——》mapper.XML(写SQL/SP)
——》读取application.yml配置的数据库名,数据库,用户名和密码
——》数据库
【1入口】一个SpringBoot一定要有个启动类,叫什么无所谓,能定位这个类是启动类的是@SpringBootApplication和main方法:
@SpringBootApplication
public static void main(String[] args) {
SpringApplication.run(TestSbApplication.class, args);
}
【2第二道门】有了启动类,就有了入口;走进入口就会找对外公布的服务接口:Controller。所以必然会有一个目录存放,目录名字随便起,起作用的是目录中要有一个类,类中要有方法,供外部调用:
@RestController //没有它,这个类就是个普通类,有了它,从main进入后它就是第二道门
@RequestMapping("/operateBooks") //外部访问“分类门/职能门”,门多的时候有用,自己多建几个就有体会
public class BookController {
@Autowired
private BookService bookService;
@PostMapping("query")
public List<Book> getAllBooks(Integer id ,String name){
return bookService.getAllBooks2(id,name); //调用Service层的“接口方法”而不是类方法
}
}
注:
(1)可以有多个对外服务接口,可以有多个方法。
(2)为什么能直接调用接口内方法就可以实现,归公于接口方法上的@Autowired,实现了自动注册,即容器的自动创建Service service = new ServiceImpl(多态的属性:运行看左 = 编译和执行看右);
【3实际加工厂】有了服务接口,但实现一般不在这里写,会调用Service层。高级点的写法,在Service层分2部分,一部分是接口,一部分是service类。接口用来继承,类用来写复杂业务逻辑。
@Service //有了它,这个类才被赋予服务类,一系列内部操作才能用,包括自动创建
public class BookServiceImpl implements BookService {
private static final long serialVersionUID = 1L;
@Autowired
private BookMapperInterface bookMapperInterface;
@Override
public List<Book> getAllBooks2(Integer id,String name){
Logger logger = LoggerFactory.getLogger(BookController.class);
logger.info("BookServiceImpl--前");
return bookMapperInterface.getAllBooks(id,name);
}
}
【4数据库链接】进入service类,其实就可以反馈给浏览器内容了,包括静态内容,包括逻辑处理。但我们需要数据,一般都要用数据库,所以从这里去找DB里的数据。访问数据库,我们可以直接连,但都会选择ORM框架,类似:Hibernate(Nhibernate),iBatis,mybatis,EclipseLink,JFinal。 我们选择了简单点的mybatis。
Mybatis 有2部分,一个是接口,一个是XML文件。
-----------接口------------------------
@Mapper //有了它,这个接口才能入Mybatis的眼,才能自动注册和执行
@Repository
public interface BookMapperInterface {
List<Book> getAllBooks(Integer book_id,String book_name) ;
Integer insertBooks(@Param("book") Book book);
Integer insertBooks3(@Param("book") List<Book> book);
}
-----------XML文档------------------------
【5配置】做完上面4步,核心代码写完了,但闭眼一想还需要网址、端口号,这些都在application.yml中设置
server:
port: 8080
spring:
application:
name: test3
datasource:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost;database=TEST3
username: sa
password: 123
main:
allow-bean-definition-overriding: true
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
type-aliases-package: com.demo.springboot.pojo
因为使用Maven,所以还需要设置下POM.xml,这里面核心是处理依赖,就是想用什么现成的包或有名有姓的包,都要加在里面,才能在自己的类中引用和使用。