SSM整合

 

環境搭建

一、新建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)css

  • 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等對象)

 

 

 

二、項目下新建文件夾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不能移到別處。java

 

其實spring、springmvc的配置文件都是spring的配置文件,能夠寫在一個xml中,但ssm配置多,分開來寫,使單個xml不臃腫,即模塊化配置。mysql

springmvc配置文件中通常只寫springmvc相關的配置,好比springmvc的註解驅動、視圖解析、controller層的包掃描、springmvc的攔截器,其它配置都寫到spring配置文件中。web

 

若是spring配置文件很大,也能夠劃分爲多個xml,好比spring-tx.xml(事務配置)、spring-db.xml(數據庫相關配置).....在web.xml中使用spring-*.xml引入便可。ajax

 

 

 

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

 

 

 

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

 

 

 

五、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類的別名。spring

 

 

 

 

六、新建包、文件夾

 

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

service下放業務層的接口、實現類,能夠建一個子包impl來放實現類。數據庫

controller不須要寫接口。express

若是po類須要序列化,須要implements Serializable。

 

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

 

靜態資源的放法不少:

  • 在web下新建resource(不須要右鍵標註),resource下新建css、js、image。(最經常使用)
  • web下新建css、js、image
  • WEB-INF下新建css、js、image

 

 

 

七、在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目錄查看資源是否拷貝齊全。

 

 

 

 

七、在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";
    }
}
相關文章
相關標籤/搜索