1. 程式人生 > 其它 >混合kubebuilder與code generator編寫CRD

混合kubebuilder與code generator編寫CRD

思路

ssm => spring + spring-mvc + mybatis

其實就是先用spring 代理mybatis物件,然後spring-mvc在整合上面的,這裡給出一個小案例,基本上能將大部分內容穿起來,分幾個階段

  1. 配置mybatis
  2. 新增spring配置
  3. 新增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 建立包結構

  1. com.edu.user.bean : 用來存放實體類
  2. com.edu.user.mapper:用來存放mapper介面及介面對映檔案 -> dao層
  3. com.edu.user.service:用來存放Service層相關類(
  4. 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分為兩種響應方式

  1. 頁面跳轉

    直接返回字串

    通過ModelAndView返回

  2. 回寫資料

    直接返回字串(json)

    返回物件或集合

這裡只說直接返回字串(json)的配置,這裡有些專業術語就不說了,直接說配置,在spring-mvc.xml中新增如下配置(注意匯入相關包):

記得在依賴中引入 xmlns:mvc="http://www.springframework.org/schema/mvc"
  
<!--返回物件或集合時 json格式字串的轉換-->
<mvc:annotation-driven/>

預設底層就會整合jackson進行物件或集合的json格式字串的轉換。

如果一個Controller中所有的方法都要返回JSON,可以進行如下操作:

  1. 將Controller使用@Controller和@ResponseBody進行修飾;
  2. 將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配置的是/,代表對所有的資源都進行過濾操作,我們可以通過以下三種方式指定放行靜態資源。

  1. 在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的基本使用全部配置完畢,測試參考上文