ssm整合

SSM項目搭建

1  整合夾包:maven構建 pom.xml以下

<dependencies>
  
  	<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.1</version>
</dependency>


  	<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>3.2.4.RELEASE</version>
	    <scope>test</scope>
	</dependency>
  	
    <!-- springMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- spring jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- spring aop  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>

        <!-- mybatis與spring整合 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- 數據庫鏈接池 和驅動-->
        <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>

        <!-- jstl junit servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
            <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
            </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- spring單元測試 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
            <scope>test</scope>
        </dependency>

  </dependencies>

  

  生成夾包結構如圖:css

 

 

 2  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:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	
	
	<!-- 註解掃描包 -->
	<context:component-scan base-package="com.login.**.mapper"></context:component-scan>
	<context:component-scan base-package="com.login.**.services"></context:component-scan>
	<context:component-scan base-package="com.login.**.servicesimpl"></context:component-scan>
	
	
	<!-- 導入資源文件 -->
	<context:property-placeholder location="classpath:db.properties"/>
	
	<!-- 配置 C3P0 數據源 -->
	<bean id="dataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="user" value="${test.username}"></property>
		<property name="password" value="${test.password}"></property>
		<property name="jdbcUrl" value="${test.url}"></property>
		<property name="driverClass" value="${test.driver}"></property>

		<!-- <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property> -->
	</bean>
	
	<!-- 整合mybatis -->
	<!--第1步: 建立sqlSessionFactory工廠 -->
	<bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:SqlConfig.xml"></property>
	</bean>
	<!-- 配置mybatis的代理接口開發 * 接口類名和映射文件必須同名 * 接口類和映射文件必須在同一個目     錄下 * 接口的映射文件的namespace名稱必須是接口的全限定名 
        * 接口的方法名必須和映射的statement的id一致 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 掃描全部dao接口的實現,加入到ioc容器中  -->
        <property name="basePackage" value="com.login.mapper"></property>
        <property name="SqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
	
	
	
	<!-- 配置事務 -->
	
	<!-- 1. 配置事務管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
		
	</bean>
	
	
	<!-- 2. 配置事務切入點, 以及把事務切入點和事務屬性關聯起來 -->
	<aop:config>
		<aop:pointcut expression="execution(* com.atguigu.spring.tx.xml.service.*.*(..))" 
			id="txPointCut"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>	
	</aop:config>
	
	<!-- 3. 配置事務屬性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 根據方法名指定事務的屬性 -->
			<tx:method name="purchase" propagation="REQUIRES_NEW"/>
			<tx:method name="get*" read-only="true"/>
			<tx:method name="find*" read-only="true"/>
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>
	

	
</beans>

  

3 mybatis.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>
        <package name="com.ssm.model" />
    </typeAliases> -->

    <!-- mybatis分頁插件 -->
   <!--  <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper"></plugin>
    </plugins> -->

</configuration>

  

 4  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: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.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
	
	<!-- 配置掃描包 -->
	
	<!-- 組件掃描 -->
	

	<context:component-scan base-package="com.login.web">
	</context:component-scan>
	
	<!-- 讓處理器適配器支持json數據解 -->
	 <mvc:annotation-driven/>
		<!-- <mvc:message-converters>
			<bean
				class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
				<property name="supportedMediaTypes">
					<list>
						<value>application/json;charset=UTF-8</value>避免IE出現下載JSON文件的狀況
					</list>
				</property>
			</bean>
		</mvc:message-converters> -->
	<!-- </mvc:annotation-driven>  -->
	
	<!-- 試圖解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<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" />
		<!-- 指定所上傳文件的總大小,單位字節。注意maxUploadSize屬性的限制不是針對單個文件,而是全部文件的容量之和 -->
		<property name="maxUploadSize" value="3145728" />
	</bean>
	
	
	<!-- 資源映射 不攔截 的 靜態資源 -->
	<mvc:resources location="/" mapping="/**/*.html" />
	<mvc:resources location="/" mapping="/**/*.js" />
	<mvc:resources location="/" mapping="/**/*.css" />
	<mvc:resources location="/" mapping="/**/*.png" />
	<mvc:resources location="/" mapping="/**/*.jpg" />
	<mvc:resources location="/" mapping="/**/*.gif" />
	<mvc:resources location="/" mapping="/**/*.eot" />
	<mvc:resources location="/" mapping="/**/*.svg" />
	<mvc:resources location="/" mapping="/**/*.ttf" />
	<mvc:resources location="/" mapping="/**/*.woff" />
	

