English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Пример кода для интеграции фреймворка SSM с Maven

Основные концепции

1.1, Spring

Spring — это开源 фреймворк, который появился в 2003 году как легковесная Java-фреймворк для разработки, предложенная Rod Johnson в своей книге Expert One-On-One J2EE Development and Design. Она возникла для решения сложностей, связанных с разработкой корпоративных приложений. Spring использует базовые JavaBean для выполнения задач, которые раньше могли выполняться только с помощью EJB. Однако, использование Spring не ограничивается только серверной разработкой. С точки зрения простоты, тестирования и松耦合, любая Java-приложение может извлечь выгоду из использования Spring. Кратко говоря, Spring — это легковесный контейнер для инверсии управления (IoC) и аспектного программирования (AOP).

1.2, SpringMVC

Spring MVC является последним продуктом SpringFrameWork и интегрирован в Spring Web Flow. Spring MVC разделен на роли контроллера, модели, распределителя и обработчика объектов, что упрощает их настройку.

1.3, MyBatis

MyBatis изначально был开源-проектом Apache iBatis, в 2010 году этот проект был перемещен в Google Code fondation Apache Software и переименован в MyBatis. MyBatis - это фреймворк для persistence на Java. Фреймворк persistence iBATIS включает SQL Maps и Data Access Objects (DAO). MyBatis удаляет几乎 все код JDBC и ручную настройку параметров, а также получение результатов. MyBatis использует простые XML или аннотации для конфигурации и оригинального маппинга, позволяя интерфейсам и Java POJOs (Plain Old Java Objects, обычные Java объекты) быть маппингом в записи базы данных.

Шаг 1:Создание web-проекта через Maven.

Шаг 2:Импорт jar-пакета в файл pom

(1) pom.xml

Я скопировал весь мой файл pom, некоторые элементы инициализации нужно удалить, чтобы сохранить那份, которое было сгенерировано вашим own pom.

<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/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.test</groupId>
 <artifactId>ssm</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>ssm Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <properties> 
  <!-- spring版本号 --> 
  <spring.version>4.0.2.RELEASE</spring.version> 
  <!-- mybatis版本号 --> 
  <mybatis.version>3.2.6</mybatis.version> 
  <!-- log4j日志文件管理包版本 --> 
  <slf4j.version>1.7.7</slf4j.version> 
  <log4j.version>1.2.17</log4j.version> 
 </properties> 
 <dependencies>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
 </dependency>
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-core</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-web</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-oxm</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-tx</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-jdbc</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-webmvc</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-aop</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-context-support</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework</groupId> 
   <artifactId>spring-test</artifactId> 
   <version>${spring.version}</version> 
  </dependency> 
  <!-- mybatis核心包 --> 
  <dependency> 
   <groupId>org.mybatis</groupId> 
   <artifactId>mybatis</artifactId> 
   <version>${mybatis.version}</version> 
  </dependency> 
  <!-- mybatis/spring包 --> 
  <dependency> 
   <groupId>org.mybatis</groupId> 
   <artifactId>mybatis-spring</artifactId> 
   <version>1.2.2</version> 
  </dependency> 
  <!-- 导入java ee jar 包 --> 
  <dependency> 
   <groupId>javax</groupId> 
   <artifactId>javaee-api</artifactId> 
   <version>7.0</version> 
  </dependency> 
  <!-- 导入Mysql数据库链接jar包 --> 
  <dependency> 
   <groupId>mysql</groupId> 
   <artifactId>mysql-connector-java</artifactId> 
   <version>5.1.30</version> 
  </dependency> 
  <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --> 
  <dependency> 
   <groupId>commons-dbcp</groupId> 
   <artifactId>commons-dbcp</artifactId> 
   <version>1.2.2</version> 
  </dependency> 
  <!-- JSTL标签类 --> 
  <dependency> 
   <groupId>jstl</groupId> 
   <artifactId>jstl</artifactId> 
   <version>1.2</version> 
  </dependency> 
  <!-- 日志文件管理包 --> 
  <!-- log start --> 
  <dependency> 
   <groupId>log4j</groupId> 
   <artifactId>log4j</artifactId> 
   <version>${log4j.version}</version> 
  </dependency> 
  <!-- 格式化对象,方便输出日志 --> 
  <dependency> 
   <groupId>com.alibaba</groupId> 
   <artifactId>fastjson</artifactId> 
   <version>1.1.41</version> 
  </dependency> 
  <dependency> 
   <groupId>org.slf4j</groupId> 
   <artifactId>slf4j-api</artifactId> 
   <version>${slf4j.version}</version> 
  </dependency> 
  <dependency> 
   <groupId>org.slf4j</groupId> 
   <artifactId>slf4j-log4j12</artifactId> 
   <version>${slf4j.version}</version> 
  </dependency> 
  <!-- лог结束 --> 
  <!-- Вставка JSON --> 
  <dependency> 
   <groupId>org.codehaus.jackson</groupId> 
   <artifactId>jackson-mapper-asl</artifactId> 
   <version>1.9.13</version> 
  </dependency> 
  <!-- Пакет компонент для загрузки --> 
  <dependency> 
   <groupId>commons-fileupload</groupId> 
   <artifactId>commons-fileupload</artifactId> 
   <version>1.3.1</version> 
  </dependency> 
  <dependency> 
   <groupId>commons-io</groupId> 
   <artifactId>commons-io</artifactId> 
   <version>2.4</version> 
  </dependency> 
  <dependency> 
   <groupId>commons-codec</groupId> 
   <artifactId>commons-codec</artifactId> 
   <version>1.9</version> 
  </dependency> 
 </dependencies>
 <build>
 <finalName>ssm</finalName>
 </build>
