Springboot整合JDBC后,引入spring-boot-starter-jdbc,通过JdbcTemplate来操作数据库。
导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
@RestControllerpublic class UserController {
@Resource private JdbcTemplate jdbcTemplate;
//from fhadmin.cn
@GetMapping("/delete") public String delete() {
String sql = "delete from tb_user where id = 9";
jdbcTemplate.update(sql); return "delete ok";
}
@GetMapping("/update") public String update() {
String sql = "update tb_user set name= 'tom9' where id = 9";
jdbcTemplate.update(sql); return "update ok";
}
@GetMapping("/insert") public String insert() {
String sql = "insert into tb_user (id,name,age) values (10,'tom10',10)";
jdbcTemplate.update(sql); return "insert ok";
}
@GetMapping("/get") public List<Map<String, Object>> getList() {
String sql = "select * from tb_user";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); return list;
}
}
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <!-- druid 需要输出日志 from fhadmin.cn --> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
@Configurationpublic class DruidConfiguration {
/**
* yaml中druid其他配置默认是不会导入的,需要创建DruidDataSource时加载
* @return
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return new DruidDataSource();
}
}
@Configurationpublic class DruidConfiguration {
/**
* 配置Druid访问的Serlvet
* Springboot项目没有web.xml配置,servlet和filter可以通过
* ServletRegistrationBean和FilterRegistrationBean加入到容器中。
* @return
*/
@Bean public ServletRegistrationBean<StatViewServlet> statViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
// 将StatViewServlet加入
registrationBean.setServlet(new StatViewServlet());
// 配置访问的路径,druid的后台访问路径
registrationBean.setUrlMappings(Arrays.asList("/druid/*"));
// 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet
// 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
// druid访问登录密码
Map<String, String> map = new HashMap<>();
map.put("loginUsername", "root");
map.put("loginPassword", "123456");
// 只有本机可以访问
// 当配置是localhost时会出错java.lang.IllegalArgumentException: Invalid IP Address [localhost]
// 可以配置为map.put("allow", "127.1.0.0");
// map.put("allow", "localhost");
map.put("allow", "127.1.0.0");
// allow="",谁都可以访问
//map.put("allow", "");
// 禁止访问
map.put("tom", "192.168.133.125");
registrationBean.setInitParameters(map); return registrationBean;
}
}
@Configurationpublic class DruidConfiguration {
/**
* 配置Druid监控的Filter
* Springboot项目没有web.xml配置,servlet和filter可以通过
* ServletRegistrationBean和FilterRegistrationBean加入到容器中。
* @return
*/
@Bean public FilterRegistrationBean<WebStatFilter> webStatFilter() {
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new WebStatFilter());
/*
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*/
// 配置结果相等于web.xml中的如上配置
Map<String, String> map = new HashMap<>();
// 过滤的资源,过滤的资源,WebStatFilter不会对这些资源进行监控。
map.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
// 过滤所有的请求。 WebStatFilter会监控这个请求。并且展示在druid的 web应用下。
registrationBean.setUrlPatterns(Arrays.asList("/*"));
registrationBean.setInitParameters(map); return registrationBean;
}
}
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency>
配置dao层接口的两种方式
@Mapper
@Repositorypublic interface UserDao {
List<User> getList();
}
@SpringBootApplication
@MapperScans({
@MapperScan("com.my.springboot.dao")
})public class Demo05Application { public static void main(String[] args) {
SpringApplication.run(Demo05Application.class, args);
}
}
<!-- 3.0和springboot整合,直接导入starter --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>
@Configuration
// 开启Swagger
//from fhadmin.cn
@EnableSwagger2public class SwaggerConfig {
/**
* 构建Swagger配置
* @param environment
* @return
*/
@Bean public Docket docket(Environment environment) { return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
// 配置要扫描的包
.apis(RequestHandlerSelectors.basePackage("com.my.springboot"))
// 过滤请求 只扫描 /index 有关的请求
//.paths(PathSelectors.ant("/index"))
.build();
}
/**
* 配置swagger页面显示
* @return
*/ private ApiInfo apiInfo() {
Contact contact = new Contact("tom", "www.tom.com", "tom@163.com"); return new ApiInfo(
// title
"swagger2练习",
// description
"swagger2整个Springboot练习",
// version
"1.0",
// 网站访问路径
"www.www.www",
// 个人信息
contact,
// license
"Apache 2.0",
// licenseUrl
"http://www.apache.org/licenses/LICENSE-2.0", new ArrayList<>());
}
}
http://localhost:8080/swagger-ui/index.html。//from fhadmin.cn
@Configuration
@EnableSwagger2public class SwaggerConfig {
@Bean public Docket docket(Environment environment) {
Profiles profiles = Profiles.of("dev", "test");
// dev和test环境 返回true,可以使用swagger
// prod环境返回false,不适用swagger boolean flag = environment.acceptsProfiles(profiles); return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
// 配置是否启用 swagger
.enable(flag)
.select()
// 配置要扫描的包
.apis(RequestHandlerSelectors.basePackage("com.my.springboot"))
.build();
}
}
//from fhadmin.cn
@Configuration
@EnableSwagger2public class SwaggerConfig {
/**
* 配置多个分组,就创建多个Docket对象,设置不同的gruopName()。
* @return
*/
@Bean public Docket docker1() { return new Docket(DocumentationType.OAS_30).groupName("bob");
}
@Bean public Docket docker2() { return new Docket(DocumentationType.OAS_30).groupName("tom");
}
}
// 实体类不会被扫描到,需要扫描到的接口,返回实体类对象,才能被Swagger配置 from fhadmin.cn
@Data
@ApiModel(value = "用户", description = "用户类")public class User {
@ApiModelProperty(value = "id") private Integer id;
@ApiModelProperty(value = "name") private String name;
@ApiModelProperty(value = "age") private Integer age;
}
@RestController
@Api(tags = {"控制用户url"}, produces = "application/json")public class UserController {
// 方法说明
@ApiOperation("获取一个用户")
// 参数说明
@ApiImplicitParams({
@ApiImplicitParam(name = "用户名", defaultValue = "tom", required = true)
})
@GetMapping("/user") public String user() { return "user";
}
}
@Configurationpublic class DruidConfiguration {
/**from fhadmin.cn
* 配置Druid访问的Serlvet
* Springboot项目没有web.xml配置,servlet和filter可以通过
* ServletRegistrationBean和FilterRegistrationBean加入到容器中。
* @return
*/
@Bean public ServletRegistrationBean<StatViewServlet> statViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
// 将StatViewServlet加入
registrationBean.setServlet(new StatViewServlet());
// 配置访问的路径,druid的后台访问路径
registrationBean.setUrlMappings(Arrays.asList("/druid/*"));
// 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet
// 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
// druid访问登录密码
Map<String, String> map = new HashMap<>();
map.put("loginUsername", "root");
map.put("loginPassword", "123456");
// 只有本机可以访问
// 当配置是localhost时会出错java.lang.IllegalArgumentException: Invalid IP Address [localhost]
// 可以配置为map.put("allow", "127.1.0.0");
// map.put("allow", "localhost");
map.put("allow", "127.1.0.0");
// allow="",谁都可以访问
//map.put("allow", "");
// 禁止访问
map.put("tom", "192.168.133.125");
registrationBean.setInitParameters(map); return registrationBean;
}
/**from fhadmin.cn
* 配置Druid监控的Filter
* Springboot项目没有web.xml配置,servlet和filter可以通过
* ServletRegistrationBean和FilterRegistrationBean加入到容器中。
* @return
*/
@Bean public FilterRegistrationBean<WebStatFilter> webStatFilter() {
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new WebStatFilter());
/*
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*/
// 配置结果相等于web.xml中的如上配置
Map<String, String> map = new HashMap<>();
// 过滤的资源,过滤的资源,WebStatFilter不会对这些资源进行监控。
map.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
// 过滤所有的请求。 WebStatFilter会监控这个请求。并且展示在druid的 web应用下。
registrationBean.setUrlPatterns(Arrays.asList("/*"));
registrationBean.setInitParameters(map); return registrationBean;
}
}
配置视图解析器
@Configurationpublic class MyWebMvcConfigurer implements WebMvcConfigurer {
/**from fhadmin.cn
* 自定义视图解析器 方式一
* @return
*/
@Bean public ViewResolver viewResolver() { return new MyViewResolver();
} public static class MyViewResolver implements ViewResolver {
@Override public View resolveViewName(String viewName, Locale locale) throws Exception { return null;
}
}
}
public class MyWebMvcConfigurer implements WebMvcConfigurer {
/**from fhadmin.cn
* 自定义视图解析器 方法二
* @param registry
*/
@Override public void configureViewResolvers(ViewResolverRegistry registry) {
registry.viewResolver(new MyViewResolver());
}eturn new MyViewResolver();
} public static class MyViewResolver implements ViewResolver {
@Override public View resolveViewName(String viewName, Locale locale) throws Exception { return null;
}
}
}
其他配置
@Configuration
//@EnableWebMvc // 让springboot自动配置失效 from fhadmin.cnpublic class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override public void addViewControllers(ViewControllerRegistry registry) {
// 当URL访问/hello时,跳转到 templates/index.html
registry.addViewController("/hello").setViewName("index");
}
}
@ControllerAdvice
@Slf4jpublic class ControllerExceptionHandler {
@ExceptionHandler(Exception.class) public ModelAndView handlerException(HttpServletRequest request, Exception e) throws Exception {
log.error("request url {}, error info {}", request.getRequestURL(), e);
// 如果捕获到的异常上有ResponseStatus注解,说明是页面找不到的异常,这里直接抛出,
// 交给springboot去处理,来返回error/404.html。 if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) { throw e;
}
ModelAndView mv = new ModelAndView();
mv.addObject("url", request.getRequestURL());
mv.addObject("exception", e);
mv.setViewName("error/error.html"); return mv;
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31558068/viewspace-2788897/ ,如需转载,请注明出处,否则将追究法律责任。