SSM整合

SSM整合思路

  1. spring : 業(yè)務(wù)層萧锉,管理service柿隙、dao禀崖、工具類對象
  2. springmvc:視圖層波附,界面層掸屡,負(fù)責(zé)接受請求仅财,顯示處理結(jié)果的满着。
  3. mybatis:持久層,訪問數(shù)據(jù)庫的缕探。
    用戶發(fā)起請求-- springmvc接收---spring中的service對象---MaBatis處理數(shù)據(jù)
    SSM整合也叫作SSI(IBatis也就是mybatis的前身)爹耗,整合中有容器潭兽。
  • 第一個容器springmvc容器山卦,管理controller控制器對象 - 第二個容器spring容器账蓉,管理service逾一,dao工具類對象的
    我們要做的把使用的對象交給合適的容器對象創(chuàng)建铸本,管理。把Controller還有web開發(fā)的相關(guān)對象遵堵,交給springmvc容器箱玷,這些web用的對象寫在springmvc配置文件中。
    service陌宿,到定義在spring的配置文件中锡足,讓spring管理這些對象。

springmvc容器和spring容器是有關(guān)系的舱污,關(guān)系已經(jīng)確定好了呀舔。
springmvc容器是spring容器的子容器弥虐,類似java中的繼承。字可以訪問付的內(nèi)容媚赖。
在子容器中的Controler可以訪問父容器中的service對象霜瘪,就可以實現(xiàn)controller使用service對象、

  • 實現(xiàn)步驟
  1. 使用springdb的mysql庫
  2. 新建maven web項目
  3. 加入依賴:
    springmvc惧磺、spring颖对、mybatis、jackson磨隘、mysql缤底、druid顾患、jsp、servlet
  4. 寫web.xml:
    注冊DispathcherServlet: 創(chuàng)建springmvc容器對象个唧,才能創(chuàng)建Controller類對象江解,創(chuàng)建servlet,才能接受用戶的請求徙歼。
    注冊spring監(jiān)聽器:ContextLoaderListener犁河,目的:創(chuàng)建spring容器對象,次啊能創(chuàng)建service魄梯,到等對象桨螺。
    注冊字符集過濾器,解決post請求亂碼的問題酿秸。
  5. 創(chuàng)建包灭翔,Controller包,service辣苏,dao缠局,實體類包名創(chuàng)建號
  6. 寫springmvc,spring考润,mabatis的配置文件
    springmvc配置文件
    spring配置文件
    mybatis主配置文件
    數(shù)據(jù)庫屬性的配置文件
  7. 寫代碼 狭园,dao接口 mapper文件,service和實現(xiàn)類糊治,controller唱矛,實體類
  8. 寫jsp頁面
  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lz</groupId>
  <artifactId>ssm01-lz</artifactId>
  <version>1.0</version>
  <packaging>war</packaging>



  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!--jsp-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
      <scope>provided</scope>
    </dependency>

    <!--springmvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--事務(wù)相關(guān)-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

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

    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

    <!--mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>

    <!-- mysql -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>

    <!-- druid -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>

  </dependencies>

  <build>
    <!--將src下以及resources目錄下的properties、xml文件編譯后寫出到target目錄-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>

      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<!-- 中央調(diào)度器-->
  <servlet>
    <servlet-name>myWeb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:conf/dispatcherServlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>myWeb</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!--  注冊spring監(jiān)聽器-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:conf/applicationContext.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>
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
</web-app>

  • springmvc.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: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 https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--    springmvc配置文件 , 聲明組件掃描器-->
    <context:component-scan base-package="com.lz.controller"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
<!--  返回json井辜, 訪問靜態(tài)資源-->
    <mvc:annotation-driven/>
</beans>

  • jdbc.properties
jdbc.url=jdbc:mysql://localhost:3306/door
jdbc.username=root
jdbc.password=root

  • spring.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"
       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">
<!--    spring配置文件 聲明service dao 工具類對象-->
    <context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!--    聲明數(shù)據(jù)源绎谦,鏈接數(shù)據(jù)庫-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
    init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
<!--    創(chuàng)建mybatis sqlsessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:conf/mybatis.xml"/>
    </bean>
    <!--    聲明mybatis掃描器,創(chuàng)建dao對象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.lz.dao"/>
    </bean>
<!--    聲明service注解 所在的包名位置-->
    <context:component-scan base-package="com.lz.service"/>
<!--    事物配置:注解配置粥脚,aspectj的配置-->
    
</beans>

  • mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    設(shè)置別名-->
    <typeAliases>
<!--        實體類包名-->
        <package name="com.lz.domain"/>
    </typeAliases>

<!--    sql mapper映射位置-->
    <mappers>
<!--        使用package要求: mapper文件和dao接口名完全一樣-->
<!--       或者 mapper文件和dao接口必須在同一目錄-->
        <package name="com.lz.dao"/>
    </mappers>
</configuration>

  • dao層 mapper and StudentDao
public interface StudentDao {
    int insertStudent(Student student);
    List<Student> selectStudent();
}

<?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.lz.dao.StudentDao">
    <select id="selectStudent" resultType="Student">
        select id, name, age from student order by id desc
    </select>
    <insert id="insertStudent" >
        insert into student(name, age) values (#{name}, #{age})
    </insert>
</mapper>
  • service 接口 實現(xiàn)類
public interface StudentService {
    int addStudent(Student student);
    List<Student> findStudent();
}

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;
    @Override
    public int addStudent(Student student) {
        int nums = studentDao.insertStudent(student);
        return nums;
    }

    @Override
    public List<Student> findStudent() {
        return  studentDao.selectStudent();
    }
}

  • controller