</project>

Шаг 3:Обратимся к общей структуре проекта, сначала отмечу, что здесь пока нет ничего связанного с springMVC, потому что я сначала интегрирую spring-mybatis, чтобы проверить его успешность, а затем интегрирую springMVC

Шаг 4:Создание класса модели

public class User {
 private int id;
 private String name;
 private String password;
 private String password2; 
/*Предоставляет методы set и get, метод toString*/
}

Пятый шаг:Создание базы данных, интерфейса UserDao и файла маппера mapper

(1) Создание очень простой таблицы

(2) интерфейс UserDao

public interface UserDao {
  User findUserById(User user);
}

(3) UesrMapper.xml

<?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">
<!-- namespace: пространство имен, указывает на полный путь к UserDao-->
<mapper namespace="com.ssm.dao.UserDao">
 <!-- Поиск информации о пользователе по идентификатору -->
 <!-- 
  id: уникальный идентификатор statement, совпадает с именем метода в UserDao
  #{}: обозначает маркер замены, если в #{}传入 простого типа параметра, имя в #{} может быть любым
  parameterType: тип входных параметров, совпадает с типом параметров в UserDao()
  resultType: тип возвращаемых данных, совпадает с типом return в UserDao()
  -->
 <select id="findUserById" parameterType="com.ssm.model.User" resultType="com.ssm.model.User">
  SELECT * FROM USER 
  <where>
  <if test="name != null">
   AND Name= #{name}
  </if>
  <if test="password != null">
   AND password= #{password}
  </if>
  </where> 
 </select>
 </mapper>

Пятый шаг:Создание UserService и UserServiceImpl

(1) UserService

public interface UserService {
  public User getUserById(User user); 
}

(2) UserServiceImpl

import org.springframework.stereotype.Service;
import com.ssm.dao.UserDao;
import com.ssm.model.User;
import com.ssm.service.UserService;
@Service("userService")
public class UserServerImpl implements UserService {
 @Resource
 private UserDao userDao;
 public User getUserById(User user) {
  return this.userDao.findUserById(user);
 }
}

Шестой шаг:Создать файлы jdbc и log日志

(1)jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

(2)log4j.properties

log4j.rootLogger=INFO,Console,File 
# Определить цель вывода логов как консоль 
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.Target=System.out 
# Можете гибко определить формат вывода логов,下一行指定具体的格式 
log4j.appender.Console.layout = org.apache.log4j.PatternLayout 
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n 
# Создается новый файл, когда размер файла достигает указанного размера 
log4j.appender.File = org.apache.log4j.RollingFileAppender 
# Указать каталог вывода 
log4j.appender.File.File = logs/ssm.log 
# Определить максимальный размер файла 
log4j.appender.File.MaxFileSize = 10MB 
# Выводить все日志, если заменить на DEBUG, то выводить логи DEBUG и выше 
log4j.appender.File.Threshold = ALL 
log4j.appender.File.layout = org.apache.log4j.PatternLayout 
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n 

