&mesp;相同于spring的开发流程spring boot也是遵循持久层,业务层和展现层这三个层次的流程开发的。
在持久层上,最重要的就是数据库的操作。spring框架有好多可选的数据库操作方式,可以直接如我们在学习3中使用spring内置的jdbcTemplate:启动器为spring-boot-starter-jdbc;也可以使用第三方的持久化框架:启动器为spring-boot-starter-data-jpa。
我们和书上一样选择jdbc的启动器,在pom文件中增加如下代码:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
这里会发现都没有写明版蹦,这是因为在parent中都会规定好,要看具体的版本可以按住ctrl和鼠标左键点击parent标签,不断的向顶层走最后遇到个没有parent标签的pom可以看到很多的version在这个顶层pom被设定好了。
在导入了依赖包后,为力让spring boot能够自动装配数据源的连接在代码根目录resources下创建一个application.properties配置数据库的链接信息,代码如下:
#1
spring.datasource.url=jdbc:mysql://localhost:3306/sampledb
spring.datasource.username=root
spring.datasource.password=rootroot
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#2
#spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
#3
spring.datasource.max-wait=10000
spring.datasource.max-active=50
spring.datasource.max-idle=10
spring.datasource.min-idle=8
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=select 1
#4
#spring.datasource.jndi-name=java:comp/env/jdbc/sampleDs
#5
#spring.datasource.initialize=true
#spring.datasource.platform=mysql
#spring.datasource.data=data
#spring.datasource.schema=schema
在spring boot中可以用两种方式配置数据库连接,一种就是代码中#1
处使用datasource来配置数据库连接信息。在默认情况下,连接池用到是tomcat-jdbc,如果需要自定义格式同代码中的#2
.一开始我还以为jetty是不能用的,后来才知道连接池是用来优化性能的,和你使用啥服务器关系不大。
另一种方式是使用jndi如同这里的#4
,企业中常用这种方法来连接。
代码中的#3
是用来提供连接池的配置信息的,#5
是用来初始化数据库脚本的。
在完成了配置后,如同学习3一样,我们定义一个UserDao和LoginLogDao,这里domain中的User.java和LoginLog.java以及UserDao,LoginLogDao和学习3中的代码是一样的,只不过不用boot的时候是需要将dao装入到spring容器中的,那么在boot中节省了这一步。
这里的业务层同样于学习3的代码没有改动,只有一个UserService。那么spring boot中的特色就是如果要使用事务就在application这个主类上添加EnableTranscationManagement
注解如下:
package com.smart;
import org.springframework.boot.SpringApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableTransactionManagement
public class Application{
public static void main(String[] args)throws Exception{
SpringApplication.run(Application.class,args);
}
}
这样它就会自动去找别标记为@Transactional
的方法。
如同学习3,我们仍然勇敢mvc来实现展现层。
展现层中使用了jsp和jstl标签,所以我们要添加依赖并且将打包方式改为war,增加的代码如下:
<packaging>warpackaging>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-jspartifactId>
dependency>
修改一下Application即可启用MVC,代码如下:
package com.smart;
import org.springframework.boot.SpringApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
@EnableTransactionManagement
public class Application extends SpringBootServletInitializer{
public static void main(String[] args)throws Exception{
SpringApplication.run(Application.class,args);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
这里的改动是让application来继承了boot提供的servlet的初始化器,并重写了其中的configure()方法。
这里仍然编写LoginController,代码同学习3,并且将login.jsp和main.jsp放入src/main/webapp/WEB_INF/jsp中。
这里需要知道的是spring boot对/static,/public,/resources或是/META_INF/resources目录下的静态文件提供支持。
完成上述目录后,最后在application.properties中配置视图路径,代码如下:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
这里prefix是指定视图路径前缀,suffix是指定视图后缀。
启动spring boot就可以看到结果了。