</beans>

   

 5 web.xml配置

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <!-- 加載spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- 字符編碼過濾器 -->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <!-- 配置SpringMVC核心控制器 -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>



  <display-name>Archetype Created Web Application</display-name>
</web-app>

經過上面的配置  項目答題上已經配置完成  接下來就是具體邏輯的書寫:html

  mapper層中應該定義一個接口寫要用的方法,  在mappeer.xml中寫相應的sql語句:前端

接口:java

package com.login.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.login.entity.User;

public interface UserMapper {
	/*根據id查單個用戶*/
	public User findUserById(int id);
	
	/*查詢全部的用戶*/
	public List<User> findAllUsers();
	
	/*新增單個用戶用戶*/
	public void inserUser(User user);
	
	/*修改用戶信息  傳入多個參數*/
	public void updateUser(@Param("user") User user,@Param("id")int id);
	/*根據用戶id 刪除用戶*/
	public void deleteUser(int id);
	
}

  mapper.xml:mysql

<?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 表示命名空間 必須和 該mapper對應的接口的全路徑 -->
<mapper namespace="com.login.mapper.UserMapper">

	 <resultMap type="com.login.entity.User" id="userResult">
	 	<id property="userid" column="user_id"/>
		<result property="username" column="user_name" />
		<result property="userpwd" column="user_pwd"/>
		
		<result property="userphone"  column="user_phone"/>
	
	</resultMap>
	
	
	
		
	
	<!-- 根據id查出User類    public User findUserById(int id); -->
	<select id="findUserById" parameterType="int" resultMap="userResult">
		SELECT 	* from   user  where user_id=#{id}
	</select>
	
	
	<!--查詢全部的用戶  public List<User> findAllUsers();  -->
	
	<select id="findAllUsers" resultMap="userResult">
		select user_id, user_name,user_pwd,user_phone from user
	</select>
	
	<!--  新增單個用戶用戶   public void inserUser(User user);-->
	<insert id="inserUser" parameterType="com.login.entity.User">
		insert into user(user_id,user_name,user_pwd,user_phone) 
			values(null,#{username},#{userpwd},#{userphone})
	</insert>
	 
	 
	 <!-- 修改用戶信息 public void updateUser(User user); -->
	 <update id="updateUser">
	 	update user set user_name=#{user.username},
	 	user_pwd=#{user.userpwd},user_phone=#{user.userphone}
				where user_id=#{id}	 
	 </update>
	 
	 <!-- /*根據用戶id 刪除用戶  public void deleteUser(int id); -->
	 
	 <delete id="deleteUser" parameterType="int">
	 		delete from user where user_id=#{id}
	 </delete>
	
	
</mapper>

 以上就是具體的dao層寫法   service層將dao層注入   git

  web層代碼以下:  github

package com.login.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.login.entity.User;
import com.login.services.UserServices;

@Controller
public class UserServlet {
	@Autowired
	private UserServices userServices;
	
	/*根據id查單個用戶*/
	@RequestMapping("/findUserById")
	public User findUserById(int id){
		User user=userServices.findUserById(id);
		return user;
	}
	
	
	/*查詢全部用戶的信息*/
	@RequestMapping("/findAllUsers")
	public String findAllUsers(Model mode) {
		List<User> list=userServices.findAllUsers();
		mode.addAttribute("list",list);
		return "userMessage";
	}
	
	/*新增單個用戶用戶*/
	@RequestMapping("/inserUser")
	public String  inserUser(HttpServletRequest request){
		String username=request.getParameter("username");
		String userpwd=request.getParameter("userpwd");
		String userphone=request.getParameter("userphone");
		User user=new User(username, userpwd, userphone);
		userServices.inserUser(user);
		return "start";
	}
	
	/*修改用戶信息*/
	@RequestMapping("/updateUser")
	public void updateUser(User user,int id){
		userServices.updateUser(user, id);
	}
	/*根據用戶id 刪除用戶*/
	@RequestMapping("/deleteUser")
	public String deleteUser(int id){
		userServices.deleteUser(id);
		return "userMessage";
	}
	
}

 前端界面:web

