SSM框架搭建

1这是项目的基本目录结构
这里写图片描述

2需要的jar包
这里写图片描述
这里写图片描述
3.建立JDBC属性文件

jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=ggz123456

jdbc.initialSize=1
jdbc.maxActive=20
jdbc.maxIdle=80
jdbc.minIdle=20
jdbc.maxWait=60000
jdbc.filters=stat
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.driverClassName=com.mysql.jdbc.Driver

4.建立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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">


    <context:component-scan base-package="com.dist.service"/>
    <context:property-placeholder location="classpath:jdbc.properties"/>



    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!--   连接池启动时的初始值 -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
         <!-- 连接池的最大值  -->
        <property name="maxActive" value="${jdbc.maxActive}"/>
         <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
       <!--  <property name="maxIdle" value="${jdbc.maxIdle}"/> -->
        <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <!-- 是否启用超时自动移除空闲连接 -->
        <property name ="removeAbandoned" value="false"></property>
         <!-- 超时时间(以秒数为单位) -->
       <!--  <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/> -->
        <!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
        <property name="maxWait" value="${jdbc.maxWait}"/>

    </bean> 

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- <property name="configLocation">
            <value>classpath:mybatis-config.xml</value>
        </property> -->
        <!-- 配置实体别名 -->
        <property name="typeAliasesPackage">
            <value>com.dist.pojo</value>
        </property>
        <!-- 配置映射文件加载 -->
        <property name="mapperLocations">
            <value>classpath*:com/dist/mapping/*.xml</value>
        </property>
    </bean>



    <!-- 在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,
    设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}
    这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer
    实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,
    PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置
    sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,
    否则就无法自动注入。
    解决方案:
    改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,
    使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,
    非bean,所以不会引发提前初始化问题。
     -->

    <!-- 配置bean   自动扫描所有mapper   自动给Mapper接口产生代理类对象    并且给代理对象注入SqlSessionFactory-->
    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage"> 
            <value>com.dist.dao</value>
        </property>

        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> -->
    </bean>







    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>


    <!-- 事务处理  -->

    <aop:config>
        <aop:pointcut expression="execution(* com.baidu.service..*.*(..))" id="trPointcut"/>
        <aop:advisor advice-ref="trAdvice" pointcut-ref="trPointcut"/>
    </aop:config>

    <tx:advice id="trAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="del*" propagation="REQUIRED"/>
            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>




</beans>

5.Log4j的配置

# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL

# Global logging configuration
log4j.rootLogger=debug,stdout

# My logging configuration...
log4j.logger.cn.jbit.mybatisdemo=DEBUG


## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

log4j.logger.org.apache.ibatis=DEBUG
## log4j.logger.org.apache.jdbc.SimpleDataSource=DEBUG
log4j.logger.org.apache.ibatis.jdbc.ScriptRunner=DEBUG
## log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapclientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

6.建立数据表

DROP TABLE IF EXISTS `user_t`;  

CREATE TABLE `user_t` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `user_name` varchar(40) NOT NULL,  
  `password` varchar(255) NOT NULL,  
  `age` int(4) NOT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  

/*Data for the table `user_t` */  

insert  into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'张三','123456',24);  

7.建立实体类

package com.dist.pojo;
public class User {
    private int id;
    private String username;
    private String password;
    private int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }


}

8.controller

@Controller
@Scope("prototype")
@RequestMapping(value="/user")
public class UserController {


    @Resource
    private UserService userService;
    /**
     * 添加用户
     * @return
     */
    @RequestMapping(value = "/checkUser",method = RequestMethod.POST)
    public String addUser(Model model,HttpServletRequest req,HttpServletResponse resp) {
        System.out.println(req.getParameter("loginname"));
        System.out.println(req.getParameter("password"));
        User user=userService.findUserName(req.getParameter("loginname"));
        model.addAttribute(user);
        System.out.println(user.getPassword()); 
        return "WEB-INF/jsp/test1/showUser2";
    }

}

9.servcie接口

public interface UserService {
    public String getUserById(int userId);
    public User findUserName(String username);
    public int deleteUser(int id);


}

10.service实现类

