zoukankan      html  css  js  c++  java
  • ssm之spring+springmvc+mybatis整合初探

    1、基本目录如下

     

     2、首先是向lib中加入相应的jar包

     3、然后在web.xml中加入配置,使spring和springmvc配置文件起作用。

    <?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" id="WebApp_ID" version="3.0">
        <!-- needed for ContextLoaderListener -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </context-param>
    
        <!-- Bootstraps the root web application context before servlet initialization -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        
        <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
        <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:springmvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!-- Map all requests to the DispatcherServlet for handling -->
        <servlet-mapping>
            <servlet-name>springDispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>

    4、新建一个conf源文件,相关配置在里面编写,即spring配置文件spring.xml,springmvc配置文件springmvc.xml,mybatis全局配置文件mybatis-conf.xml。连接数据库所需的外部引用文件dbconfig.properties。

    首先我们来看mybatis-conf.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>
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
            <setting name="jdbcTypeForNull" value="NULL"/>
            
            <!--显式的指定每个我们需要更改的配置的值,即使他是默认的。防止版本更新带来的问题  -->
            <setting name="cacheEnabled" value="true"/>
            <setting name="lazyLoadingEnabled" value="true"/>
            <setting name="aggressiveLazyLoading" value="false"/>
        </settings>
        
        <databaseIdProvider type="DB_VENDOR">
            <property name="MySQL" value="mysql"/>
            <property name="Oracle" value="oracle"/>
            <property name="SQL Server" value="sqlserver"/>
        </databaseIdProvider>
        
    </configuration>

    在这里主要的就是一些设置<setting>,像驼峰命名、开启二级缓存、延迟加载等等。以及标识各种数据库,像mysql、oracle等等。

    然后再来看看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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
        <!--SpringMVC只是控制网站跳转逻辑  -->
        <!-- 只扫描控制器 -->
        <context:component-scan base-package="com.gong.mybatis" use-default-filters="false">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
        
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/pages/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        
        <mvc:annotation-driven></mvc:annotation-driven>
        <mvc:default-servlet-handler/>
    </beans>

    主要是四个方面:

    • 让springmvc只处理标识了@Controller的IOC容器
    • 视图解析器
    • 配置默认的servletHandler
    • 配置<mvc:annotation-driven></mvc:annotation-driven>

    具体用法参考以前的学习笔记。

    接着看看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"
        xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
        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://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.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">
    
        <!-- Spring希望管理所有的业务逻辑组件,等。。。 -->
        <context:component-scan base-package="com.gong.mybatis">
            <context:exclude-filter type="annotation"
                expression="org.springframework.stereotype.Controller" />
        </context:component-scan>
    
        <!-- 引入数据库的配置文件 -->
        <context:property-placeholder location="classpath:dbconfig.properties" />
        <!-- Spring用来控制业务逻辑。数据源、事务控制、aop -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="driverClass" value="${jdbc.driver}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        <!-- spring事务管理 -->
        <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!-- 开启基于注解的事务 -->
        <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
        
        <!-- 
        整合mybatis 
            目的:1、spring管理所有组件。mapper的实现类。
                    service==>Dao   @Autowired:自动注入mapper;
                2、spring用来管理事务,spring声明式事务
        -->
        <!--创建出SqlSessionFactory对象  -->
        <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <!-- configLocation指定全局配置文件的位置 -->
            <property name="configLocation" value="classpath:mybatis-config.xml"></property>
            <!--mapperLocations: 指定mapper文件的位置-->
            <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property>
        </bean>
        
        <!--配置一个可以进行批量执行的sqlSession  -->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"></constructor-arg>
            <constructor-arg name="executorType" value="BATCH"></constructor-arg>
        </bean>
        
        <!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入;
        base-package:指定mapper接口的包名
         -->
        <mybatis-spring:scan base-package="com.gong.mybatis.dao"/>
        <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.gong.mybatis.dao"></property>
        </bean> -->
        
    </beans>

    我们一个个来看:

    • 首先是配置除了@Controller其余的注解皆由spring来管理
    • 引入外部的数据库的信息,并进行数据库连接配置
    • 配置事务管理器
    • 配置基于注解的事务,即可以使用@Transactional注解
    • 配置SqlSessionFactoryBean,不用我们每次都要获取SqlSessionFactory和SqlSession实例,同时引用mybatis配置文件以及mapper.xml文件存在的位置。
    • 配置一个可以进行批量执行的sqlSession。
    • 配置mapper.xml对应的接口文件的位置

    dbconfig.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true
    jdbc.username=root
    jdbc.password=123456

    5、最后就是编写相应的文件进行测试了

    具体流程:bean包里存放普通的实体类,controller包里面主要是后台和视图view之间进行交互,dao包主要是相关操作数据库的方法与mybatis.mapper中的xml相对应,service主要是存放着接口,serviceImpl主要是实现service中的方法,这些方法是可以是不同数据库方法的结合使用。首先是controller调用serviceImpl中的方法,serviceImpl中的方法调用dao里面的方法,dao里面的方法对应着mapper.xml文件中操作数据库的方法,最后controller将数据传给视图view或者view通过请求到controller。

    Employee.java

    package com.gong.mybatis.bean;
    
    import java.io.Serializable;
    
    public class Employee implements Serializable{
        
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        public Employee() {}
        
        public Employee(Integer id, String lastName, String gender, String email) {
            super();
            this.id = id;
            this.lastName = lastName;
            this.gender = gender;
            this.email = email;
        }
        private Integer id;
        private String lastName;
        private String gender;
        private String email;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", email=" + email + "]";
        }
        
    }

    EmployeeController.java

    package com.gong.mybatis.controller;
    
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.gong.mybatis.bean.Employee;
    import com.gong.mybatis.service.EmployeeService;
    
    @Controller
    public class EmployeeController {
        @Autowired
        private EmployeeService employeeService;
        
        @RequestMapping("/getemps")
        public String emps(Map<String,Object> map) {
            List<Employee> emps = employeeService.getEmps();
            map.put("emps", emps);
            return "list";
        }
    }

    EmployeeService.java

    package com.gong.mybatis.service;
    
    import java.util.List;
    import com.gong.mybatis.bean.Employee;
    
    public interface EmployeeService {
    
        public List<Employee> getEmps();
    }

    EmployeeServiceImpl.java

    package com.gong.mybatis.serviceImpl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.gong.mybatis.bean.Employee;
    import com.gong.mybatis.dao.EmployeeMapper;
    import com.gong.mybatis.service.EmployeeService;
    
    @Service
    public class EmployeeServiceImpl implements EmployeeService{
        @Autowired
        private EmployeeMapper employeeMapper;
        
        public List<Employee> getEmps(){
            return employeeMapper.getEmps();
        }
    }

    EmployeeMapper.java

    package com.gong.mybatis.dao;
    
    import java.util.List;
    
    import com.gong.mybatis.bean.Employee;
    
    public interface EmployeeMapper {
        
        public List<Employee> getEmps();
    
    }

    EmployeeMapper.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">
     
    <mapper namespace="com.gong.mybatis.dao.EmployeeMapper">
        <select id="getEmps" resultType="com.gong.mybatis.bean.Employee">
            select id,last_name lastName,email,gender from tbl_employee
        </select>
    </mapper>

    6、相关视图页面

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <a href="getemps">查询所有员工</a>
    </body>
    </html>

    list.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>员工列表</title>
    </head>
    <body>
        <table>
            <tr>
                <td>id</td>
                <td>lastName</td>
                <td>email</td>
                <td>gender</td>
            </tr>
            <c:forEach items="${emps}" var="emp">
                <tr>
                    <td>${emp.id }</td>
                    <td>${emp.lastName }</td>
                    <td>${emp.email }</td>
                    <td>${emp.gender }</td>
                </tr>
            </c:forEach>
        
        </table>
    
    </body>
    </html>

    7、启动tomcat服务器

    点击查询所有员工:

    得到如图所示界面,说明spring+springmvc+mybatis整合基本完成。 

  • 相关阅读:
    bzoj3757 苹果树
    bzoj2743 [HEOI2012]采花
    bzoj4241 历史研究
    bzoj4448 [Scoi2015]情报传递
    bzoj3295 [Cqoi2011]动态逆序对
    bzoj4034 [HAOI2015]T2
    bzoj3339 Rmq Problem
    BZOJ 1017 魔兽地图
    BZOJ 1021 循环的债务
    SUOI #37 清点更多船只
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12229688.html
Copyright © 2011-2022 走看看