混合kubebuilder與code generator編寫CRD
思路
ssm => spring + spring-mvc + mybatis
其實就是先用spring 代理mybatis物件,然後spring-mvc在整合上面的,這裡給出一個小案例,基本上能將大部分內容穿起來,分幾個階段
- 配置mybatis
- 新增spring配置
- 新增spring-mvc配置
1,建庫建表
CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(30) DEFAULT NULL, `password` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
2,基本環境搭建 (搭建mybatis環境)
先建立一個maven的web環境
2.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>org.example</groupId> <artifactId>spring001</artifactId> <version>1.0-SNAPSHOT</version> <!-- 建立web環境 --> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!-- MySQL Jar包; mysql-connector-java Druid相關Jar包; druid MyBatis相關Jar包; mybatis mybatis-spring Spring相關Jar包; spring-context spring-test spring-jdbc spring-tx SpringMVC相關Jar包; spring-web spring-webmvc javax.servlet-api javax.servlet.jsp-api 11111 MyBatis分頁外掛相關Jar包; JSON處理相關Jar包; jackson-core jackson-databind jackson-annotations JSTL相關Jar包。 jstl 其他 junit commons-logging slf4j-log4j12 log4j --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> </dependencies> <!-- 配置java目錄下的xml檔案為資原始檔,讓Maven能夠識別,從而進行編譯--> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> </project>
2.2 建立包結構
com.edu.user.bean
: 用來存放實體類com.edu.user.mapper
:用來存放mapper介面及介面對映檔案 -> dao層com.edu.user.service
:用來存放Service層相關類(com.edu.user.controller
:用來存放SpringMVC中的控制器;
2.3,建立 jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=root
2.4,建立 log4j.properties
#
# Hibernate, Relational Persistence for Idiomatic Java
#
# License: GNU Lesser General Public License (LGPL), version 2.1 or later.
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
#
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
2.5,建立 mybatis-config.xml
使用spring的方式建立
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 引入配置檔案 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置資料園 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置sqlSessionFactoryBean
配置資料來源
配置別名
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.edu.*.bean"/>
</bean>
<!-- 配置包掃描(載入對映檔案)-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--
basePackage 屬性是讓你為 對映器介面檔案 設定基本的包路徑。 你可以使用分號或逗號 作為分隔符設定多於一個的包路徑。每個對映器將會在指定的包路徑中遞迴地被搜尋到。
注意:
1、介面與對映檔案一定要同名
2、介面與對映檔案一定要放在"value=" 其中之一的所在目錄下(不一定同一個包下 )
-->
<property name="basePackage" value="com.edu.*.mapper"/>
</bean>
</beans>
2.6,建立 applicationContext.xml
applicationContext.xml,這裡是配置spring的地方,和mybatis環境隔開
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 匯入配置檔案 -->
<import resource="classpath:mybatis-config.xml"/>
</beans>
2.7,測試
2.7.1 建立實體類
package com.edu.user.bean;
import lombok.Data;
@Data
public class User {
private Integer id;
private String username;
private String password;
}
2.7.2 建立介面和對映檔案
package com.edu.user.mapper;
import com.edu.user.bean.User;
import java.util.List;
public interface UserMapper {
List<User> all();
}
<?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.edu.user.mapper.UserMapper">
<select id="all" resultType="com.edu.user.bean.User">
select * from user
</select>
</mapper>
2.7.3 建立測試類
第一種測試類寫法
public class MyTest1 {
// mybatis常規使用 -> 測試mapper介面
@Test
public void mybatis1() throws IOException {
// 這兩行程式碼的作用是獲取Spring IOC容器,如果不寫的話,直接會提示空指標異常。對於測試不友好。所以我們一般使用第二種方式
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
SqlSessionFactory sqlSessionFactory =(SqlSessionFactory) context.getBean("sqlSessionFactory");
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> all = mapper.all();
all.forEach(v -> System.out.println("\033[1;34m" + v + "\033[1;34m \n"));
}
}
第二種測試類寫法 -> 注入方式 以後都使用這種方式
/*
@RunWith 就是一個執行器
@RunWith(SpringJUnit4ClassRunner.class),讓測試運行於Spring測試環境
使用@ContextConfiguration或@SpringJUnitConfig指定配置檔案或配置類
*/
@RunWith(SpringJUnit4ClassRunner.class)
//@SpringJUnitConfig(locations = "classpath:applicationContext.xml")
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class MyTest {
@Autowired
private SqlSessionFactory sqlSessionFactory;
/*
使用注入的方法 注意匯入相關的jar包
1,使用@Runwith替換原來的執行時
2,使用@ContextConfiguration或@SpringJUnitConfig指定配置檔案或配置類
3,使用@Autowired注入需要測試的物件 => (SqlSessionFactory) context.getBean("sqlSessionFactory");
* */
@Test
public void mybatis2() throws IOException {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> all = mapper.all();
all.forEach(v -> System.out.println("\033[1;34m" + v + "\033[1;34m \n"));
}
}
3,將spring配置整合到mybatis
3.1,新增 applicationContext.xml 配置
applicationContext.xml 中新增配置,至此 spring 已經配置完成
<!-- 配置包掃描 -->
<!-- 這個檔案中beans根節點下只有一個context:component-scan節點,此節點有兩個屬性base-package屬性告訴spring要掃描的包,多個包逗號隔開。-->
<!-- use-default-filters=”false”表示不要使用預設的過濾器,此處的預設過濾器,會掃描包含@Service,@Component,@Repository,@Controller註解修飾的類,並註冊成bean-->
<!--
@Component 使用在類上用於例項化Bean
@Repository 使用在Dao層類上用於例項化Bean
@Service 使用在Service層類上用於例項化Bean
@Controller 使用在Web層類上用於例項化Bean
-->
<!-- 在註解後加上例如@Component(value=”abc”)時,註冊的這個類的bean的id就是adc.-->
<context:component-scan base-package="com.edu" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<!-- 排除掃描controoler 因為springmvc會掃描 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
3.2,測試
3.2.1,建立service層類和介面
package com.edu.user.service;
public interface UserService {
List<User> all();
}
package com.edu.user.service.impl;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> all() {
return userMapper.all();
}
}
3.2.2,新增測試類方法
在 2.7.3 第二種方法的基礎上進行測試
@Autowired
private UserService userService;
@Test
public void test2() {
List<User> all = userService.all();
System.out.println("\033[1;34m" + all + "\033[1;34m \n");
}
至此,spring配置完成
4,spring-mvc整合
4.1,建立 spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 包掃描-載入controller註解 -->
<context:component-scan base-package="com.edu" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 檢視解析- 給檢視新增前後綴 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp" />
</bean>
</beans>
4.2,新增 web.xml 配置
配置SpringMVC核心控制器DispatcherServlet
它就相當於MVC模式中的C,DispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置SpringMVC核心控制器,其本質上就是一個Servlet -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 配置SpringMVC配置檔案使SpringMVC核心控制器能夠載入 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- tomcat啟動就載入 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4.3,測試
4.3.1,建立控制器類
package com.edu.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//指定這是一個控制器類
@Controller
//指定這個控制器的地址
@RequestMapping("/user")
public class UserController {
/**
* 在訪問時要使用類上的RequestMapping中的路徑和方法上的RequestMapping中的路徑才能訪問到該方法
* 如果在檢視解析器中沒有配置字首和字尾,檔案的路徑和字尾不能省略
* 預設以轉發的方式訪問檢視
* @return 檢視的位置
*/
@RequestMapping("/hello")
public String hello() {
return "success";
}
}
4.3.2,建立success.jsp。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<p>success</p>
</body>
</html>
4.3.3,測試
直接執行該專案,專案啟動後訪問
http://localhost:8080/專案名/user/hello
,如果正常顯示頁面,則說明正常
至此,ssm專案建立完成
5,其他相關配置
需要注意的是,很多配置都有好幾種方式實現,但是這裡只寫一種
1,返回json的配置
springMVC分為兩種響應方式
頁面跳轉
直接返回字串
通過ModelAndView返回
回寫資料
直接返回字串(json)
返回物件或集合
這裡只說直接返回字串(json)的配置,這裡有些專業術語就不說了,直接說配置,在spring-mvc.xml中新增如下配置(注意匯入相關包):
記得在依賴中引入 xmlns:mvc="http://www.springframework.org/schema/mvc"
<!--返回物件或集合時 json格式字串的轉換-->
<mvc:annotation-driven/>
預設底層就會整合jackson進行物件或集合的json格式字串的轉換。
如果一個Controller中所有的方法都要返回JSON,可以進行如下操作:
- 將Controller使用@Controller和@ResponseBody進行修飾;
- 將Controller使用@RestController進行修飾(建議使用這種方式)。
測試
直接在controller包下建立一個JsonController.java進行測試
package com.edu.user.controller;
@Controller
@RequestMapping("/test")
public class JsonController {
// 常規方式1
@RequestMapping("/json1")
@ResponseBody
public void json1(HttpServletResponse response) throws IOException {
response.getWriter().println("{\"username\":\"zhangsan\",\"age\":10}");
}
// 常規方式2
@RequestMapping("/json2")
@ResponseBody
public String json2() {
return "{\"username\":\"zhangsan\",\"age\":10}";
}
//使用json的轉換工具將物件轉換成json格式字串在返回
@RequestMapping("/json3")
@ResponseBody
public String json3() throws JsonProcessingException {
User user = new User();
user.setUsername("ZhangSan");
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(user);
return s;
}
// sjon3中的方法也是使用最多的,但是每次寫 new ObjectMapper(); 不好,所以需要配置,配置後就可以直接返回json
@RequestMapping("/json4")
@ResponseBody
public User json4() throws JsonProcessingException {
User user = new User();
user.setUsername("ZhangSan");
// 注意這裡需要配置,否則直接返回物件會報錯
return user;
}
}
2, 靜態資源訪問的開啟
當有靜態資源需要載入時,比如jquery檔案,通過谷歌開發者工具抓包發現,沒有載入到jquery檔案,原因是SpringMVC的前端控制器DispatcherServlet的url-pattern配置的是/,代表對所有的資源都進行過濾操作,我們可以通過以下三種方式指定放行靜態資源。
- 在spring-mvc.xml配置檔案中使用
<mvc:default-servlet-handler/>
標籤
<!--
在web.xml中,如果將DispatcherServlet請求對映配置為"/",則Spring MVC將捕獲Web容器所有的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,因此找不到對應處理器將導致錯誤。
<mvc:default-servlet-handler /> 它會像一個檢查員,對進入DispatcherServlet的URL進行篩查,如果發現是靜態資源的請求,就將該請求轉由Web應用伺服器預設的Servlet處理,
如果不是靜態資源的請求,才由DispatcherServlet繼續處理。
-->
<mvc:default-servlet-handler/>
測試
在上面的spring-mvc整合的基礎上,修改success.jsp
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2021/10/14
Time: 14:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<img src="${pageContext.request.contextPath}/img/logo.png" alt="">
success
success
success
success
success
</body>
</html>
在未配置前,無法載入圖片,只有在配置後才能顯示圖片
3,配置全域性亂碼過濾器-post請求(重要)
Tomcat8的版本中get方式不會出現亂碼了,因為伺服器對url的編碼格式可以進行自動轉換;
當post請求時,資料會出現亂碼,我們可以設定一個過濾器來進行編碼的過濾。
web.xml
<!-- 解決中文亂碼的Filter 最好放在前面,不然可能不生效 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
測試
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<img src="${pageContext.request.contextPath}/img/logo.png" alt="">
<form method="post" action="${pageContext.request.contextPath}/user/hello">
<input name="data" type="text" value="post資料傳輸">
<button type="submit">提交</button>
</form>
</body>
</html>
UserController.java
package com.edu.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//指定這是一個控制器類
@Controller
//指定這個控制器的地址
@RequestMapping("/user")
public class UserController {
@RequestMapping("/hello")
public String hello(String data) {
System.out.println("\033[1;34m" + data + "\033[1;34m \n");
return "success";
}
}
未新增配置之前列印如下
新增配置後列印如下
需要注意的是,如果列印還是不成功,呢麼可能需要在idea中配置一下
6,ssm的全域性整合
1,pom.xml
就是2.1
2.2,建立包結構
就是2.2
2.3,建立 jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
2.4,建立 log4j.properties
#
# Hibernate, Relational Persistence for Idiomatic Java
#
# License: GNU Lesser General Public License (LGPL), version 2.1 or later.
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
#
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
2.5,建立 mybatis-config.xml
使用spring的方式建立
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 引入配置檔案 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置資料園 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置sqlSessionFactoryBean
配置資料來源
配置別名
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.edu.*.bean"/>
</bean>
<!-- 配置包掃描(載入對映檔案)-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--
basePackage 屬性是讓你為 對映器介面檔案 設定基本的包路徑。 你可以使用分號或逗號 作為分隔符設定多於一個的包路徑。每個對映器將會在指定的包路徑中遞迴地被搜尋到。
注意:
1、介面與對映檔案一定要同名
2、介面與對映檔案一定要放在"value=" 其中之一的所在目錄下(不一定同一個包下 )
-->
<property name="basePackage" value="com.edu.*.mapper"/>
</bean>
</beans>
2.6,建立 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 配置包掃描 -->
<!-- 這個檔案中beans根節點下只有一個context:component-scan節點,此節點有兩個屬性base-package屬性告訴spring要掃描的包,多個包逗號隔開。-->
<!-- use-default-filters=”false”表示不要使用預設的過濾器,此處的預設過濾器,會掃描包含@Service,@Component,@Repository,@Controller註解修飾的類,並註冊成bean-->
<!--
@Component 使用在類上用於例項化Bean
@Repository 使用在Dao層類上用於例項化Bean
@Service 使用在Service層類上用於例項化Bean
@Controller 使用在Web層類上用於例項化Bean
-->
<!-- 在註解後加上例如@Component(value=”abc”)時,註冊的這個類的bean的id就是adc.-->
<context:component-scan base-package="com.edu" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<!-- 排除掃描controoler 因為springmvc會掃描 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 匯入配置檔案 -->
<import resource="classpath:mybatis-config.xml"/>
</beans>
2.7,建立 spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!-- 包掃描-載入controller註解 -->
<context:component-scan base-package="com.edu" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 檢視解析- 給檢視新增前後綴 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--返回物件或集合時 json格式字串的轉換-->
<mvc:annotation-driven/>
<!--
在web.xml中,如果將DispatcherServlet請求對映配置為"/",則Spring MVC將捕獲Web容器所有的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,因此找不到對應處理器將導致錯誤。
<mvc:default-servlet-handler /> 它會像一個檢查員,對進入DispatcherServlet的URL進行篩查,如果發現是靜態資源的請求,就將該請求轉由Web應用伺服器預設的Servlet處理,
如果不是靜態資源的請求,才由DispatcherServlet繼續處理。
-->
<mvc:default-servlet-handler/>
</beans>
2.8,新增 web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 解決中文亂碼的Filter 最好放在前面 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置SpringMVC核心控制器,其本質上就是一個Servlet -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 配置SpringMVC配置檔案使SpringMVC核心控制器能夠載入 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- tomcat啟動就載入 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
至此ssm的基本使用全部配置完畢,測試參考上文