Шаг 7:Интеграция spring-mybatis.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:p="http://www.springframework.org/schema/p" 
 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-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.1.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
 <!-- Автоматическое сканирование --> 
 <context:component-scan base-package="com.ssm" /> 
 <!-- Включение файла конфигурации jdbc --> 
 <bean id="propertyConfigurer" 
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  <property name="location" value="classpath:jdbc.properties" /> 
 </bean> 
 <!-- 2. Бассейн подключения к базе данных -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
  destroy-method="close"> 
  <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> 
  <!-- Интеграция spring с MyBatis, управление SqlSessionFactory сессией MyBatis через spring -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
  <!-- Указание ссылки на бассейн подключения к базе данных -->
  <property name="dataSource" ref="dataSource" /> 
  <!-- Автоматическое сканирование файла mapping.xml --> 
  <property name="mapperLocations" value="classpath:com/ssm/mapper/*.xml"></property> 
 </bean> 
 <!-- Пакет интерфейсов DAO, Spring автоматически ищет классы в этом пакете --> 
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
  <property name="basePackage" value="com.ssm.dao" /> 
  <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 
 </bean> 
 <!-- (Управление транзакциями) менеджер транзакций, используйте JtaTransactionManager для глобальных транзакций --> 
 <bean id="transactionManager" 
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
  <property name="dataSource" ref="dataSource" /> 
 </bean> 
</beans>

Восьмой шаг:Создание тестового класса

После выполнения以上步骤 (log4j не настроен, это не влияет), мы завершили интеграцию Spring и mybatis, и теперь мы можем написать тестовый код, чтобы проверить, был ли процесс успешен.

Тестовый класс создается в папке src/test/java, и если тест успешен, это означает, что Spring и MyBatis интегрированы успешно. Информация о выводе используется для печати в консоль с помощью Log4j.

(1)TestMyBatis测试类

package ssm;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.ssm.model.User;
import com.ssm.service.UserService;
/*Позволяет запускать тесты в среде Spring тестирования*/
@RunWith(SpringJUnit4ClassRunner.class) 
/*Для указания места загрузки файла конфигурации Spring, будет загружен базовый файл конфигурации*/
@ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })
public class TestMyBatis {
 @Resource(name = "userService") 
 private UserService userService;
 @Test
 public void test1() {
  User user=new User();
  user.setName("张三");
  user.setPassword("123");
  User user1 = userService.getUserById(user);
  System.out.println(user1.toString());
 }
}

В конце! Важно посмотреть на вывод на заднем плане, это также момент见证奇迹,если выводится объект, это означает, что интеграция настроена успешно!

Теперь начнем интеграцию springMVC

Шаг 9:Конфигурация springmvc.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:p="http://www.springframework.org/schema/p" 
 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-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.1.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
 <!-- Автоматическое сканирование этой папки, чтобы SpringMVC считал, что классы с аннотацией @controller в этой папке являются контроллерами --> 
 <context:component-scan base-package="com.ssm.controller" /> 
 <!-- Избегание выполнения IE AJAX, когда возвращается JSON, как загрузка файла --> 
 <bean id="mappingJacksonHttpMessageConverter" 
  class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
  <property name="supportedMediaTypes"> 
   <list> 
    <value>text/html;charset=UTF-8</value> 
   </list> 
  </property> 
 </bean> 
 <!-- Запуск аннотационных функций SpringMVC, завершение mappings запросов и аннотированных POJO --> 
 <bean 
  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
  <property name="messageConverters"> 
   <list> 
    <ref bean="mappingJacksonHttpMessageConverter" /> <!-- Конвертер JSON --> 
   </list> 
  </property> 
 </bean> 
 <!-- Определение префикса и суффикса перед файлом для перехода, конфигурация режима просмотра --> 
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  <!-- Это конфигурация, которую я понимаю, автоматически добавляет префикс и суффикс к возвращаемому строке метода action, чтобы стать доступным URL-адресом --> 
  <property name="prefix" value="/WEB-INF/jsp/" /> 
  <property name="suffix" value=".jsp" /> 
 </bean> 
 <!-- Конфигурация загрузки файлов, если не используется загрузка файлов, настройка не требуется, конечно, если не настроено, то в конфигурационном файле также не нужно включать пакет компонент для загрузки --> 
 <bean id="multipartResolver" 
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
  <!-- DEFAULT ENCODING --> 
  <property name="defaultEncoding" value="utf-8" /> 
  <!-- Максимальный размер файла --> 
  <property name="maxUploadSize" value="10485760000" /> 
  <!-- Максимальное значение в памяти --> 
  <property name="maxInMemorySize" value="40960" /> 
 </bean> 