上面只是簡單實現了ssm框架的整合,實現了增刪改查操做,沒有考慮相關的校驗。spring

 

mybatis分頁

    1 導入mybatis分頁夾包    pagehelper-4.1.5.jarsql

    2  mybatis配置分頁

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper"></plugin>
    </plugins>

    3   分頁控制層編寫 

    4  前臺分頁jstl方式顯示

 

	@RequestMapping("/userInfo")
    public String getUsers(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model){
        //從第一條開始 每頁查詢五條數據
        PageHelper.startPage(pn, 5);
        List<User> list=userServices.findAllUsers();
        //將用戶信息放入PageInfo對象裏
        PageInfo page = new PageInfo(list,5);
        
        model.addAttribute("pageInfo", page);
        System.out.println(page);
        return "pagelist";
    }

  

 

 <c:forEach items="${pageInfo.list }" var="user11">

   <div>${user11.userid }ddd</div>
   <div>${user11.username }name</div>
 </c:forEach>
	
       
       
        <!-- 分頁文字信息,其中分頁信息都封裝在pageInfo中 -->
            <div class="col-md-6">
                當前第:${pageInfo.pageNum}頁,總共:${pageInfo.pages}頁,總共:${pageInfo.total}條記錄
            </div>
            
            
            
            <div class="col-md-6">
                <nav aria-label="Page navigation">
                  <ul class="pagination">
                    <li><a href="${pageContext.request.contextPath}/userInfo?pn=1">首頁</a></li>
                    <c:if test="${pageInfo.hasPreviousPage }">
                         <li>
                          <a href="${pageContext.request.contextPath}/userInfo?pn=${pageInfo.pageNum-1}" aria-label="Previous">
                            <span aria-hidden="true">«前一晚上</span>
                          </a>
                        </li>
                    </c:if>


					
                    <c:forEach items="${pageInfo.navigatepageNums }" var="page_Num">
                    
                        <c:if test="${page_Num == pageInfo.pageNum }">
                            <li class="active"><a href="#">${ page_Num}</a></li>
                        </c:if>
                        <c:if test="${page_Num != pageInfo.pageNum }">
                            <li><a href="${pageContext.request.contextPath}/userInfo?pn=${ page_Num}">${ page_Num}</a></li>
                        </c:if>
                    </c:forEach> 
                    <c:if test="${pageInfo.hasNextPage }">
                        <li>
                          <a href="${pageContext.request.contextPath}/userInfo?pn=${pageInfo.pageNum+1}" aria-label="Next">
                            <span aria-hidden="true">»後一頁</span>
                          </a>
                        </li>
                    </c:if>   
                    <li><a href="${pageContext.request.contextPath}/userInfo?pn=${pageInfo.pages}">末頁</a></li>
                  </ul>
                </nav>
            </div>
</body>

  

 

 

注意:

    1  Autowired注入的(一般)是接口

   2   在測試的時候須要先將配置文件加載進來才能實例化對象,才能調用方法  對於spring能夠採用下面方式加載配置文件

      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration(locations={"classpath:SqlConfig.xml","classpath:spring-mybatis.xml" })

  3   在spring-mvc  配置中  須要有適配器 /應攝器  否則進不了requestMapping 中

  4   resultMap的用法   resultType要求數據庫字段和屬性名相同  否則賦不了值

 

解決編譯問題

  <!-- <plugins>

			java編譯插件 jkd1.8
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins> -->
相關文章
相關標籤/搜索