第二十一章 Springboot进阶Ⅱ

自定义转换器

package com.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

/*
 * 	设置类型转换器,将String类型日期进行转换成Date
 */
// 注解声明该类为一个组件类
@Component
public class DateConverter implements Converter<String, Date> {

	// 重写方法,进行数据类型转换
	@Override
	public Date convert(String source) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date = format.parse(source);
			return date;
		} catch (ParseException e) {
			System.err.println("格式化日期失败");
		}
		return null;
	}

}
package com.converter;

import java.util.HashSet;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.converter.Converter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/*
 * 	将自定义的类型转换器进行注册配置
 */
// 注解声明该类为一个配置类
@Configuration
public class ConverterConfig  extends WebMvcConfigurerAdapter{
	/*
	 * 	配置日期类型转换器:
	 * 		方法类型必须为ConversionService,参数为自定义的转换器;
	 * 		注解声明按照类型自动注入bean
	 */
	@Bean
	@Autowired
	public ConversionService getConversionService(DateConverter dateConverter){
		// 创建转换器工厂
		ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
		// 创建转换器集合,将转换器放入集合
		Set<Converter> converters = new HashSet<Converter>();
		converters.add(dateConverter);
		// 将转换器集合设置到工厂
		factory.setConverters(converters);
		// 返回转换器服务
		return factory.getObject();
	}
}

 

拦截器

package com.merit.inteceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import java.lang.reflect.Method;

/*
 *  设置拦截器,重写方法,对请求进行处理
 */
// 注解声明该类为一个组件类
@Component
public class webInteceptor implements HandlerInterceptor {

    /**
     * @param request       请求
     * @param response      响应
     * @param handlerMethod 处理方法的封装
     * @param exception     异常
     * @throws Exception
     */

    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object handlerMethod, Exception exception)
            throws Exception {
        HandlerMethod handler = (HandlerMethod) handlerMethod;
        // 获取处理请求的方法
        Method method = handler.getMethod();
        System.out.println(method);

        System.out.println("请求后进行处理.........");
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handlerMethod, ModelAndView exception) throws Exception {
        System.out.println("请求时进行处理.........");
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handlerMethod) throws Exception {
        System.out.println("请求前进行处理.........");
        /*
         * 返回值:
         *   true:将拦截到的请求进行处理后,释放该请求,其他操作可以继续处理
         *   false:将拦截到的请求进行处理后,不释放该请求,请求中断
         */
        return true;
    }

}
package com.merit.inteceptor;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/*
 * 将拦截器处理类进行注册配置;@Configuration可能会导致页面跳转500,
 *  可使用@EnableAutoConfiguration或者@EnableWebMvc注解解决
 */
// 注解声明该类为一个配置类
@Configuration
public class InteceptorConfig extends WebMvcConfigurerAdapter {
	//重写addInterceptors方法,将拦截器类进行注册
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 将拦截器类进行添加注册
		registry.addInterceptor(new webInteceptor());	
	}
}

 

文件上传

          注意:form表单method="post" enctype="multipart/form-data"

package com.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/*
 *  文件上传
 */
@Controller
public class LoginController {
	@RequestMapping("/login")
	public String subLogin(@RequestParam("file") MultipartFile file,HttpServletRequest request){
		// 获取文件名字
		String fileName = file.getOriginalFilename();
		System.out.println(fileName);
		// 获取服务器绝对路径
		String path = request.getSession().getServletContext().getRealPath("/img/");
		System.out.println(path);
		// 创建文件
		File newFile = new File(path+fileName);
		// 写出文件
		try {
			file.transferTo(newFile);
		} catch (IllegalStateException e) {
			System.err.println("文件上传失败");
		} catch (IOException e) {
			System.err.println("文件传输失败");
		}
		return "index";
	}
}

 

Springboot整合mybatis

         1. 配置pom.xml依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mo</groupId>
	<artifactId>Micro</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot-mybatis</name>

	<!-- 引入springboot父项目 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.17.RELEASE</version>
	</parent>

	<!-- 添加starter依赖- -->
	<dependencies>
		<!-- 引入web-starter依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- 引入jsp的依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>

		<!-- 引入tomcat的部分依赖:scope作用域,provided在进行部署项目时,不添加此jar -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>

		<!-- 引入mybatis的依赖 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>

		<!-- mysql数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<!-- druid数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.9</version>
		</dependency>
	</dependencies>

	<!-- 配置可以将项目打包jar -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

         2. 在resources下创建和配置全局配置文件:application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.type-aliases-package=com.entity

         注:配置文件配置页面视图解析,数据库连接信息,数据源类型,映射文件别名

         3. 创建mapper层接口:接口类和xml配置文件名字须一致

package com.mapper;

import com.entity.Student;
/*
 * 数据库映射接口:由配置映射文件执行sql语句
 */
public interface StudentMapper {
	public int insert(Student stu);
}
<?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.mapper.StudentMapper">
<!-- mybatis接口映射文件 -->
	<insert id="insert" parameterType="Student">
		insert into student(sname,score,addr) values(#{sname},#{score},#{addr})
	</insert>
</mapper>

         4. 创建service层业务处理

package com.service;

import com.entity.Student;
/*
 * service层接口业务
 */
public interface StudentService {
	public boolean insert(Student stu);
}
package com.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.entity.Student;
import com.mapper.StudentMapper;
/*
 * 业务层实现
 */
@Service
// 注解添加事务:在service层添加业务,可以防止操作失败导致数据库数据错误提交
@Transactional
public class StudentServiceImp implements StudentService {
	@Resource
	private StudentMapper studentMapper;

	@Override
	public boolean insert(Student stu) {
		int rows = studentMapper.insert(stu);
		if (rows > 0) {
			return true;
		} else {
			return false;
		}
	}

}

         5. 创建controller层进行交互

package com.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.entity.Student;
import com.service.StudentService;
/*
 * 控制层:与前台进行交互和页面跳转
 */
@Controller
public class StudentController {
	@Resource
	private StudentService studentService;
	
	@ResponseBody
	@RequestMapping("/insert")
	public String insert(){
		Student stu = new Student(null, "Micro", 78, "咸阳");
		boolean flag = studentService.insert(stu);
		if(flag){
			return "插入成功";
		}else{
			return "插入失败";
		}
	}
}

       

                                                                     前行的路上总是充满荆棘和诱惑的, 不忘初心,坚持,就会看到希望

                                                                                                                                                                             ----墨渐生微

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值