</beans>

Десятый шаг:Конфигурация файла web.xml

Здесь описывается включение файла spring-mybatis.xml и конфигурация Servlet для spring-mvc, чтобы завершить интеграцию SSM, для интеграции двух фреймворков не требуется производить никакие конфигурации здесь.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
 version="3.0"> 
 <display-name>Archetype Создано веб-приложение</display-name> 
 <!-- Spring и MyBatis конфигурационный файл --> 
 <context-param> 
  <param-name>contextConfigLocation</param-name> 
  <param-value>classpath:spring-mybatis.xml</param-value> 
 </context-param> 
 <!-- Фильтр кодирования --> 
 <filter> 
  <filter-name>encodingFilter</filter-name> 
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
  <async-supported>true</async-supported> 
  <init-param> 
   <param-name>encoding</param-name> 
   <param-value>UTF-8</param-value> 
  </init-param> 
 </filter> 
 <filter-mapping> 
  <filter-name>encodingFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
 </filter-mapping> 
 <!-- Spring listener --> 
 <listener> 
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 </listener> 
 <!-- Предотвращение утечки памяти Spring监听器 --> 
 <listener> 
  <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
 </listener> 
 <!-- Spring MVC servlet --> 
 <servlet> 
  <servlet-name>SpringMVC</servlet-name> 
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  <init-param> 
   <param-name>contextConfigLocation</param-name> 
   <param-value>classpath:springmvc.xml</param-value> 
  </init-param> 
  <load-on-startup>1</load-on-startup> 
  <async-supported>true</async-supported> 
 </servlet> 
 <servlet-mapping> 
  <servlet-name>SpringMVC</servlet-name> 
  <!-- Здесь можно настроить на *.do, соответствуя习惯 стратса --> 
  <url-pattern>/</url-pattern> 
 </servlet-mapping> 
 <welcome-file-list> 
  <welcome-file>/index.jsp</welcome-file> 
 </welcome-file-list> 
</web-app>

Десятый шагПоследнее тестирование:

(1) Сначала пишем login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<html>
<head>
<title>Вход пользователя:</title>
</head>
<body>
<form action="login">
<label>Имя пользователя:</label>
<input type="text" id="username" name="username"></input><br><br>
<label>Пароль:</label>
<input type="text" id="password" name="password"></input><br><br>
<input type="submit" value="Вход"/>
</form>
</body>
</html>

Интерфейс:

(2) В процессе написания UserController

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.dao.UserDao;
import com.ssm.model.User;
@Controller
public class UserController {
 @Resource
 private UserDao userDao;  
@RequestMapping("/jsp/login") 
public String login(HttpServletRequest request) {
 String username=request.getParameter("username");
 String password=request.getParameter("password");
 User user=new User();
 //По имени пользователя и студенту ищем в базе данных
 user.setName(username);
 user.setPassword(password);
  User users=userDao.findUserById(user);
 //Если есть студенты, это означает, что вход успешен
 if(users!=null){
  return "susscss";
 }
 //Этот jsp я не писал, вы знаете, вы можете написать сами
 return "err";
} 
}

(3) в конце susscss.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<html>
<body>
<P>Пользовательский аккаунт и пароль верны, вход успешен</P>
</body>
</html>

Идеально!

Вот весь контент этой статьи, надеюсь, он поможет вам в изучении, также希望大家多多支持呐喊教程。

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, содержимое предоставлено пользователями Интернета, веб-сайт не имеет права собственности, не было обработано вручную, не несет ответственности за соответствующие юридические последствия. Если вы обнаружите подозрительное содержание, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении авторских прав,并提供 соответствующие доказательства. Если после проверки подтвердится нарушение авторских прав, сайт немедленно удалил подозрительное содержимое.

Основной учебник
Дополнительные рекомендации