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>

  

  生成夹包结构如图:

 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>

通过上面的配置  项目答题上已经配置完成  接下来就是具体逻辑的书写:

  mapper层中应该定义一个接口写要用的方法,  在mappeer.xml中写相应的sql语句:

接口:

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:

<?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层注入   

  web层代码如下:  

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";
	}
	
}

 前端界面:

上面只是简单实现了ssm框架的整合,实现了增删改查操作,没有考虑相关的校验。

mybatis分页

    1 导入mybatis分页夹包    pagehelper-4.1.5.jar

    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> -->

  

原文地址:https://www.cnblogs.com/MyJavaStudy/p/9279560.html