@Service("userService") 
public class UserServiceImpl implements UserService {
     @Resource  
        private UserDao userDao;    
    @Override
    public String getUserById(int userId) {
        // TODO Auto-generated method stub
        return this.userDao.getUsernameById(userId); 
    }
    @Override
    public User findUserName(String username) {
        // TODO Auto-generated method stub
        return this.userDao.findUserByName(username);
    }
    @Override
    public int deleteUser(int id) {
        // TODO Auto-generated method stub
        return this.userDao.deleteUser(id);
    }

}

11.dao层接口


public interface UserDao {

    public User findUserByName(@Param("username") String username);
    public String getUsernameById(@Param("id") int id); 
    public int deleteUser(int id);
}

12.mapper

<?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="com.dist.dao.UserDao">    
    <select id="findUserByName" resultType="com.dist.pojo.User">
        select id,user_name,password,age from user_t where user_name ='${username}'
    </select>

    <select id="getUsernameById" resultType="String">
        select user_name  from user_t where id = #{id} 
    </select>  
    <delete id="deleteUser" parameterType="int">
        delete from user_t where id=#{id}
    </delete>
</mapper>

13.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:mvc="http://www.springframework.org/schema/mvc"  
      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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd  
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  


    <!-- 启用spring mvc 注解-->
    <mvc:annotation-driven>
        <!-- 启动JSON格式的配置 -->
        <mvc:message-converters>  
        <!-- 这里也可以自己定制class -->
        <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">  
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/html;charset=UTF-8</value>  <!-- 避免IE出现下载JSON文件的情况 -->
                </list>  
            </property>    
        </bean>  
    </mvc:message-converters>  
    </mvc:annotation-driven>

    <!-- 对静态资源文件的访问   缓存一年
    <mvc:resources mapping="/images/**" location="/WEB-INF/images/"  cache-period="31536000"/>
    <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
    <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
    <mvc:resources mapping="/favicon.ico" location="favicon.ico" />
     -->  



    <!--1.开启Springioc 自动扫描注解包  -->  
    <context:component-scan base-package="com.dist"/>  

    <!--2. 开启注解 -->  
    <mvc:annotation-driven />  

    <!--3.视图解析器:定义跳转的文件的前后缀 --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/"></property>  
        <property name="suffix" value=".jsp"></property>  
    </bean>  
    <!-- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 
    </bean>   -->



    <!--4.注解映射器(可省)  -->  
<!--     <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> -->  


    <!--5.配置适配器(不需时可省)  -->  
<!--     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        在业务方法的返回值和权限之间使用@ResponseBody注解表示返回值对象需要转成JSON文本   
        <property name="messageConverters">  
            <list>  
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>  
            </list>  
        </property>  
    </bean> -->  
</beans>   

14.web.xml

<?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>SSMDemo</display-name>  
  <welcome-file-list>  
    <welcome-file>index.html</welcome-file>  
    <welcome-file>index.htm</welcome-file>  
    <welcome-file>index.jsp</welcome-file>  
    <welcome-file>default.html</welcome-file>  
    <welcome-file>default.htm</welcome-file>  
    <welcome-file>default.jsp</welcome-file>  
  </welcome-file-list>  

   <!--Spring核心监听器  -->  
  <!--在服务器启动时加载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容器加载配置文件路径 -->
   <context-param>  
       <param-name>contextConfigLocation</param-name>  
       <param-value>classpath:spring-mybatis.xml</param-value>  
   </context-param> 
   <!-- 由Sprng载入的Log4j配置文件位置 -->
    <context-param>
           <param-name>log4jConfigLocation</param-name>
           <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <!-- Spring默认刷新Log4j配置文件的间隔,单位为millisecond -->
    <context-param>
           <param-name>log4jRefreshInterval</param-name>
           <param-value>60000</param-value>
    </context-param>

    <!-- Web 项目 Spring 加载 Log4j 的监听  -->
    <listener> 
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener>  

  <!--配置Springmvc核心控制器  -->  
    <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:spring-mvc.xml</param-value>  
        </init-param>
        <!-- <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>  --> 
    </servlet>  

    <!-- Map all requests to the DispatcherServlet for handling -->  
    <servlet-mapping>  
        <servlet-name>springmvc</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>  

  <!--配置由Spring 提供的针对中文乱码的编码过滤器 -->  
  <!-- 编码过滤器 -->  
    <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>  
     <error-page>
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
  </error-page>
</web-app>  

效果:
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值