zoukankan      html  css  js  c++  java
  • SSM整合

    环境搭建

    1、新建SpringMVC项目,添加所需的jar包

    • spring-core.jar
    • spring-beans.jar
    • spring-context.jar
    • spring-expression.jar
    • spring-aop.jar   (使用spring的注解)
    • spring-jdbc.jar  (spring-tx.jar依赖spring-jdbc,如果要使用spring的事务管理,需添加此包。就算不使用spring的事务管理,mybatis-spring.jar依赖此包,也必须添加此包)
    • spring-tx.jar  (事务一般是用spring的事务管理,如果要使用spring的事务管理,需要添加此包)

      (如果要整合AspectJ)

    • spring-aspects.jar
    • aopalliance.jar
    • aspectjweaver.jar
    • mybatis.jar
    • log4j.jar
    • commons-logging.jar
    • mybatis-spring.jar   (spring整合mybatis需要的包。springmvc本身就是spring的一部分,本来就要搭配使用,不存在什么整合的说法)
    • 数据库驱动
    • dbcp的jar包 (也可以使用其它连接池)
    • java web2个jar:servlet、jsp各一个  (需要用到request、response、session等对象)

    2、项目下新建文件夹config,右键标识为资源根目录(Resources Root),把spring的配置文件applicationContext.xml、springmvc的配置文件dispatcher-servlet.xml放进去。

    本来applicationContext.xml、dispatcher-servlet.xml、web.xml都在WEB-INF下的,因为ssm配置文件多,一般都拿出来单独放在一个文件夹里,只在WEB-INF下留一个web.xml。

    在spring配置文件中引入mybatis配置文件,然后在web.xml中引入spring配置文件、springmvc配置文件。web服务器默认加载WEB-INF下的web.xml,web.xml不能移到别处。

    其实spring、springmvc的配置文件都是spring的配置文件,可以写在一个xml中,但ssm配置多,分开来写,使单个xml不臃肿,即模块化配置。

    springmvc配置文件中一般只写springmvc相关的配置,比如springmvc的注解驱动、视图解析、controller层的包扫描、springmvc的拦截器,其它配置都写到spring配置文件中。

    如果spring配置文件很大,也可以划分为多个xml,比如spring-tx.xml(事务配置)、spring-db.xml(数据库相关配置).....在web.xml中使用spring-*.xml引入即可。

    3、config下新建db.properties

    jdbc.driver=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
    jdbc.username=chy
    jdbc.password=abcd
    jdbc.initialSize=5
    jdbc.maxTotal=30
    jdbc.maxIdle=10

    4、config下新建log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout,D
    
    
    # MyBatis logging configuration...
    log4j.logger.org.mybatis.example.BlogMapper=TRACE 
    
    
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    #如果查看调试信息,改为DEBUG即可
    log4j.appender.stdout.Threshold = ERROR
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    
    
    # File output...
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    #相对路径,部署到tomcat后,会输出日志到tomcat的logs文件夹下的error.log中
    log4j.appender.D.File = ../logs/error.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = ERROR
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    log4j.appender.D.encoding=UTF-8

    5、config下新建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>
            <package name="com.chy.po"/>
        </typeAliases>
    
    </configuration>

    数据库配置、mapper指定都移到spring配置文件中去了,mybatis配置文件只需指定po类的别名。

    6、新建包、文件夹

     

     dao下面放mapper接口、映射文件。

    service下放业务层的接口、实现类,可以建一个子包impl来放实现类。

    controller不需要写接口。

    如果po类需要序列化,需要implements Serializable。

    WEB-INF下新建lib文件夹来存放jar包,新建jsp文件夹来存放jsp文件。

    静态资源的放法很多:

    • 在web下新建resource(不需要右键标注),resource下新建css、js、image。(最常用)
    • web下新建css、js、image
    • WEB-INF下新建css、js、image

    7、在dispatcher-servlet.xml中配置springmvc

    <?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: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/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--包扫描-->
        <context:component-scan base-package="com.chy.controller" />
    
        <!--mvc的注解驱动,会自动注册HandlerMapping、HandlerAdapter,使用json转换器来支持ajax的json交互-->
        <mvc:annotation-driven />
    
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
        <!--静态资源配置-->
        <mvc:default-servlet-handler default-servlet-name="default"/>
    
        <!--下面这种配置静态资源的方式容易出错,尽量使用上面那种-->
        <!--<mvc:resources mapping="/resource/js/**" location="/resource/js/**" />-->
        <!--<mvc:resources mapping="/resource/css/**" location="/resource/css/**" />-->
        <!--<mvc:resources mapping="/resource/image/**" location="/resource/image/**" />-->
    
    </beans>

    既然是springmvc,那mvc(表现层,前端+controller)的controller(包扫描)、view(视图解析器)、前端要用的静态资源都要配置,

    至于model,表现层、业务层、持久层都要用,放到spring配置文件中去配置。

    看到<mvc:   />、<tx: />开头的标签,十有八九IDEA要导错约束,将cache换为mvc、tx即可,xsi中对应的部分也要改(已标红)。

    如果不改,会报错:“通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明。”、没有这样的bean。

    静态资源路径的2种写法:(不能直接使用IDEA提示的路径)

      <%-- 相对路径,可能会出现问题--%>
      <img src="resource/image/1.jpg" />
      
      <%--绝对路径--%>
      <img src="${pageContext.request.contextPath}/resource/image/1.jpg" />

     静态资源的配置,有时候代码本身没有错误,报404可能是因为:

    • 使用的是浏览器缓存,清除缓存或者换个浏览器试试。
    • IDEA中调试时,先前就已run | debug,修改代码后,未先点击停止,直接点重新部署 | 重启服务器。不要图省事儿,先点停止,再点部署|重启服务器,能避免很多问题。
    • 部署项目时资源拷贝不全,可在out目录查看资源是否拷贝齐全。

    7、在applicationContext.xml中配置spring

    <?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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        <!--引入数据库连接信息-->
        <context:property-placeholder location="classpath:db.properties" />
    
        <!--配置数据源,此处使用dbcp-->
        <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driver}" />
            <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="maxTotal" value="${jdbc.maxTotal}" />
            <property name="maxIdle" value="${jdbc.maxIdle}" />
        </bean>
    
        <!--配置MyBatis的SqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--注入数据源-->
            <property name="dataSource" ref="dataSource" />
            <!--指定mybatis配置文件的位置-->
            <property name="configLocation" value="classpath:mybatis-config.xml" />
        </bean>
    
        <!--配置事务管理器-->
        <!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
        <!--    &lt;!&ndash;注入数据源&ndash;&gt;-->
        <!--    <property name="dataSource" ref="dataSource" />-->
        <!--</bean>-->
    
        <!--开启事务注解,指定要使用的事务管理器-->
        <!--<tx:annotation-driven transaction-manager="transactionManager" />-->
    
        <!--包扫描-->
        <context:component-scan base-package="com.chy.service,com.chy.po" />
        
        <!--mapper扫描配置-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--指定mapper接口所在的包,有多个包时使用逗号或分号隔开-->
            <property name="basePackage" value="com.chy.dao" />
        </bean>
    
    </beans>

    各层编写示例

    po:

    @Component
    public class User implements Serializable {
        private int id;
        private String username;
        private String password;
    
        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;
        }
    }

    dao:

    public interface UserDao {
        public User queryUserById(Integer id);
    }
    <?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.chy.dao.UserDao">
        <select id="queryUserById" parameterType="integer" resultType="user">
            select * from user_tb where id=#{id}
        </select>
    </mapper>

    这2个是mapper接口、映射文件。

    service:

    public interface UserService {
        public User queryUserById(Integer id);
    }
    @Service("userService")
    public class UserServiceImpl implements UserService {
        private UserDao userDao;
    
        @Autowired
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    
        @Override
        public User queryUserById(Integer id) {
            return userDao.queryUserById(id);
        }
    }

    controller:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        private UserService userService;
    
        @Autowired
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
    
        @RequestMapping("/{id}")
        public String queryUserById(@PathVariable Integer id, Model model){
            User user = userService.queryUserById(id);
            model.addAttribute("user", user);
            return "user_info";
        }
    }
  • 相关阅读:
    ServU和win2003防火墙的设置
    面试题02.05 链表求和
    【每日一题】LeetCode1. 两数之和
    【每日一题】Leetcode50. Pow(x,n)
    ASP连接查询access和sqlserver的代码
    各种播放器(视频点播)代码大全 
    电脑操作最忌讳的小动作
    网络小知识
    C#、Java比较
    10年互联网十大失败案例
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12259365.html
Copyright © 2011-2022 走看看