@Controller
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentService service;
    //注冊學(xué)生
    @RequestMapping("/addStudent.do")
    public ModelAndView addStudent(Student student){
        ModelAndView view = new ModelAndView();
        String tips;
        // 調(diào)用service處理student
        int i = service.addStudent(student);
        if (i > 0){
            // 注冊成功
            tips = "學(xué)生{" + student.getName()+"}注冊成功";
        }else {
            tips = "注冊識別";
        }
        view.addObject("tips", tips);
        view.setViewName("result");
        return view;
    }

    // 處理查詢 窃肠,響應(yīng)ajax
    @RequestMapping("/queryStudent")
    @ResponseBody
    public List<Student> queryStudent(){
        List<Student> students = service.findStudent();
        return students;
    }
}

  • WEB/INF/jsp/result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.get("tips")}
</body>
</html>
  • addStudent.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" +
    request.getServerName() + ":" + request.getServerPort() +
     request.getContextPath() + "/";
%>
<html>
<head>
    <title>注冊學(xué)生</title>
    <base href="<%=basePath%>"/>
</head>
<body>
    <div align="center">
        <form action="student/addStudent.do">
            <table>
                <tr>
                    <td>姓名:</td>
                    <td><input type="text" name="name"></td>
                </tr>
                <tr>
                    <td>年齡:</td>
                    <td><input type="text" name="age"></td>
                </tr>
                <tr>
                    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                    <td><input type="submit" value="注冊"></td>
                </tr>
            </table>
        </form>
    </div>
</body>
</html>
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" +
            request.getServerName() + ":" + request.getServerPort() +
            request.getContextPath() + "/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>"/>
</head>
<body>
    <div align="center">
        <p>SSM整合</p>
        <table>
            <tr>
                <td><a href="addStudent.jsp">注冊學(xué)生</a></td>
            </tr>
            <tr>
                <td><a href="listStudent.jsp">瀏覽學(xué)生</a></td>
            </tr>
        </table>
    </div>
</body>
</html>

  • listStudent.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" +
            request.getServerName() + ":" + request.getServerPort() +
            request.getContextPath() + "/";
%>
<html>
<head>
    <title>查詢學(xué)生</title>
    <base href="<%=basePath%>">
    <script src="js/jquery.min.js"></script>
    <script type="text/javascript">
        $.ajax({
            url: "student/queryStudent.do",
            type: "get",
            dataType:"json",
            success:function (data) {
                //清楚舊數(shù)據(jù)
                $("#info").html("")
                $.each(data, function (i, n) {
                    $("#info").append("<tr>" +
                        "<td>" +n.id+"</td>"+
                        "<td>" +n.name+"</td>"+
                        "<td>" +n.age+"</td>"+
                        "</tr>")
                })
            }
        })

    </script>
</head>
<body>
    <div align="center">
        <table>
            <thead>
                <tr>
                    <td>學(xué)號</td>
                    <td>姓名</td>
                    <td>年齡</td>
                </tr>
            </thead>
            <tbody id="info">

            </tbody>
        </table>
    </div>
</body>
</html>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刷允,隨后出現(xiàn)的幾起案子冤留,更是在濱河造成了極大的恐慌,老刑警劉巖树灶,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纤怒,死亡現(xiàn)場離奇詭異,居然都是意外死亡天通,警方通過查閱死者的電腦和手機泊窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烘豹,你說我怎么就攤上這事瓜贾。” “怎么了携悯?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵阐虚,是天一觀的道長。 經(jīng)常有香客問我蚌卤,道長实束,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任逊彭,我火速辦了婚禮咸灿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侮叮。我一直安慰自己避矢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布囊榜。 她就那樣靜靜地躺著审胸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卸勺。 梳的紋絲不亂的頭發(fā)上砂沛,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音曙求,去河邊找鬼碍庵。 笑死,一個胖子當(dāng)著我的面吹牛悟狱,可吹牛的內(nèi)容都是我干的静浴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼挤渐,長吁一口氣:“原來是場噩夢啊……” “哼苹享!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浴麻,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤得问,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后白胀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椭赋,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年或杠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣蔚。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡向抢,死狀恐怖认境,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挟鸠,我是刑警寧澤叉信,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站艘希,受9級特大地震影響硼身,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜覆享,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一佳遂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撒顿,春花似錦丑罪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拧抖,卻和暖如春煤搜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唧席。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工宅楞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袱吆。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓厌衙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绞绒。 傳聞我的和親對象是個殘疾皇子婶希,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • SSM整合即Spring+SpringMVC+Mybatis,在了解SSM整合之前先回顧下MVC框架 MVC開發(fā)模...
    修建自己的碼頭閱讀 560評論 0 2
  • SSM整合筆記 整合Spring 編寫xml配置文件,開啟注解掃描(指定Controller注解不掃描) <!--...
    EvanPoison閱讀 957評論 0 0
  • 本篇來整理一下蓬衡,Spring喻杈、SpringMVC、MyBatis狰晚,這3大框架的整合筒饰,本文使用Maven做依賴管理,...
    h2coder閱讀 623評論 0 2
  • SSM整合思路: 1,新建 maven web 項目 2壁晒,加入依賴 springm...
    k_c96d閱讀 278評論 0 0
  • 今天感恩節(jié)哎瓷们,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄谬晕。 中午開了第一次的黨會碘裕,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,556評論 0 11