English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
المفاهيم الأساسية
1.1، Spring
Spring هو إطار عمل مفتوح المصدر، تم تطوير Spring في عام 2003 كإطار عمل خفيف الوزن للبرمجة باللغة Java، انبثق جزء من المفاهيم والنماذج من كتاب Rod Johnson Expert One-On-One J2EE Development and Design. إنه تم إنشاؤه لمعالجة تعقيد تطوير التطبيقات التجارية. يستخدم Spring JavaBeans الأساسية لتحقيق ما كان يمكن تحقيقه فقط من خلال EJB. ومع ذلك، لا يتوقف استخدام Spring عند تطوير الجانب الخادم فقط. من حيث البساطة، القابلية للتشغيل، والترابط المريح، يمكن لأي تطبيق Java الاستفادة من Spring. على سبيل المثال، Spring هو إطار عمل خفيف الوزن لتحويل التحكم (IoC) ووجهات النظر الموجهة بالأحداث (AOP).
1.2، SpringMVC
Spring MVC هي منتج تابع لـ SpringFrameWork، وقد تم دمجها في Spring Web Flow. يقوم Spring MVC بتقسيم أدوار التحكم، الأنماط النموذجية، المعالجين والمسؤولين عن المعالجة، مما يجعلها أسهل للتخصيص.
1.3، MyBatis
MyBatis كانت مشروعاً مفتوح المصدر لـ apache iBatis، تم نقل هذا المشروع إلى google code في عام 2010، وأُطلق عليه اسم MyBatis. MyBatis هو إطار برمجي للتحكم في المستوى المستمر يعتمد على Java. يوفر إطار iBATIS إطارات برمجية للتحكم في المستوى المستمر تشمل SQL Maps و Data Access Objects (DAO). يقوم MyBatis بإزالة تقريبًا جميع الكودات اليدوية لـ JDBC والضبط اليدوي للمعلمات واستخراج النتائج. يستخدم MyBatis XML البسيط أو التعليقات للإعداد والمسح الأساسي، ويربط واجهات البرمجة والمشاريع العادية Java (POJOs) بالسجلات في قاعدة البيانات.
الخطوة الأولى:إنشاء مشروع ويب باستخدام Maven.
الخطوة الثانية:استيراد حزمة jar في ملف pom
(1) pom.xml
أنا نسخت جميع ملفات pom الخاص بي، بعض التحسينات الابتدائية يجب أن تُزال، احتفظ بملف 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>jstل</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> <!-- log end --> <!-- 映入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>
第三步:看整体的项目架构,先说明下我这里还没有有关springMVC的相关东西,因为我先整合sping-mybatis,在测试是否成功,成功在整合springMVC
第四步:建立model类
public class User { private int id; private String name; private String password; private String password2; /*提供set和get方法,toString方法*/ }
الخطوة الخامسة:إنشاء قاعدة بيانات،UserDao interface وملف mapper映射
(1)إنشاء جدول بسيط
(2)UserDao interface
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 --> <!-- id: وسم معين، وضبط اسم method في UserDa #{}: يشير إلى مكانةحتوا، إذا تم إدخال معامل بسيط في #{}، يمكن أن يكون الاسم في #{} عشوائيًا parameterType: نوع المعاملات، وضبط نوع UserDa resultType: نوع الناتج، وضبط نوع UserDa --> <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
الخطوة السابعة:تركيب 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整合,通过spring来管理MyBatis的SqlSessionFactory会话工厂 --> <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
الخطوة التاسعة:تكوين 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" /> <!-- تجنب تنزيل ملف عند تنفيذ AJAX بواسطة IE، عند عودة 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، لإكمال التحويل بين الطلبات وال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"> <!-- الحالة هنا هي فهمي لاضافة التقدمية والخلفية إلى النصوص التي تعود من methods في 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"> <!-- الترميز الافتراضي --> <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، لا يتطلب أي ضبط هنا لدمج الإطارات الـ 2 السابقة.
<?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>مطبيق تطوير النموذج الأرشيتك المكون من صفحة الويب</display-name> <!-- Spring و MyBatis Configuration File --> <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-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 Arabic 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 (عند إرسال البريد الإلكتروني، يرجى استبدال #بـ @) لتقديم الشكوى، مع تقديم الأدلة ذات الصلة، وسيتم حذف المحتوى المزعوم فور التحقق منه.