第二十一章 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.inteceptor;

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

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/*
 *  設置攔截器,重寫方法,對請求進行處理
 */
// 註解聲明該類爲一個組件類
@Component
public class webInteceptor implements HandlerInterceptor{
	
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("請求後進行處理.........");
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
		System.out.println("請求時進行處理.........");
	}

	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2) throws Exception {
		System.out.println("請求前進行處理.........");
		/*
		 * 返回值:
		 *   true:將攔截到的請求進行處理後,釋放該請求,其他操作可以繼續處理
		 *   false:將攔截到的請求進行處理後,不釋放該請求,請求中斷
		 */
		return true;
	}

}
package com.inteceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/*
 * 將攔截器處理類進行註冊配置;@Configuration可能會導致頁面跳轉500,
 *  可使用@EnableAutoConfiguration或者@EnableWebMvc註解解決
 */
// 註解聲明該類爲一個配置類
@EnableWebMvc
public class InteceptorConfig extends WebMvcConfigurationSupport{
	//重寫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 "插入失敗";
		}
	}
}

       

                                                                     前行的路上總是充滿荊棘和誘惑的, 不忘初心,堅持,就會看到希望

                                                                                                                                                                             ----墨漸生微

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章