предисловие
был представлен раньшеИнтеграция Spring и Mybatis, и в этой статье представлена интеграция трех фреймворков Spring, Spring MVC и Mybatis (SSM) в рамках IDEA. Прежде чем читать эту статью, рекомендуется узнать о Spring, Spring MVC, Mybatis (Базовый входной портал с тремя рамками), будет достигнут мультипликативный эффект. Что касается преимуществ Spring MVC по сравнению с Servlet и JSP, то здесь оно не лишнее, вы можете проверить соответствующую информацию в Интернете. В этой статье основное внимание уделяется идеям интеграции, процессу интеграции и ямам, возникающим в процессе интеграции.
каталог проекта
добавить зависимости
пом.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>ddnd</groupId>
<artifactId>ddnd</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!-- spring版本号 -->
<spring.version>4.2.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- 添加spring核心依赖 -->
<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-context</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-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
Создание баз данных и таблиц данных
В этой статье используется Mysql.Для удобства демонстрации создана только простая база данных Spring и пользователь таблицы данных. SQL-код для создания таблицы данных.
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Класс сущности, соответствующий новой базе данных
Для достижения реляционного сопоставления с пользовательской таблицей в базе данных здесь создается новый класс User: User.java.
package cn.ddnd.www.Entity;
public class User {
int id;
String email;
String password;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setPassword(String password) {
this.password = password;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public String getEmail() {
return email;
}
}
Создайте новый файл Mapper.xml и интерфейс Mapper (уровень Dao).
Обратите внимание, что имя файла Mapper.xml должно совпадать с именем интерфейса Mapper.
1. Работа интерфейса: userdao.java
package cn.ddnd.www.Dao;
import cn.ddnd.www.Entity.User;
public interface UserDao {
public User getUserByEmail(String email);
}
Здесь для теста написан только один интерфейс, то есть информация о пользователе запрашивается через Email пользователя.
- Файл Mapper.xml: UserDao.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">
<mapper namespace="cn.ddnd.www.Dao.UserDao">
<select id="getUserByEmail" resultType="User">
select * from user where email = #{email}
</select>
</mapper>
Здесь нужно обратить внимание: мы используем IDEA, а IDEA по умолчанию не компилируется.main/src/java
Файлы xml в каталоге, то есть эти файлы xml не будут упакованы в файл классов при компиляции, апросто выбрось. Чтобы решить эту проблему, есть два способа: 1. Поместите файлы xml вresources
Под содержанием. 2. Настройте файл POM Maven. Здесь я использую первый метод, чтобы поставить файлы Mapper.xml в каталог ресурсов.
Конфигурационный файл Mybatis
Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="cn.ddnd.www.Entity.User" alias="User"></typeAlias>
</typeAliases>
</configuration>
здесь дляcn.ddnd.www.Entity.User
Этот класс устанавливаетUser
псевдоним, поэтому используйте напрямуюUser
готов использоватьcn.ddnd.www.Entity.User
этот класс.
Файл конфигурации Spring MVC
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value=""></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
настроить здесьInternalResourceViewResolver
парсер,prefix
атрибут указывает файл ресурсовприставка, потому что мой файл ресурсов находится вweb
каталог, поэтому я оставляю этот атрибут пустым,suffix
Страница ресурсов конфигурации свойствсуффикс.
Файл конфигурации Spring
После настройки Mybatis вы чувствуете, что код настройки очень маленький и простой? Это связано с тем, что некоторые конфигурации Mybatis настроены в Spring! Затем посмотрите на наш файл конфигурации Spring. 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">
<context:component-scan base-package="cn.ddnd.www"></context:component-scan>
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/spring?serverTimezone=GMT%2B8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!--配置Mybatis的SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入连接池数据源配置-->
<property name="dataSource" ref="dataSource"></property>
<!--注入mybatis配置信息 注意加上classpath 不然编译出来后是找不到Mybatis-config.xml的文件的-->
<property name="configLocation" value="classpath:Mybatis-config.xml"></property>
<!--mapper.xml和mapper.java不在同一个目录 则配置此参数-->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
<!--配置Mybatis的Mapper映射器 这个是指定接口配置-->
<!--<bean id="userBean" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--SqlSessionFactory是用来指定生成实现SqlSession接口的SqlSessionTemplate对象的-->
<!--<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>-->
<!--mapperInterface指定我们Mapper对应的接口-->
<!--<property name="mapperInterface" value="cn.ddnd.www.Dao.UserDaoao"></property>-->
<!--</bean>-->
<!--扫描Mapper接口并注册为Bean 这个是通过扫描包来配置-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.ddnd.www.Dao" />
</bean>
</beans>
существуетapplicationContext
настроенMybatis
изисточник данных,SqlSessionFactory,Картограф, для простоты мы выбираем регистрацию путем сканирования пакета.
Несколько замечаний:
- Добавить к
mapperLocations
Атрибут: поскольку мы помещаем файл Mapper.xml и интерфейс Mapper в разные каталоги, нам необходимо настроить Mybatis.SqlSessionFactory
при добавлении атрибутаmapperLocations
, что указываетmapper.xml
Путь к файлу. - Запустите сканирование JavaBeans:
<context:component-scan base-package="cn.ddnd.www"></context:component-scan>
Сканировать все JavaBeans в указанном пакете, - Добавьте пространство имен XML:
xmlns:context="http://www.springframework.org/schema/context"
,xsi:schemaLocation="http://www.springframework.org/schema/context
, в противном случае возникнет проблема, связанная с тем, что совпадение с подстановочными знаками является очень исчерпывающим, но объявление элемента «context:component-scan» не может быть найдено. - Добавьте classpath перед путем: при указании пути XML вам нужно начать с
classpath:文件路径
формы, иначе будет проблема, что файл XML не может быть найден, потому что файлы XML помещаются вclasses
под папку.
Напишите сервисный слой
Хотя уровень Dao (UserDao) был написан ранее, работа уровня Dao в основном заключается в сохранении данных, в то время как уровень службы отвечает за разработку логического приложения бизнес-модуля, а служба вызывает определенный интерфейс уровня Dao. для достижения постоянства данных изменение.
package cn.ddnd.www.Service;
import cn.ddnd.www.Dao.UserDao;
import cn.ddnd.www.Entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class Uservice {
@Autowired
UserDao userDao;
public User getUserByEmail(String email) {
return userDao.getUserByEmail(email);
}
}
Напишите слой контроллера
package cn.ddnd.www.Controller;
import cn.ddnd.www.Entity.User;
import cn.ddnd.www.Service.Uservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@Autowired
Uservice uservice;
@RequestMapping(value = "/")
public ModelAndView Index(){
User user;
user = uservice.getUserByEmail("xue8@ddnd.cn");
return new ModelAndView("index", "user", user);
}
}
Здесь Uservice слоя Service автоматически собирается для реализации запроса данных, а результаты запроса будут отображаться в слое View. Для удобства адрес электронной почты с запросом по умолчанию:xue8@ddnd.cn
информация о пользователе.
Напишите слой просмотра
<%--
Created by IntelliJ IDEA.
User: xueba
Date: 2018/11/29
Time: 17:34
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SSM整合</title>
</head>
<body>
email:${user.email} <br>
id:${user.id} <br>
password:${user.password} <br>
</body>
</html>
Отображение запрошенной информации о пользователе.
Настроить 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">
<servlet>
<servlet-name>Spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
</web-app>
Настроить в Web.xmlпередний контроллерDispatcherServlet
, который отвечает за отправку каждого запроса соответствующему обработчику.
запустить тест
Загрузка кода исходного кода:Пример интеграции SSM
Перепечатано с:Жду твой Талант/2018/12/16/…