SSM框架集成

SSM

主流的项目架构的三大框架

 SpringMVC: Web层框架,spring的一个模块

 Spring:容器框架

 MyBatis:持久层框架


准备相关jar包

spring依赖包


 SpringMVC依赖包


Mybatis依赖包


Mybatis支持的日志包log4j 


Mybatis和Spring框架集成的桥梁包


数据库驱动包和连接池


 Jstl标签库依赖包


各种配置文件





Mapper层

public interface UserMapper {

    int insert(User user);

    User  selectByPrimaryKey(Integerid);

    List  selectList();

    int delteByPrimaryKey(Integer id); 

}



Mapperxml文件

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEmapper

  PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mappernamespace="cn.zj.ssm.mapper.UserMapper">

    <insertid="insert"parameterType="cn.zj.ssm.pojo.User">

        insert into user  (name,password,age)values(#{name},#{password},#{age})

    </insert>


    <selectid="selectByPrimaryKey"parameterType="Integer"resultType="cn.zj.ssm.pojo.User">

        select * from user  where id = #{id}

    </select>


    <selectid="selectList"  resultType="cn.zj.ssm.pojo.User">

        select * from user

    </select>


    <deleteid="delteByPrimaryKey"parameterType="int">

        delete from user where id = #{id}

    </delete>

</mapper>



Service层 完成项目层与层之间spring对象的创建和依赖关系的维护


@Service

public class  UserServiceImpl implements UserService {


    @Autowired

    private UserMapper mapper;


    public int insert(User user) {

        return mapper.insert(user);

    }


    public User selectByPrimaryKey(Integer id) {

        System.out.println(mapper);

        return mapper.selectByPrimaryKey(id);

    }


    public List<User> selectList() {

        return mapper.selectList();

    }


    public int  delteByPrimaryKey(Integer id) {

        return mapper.delteByPrimaryKey(id);

    }

}


测试代码


@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:spring.xml")

public class  UserServiceTest {

    @Autowired

    private UserService service;


    @Test

    public void testInsert() {

        Useruser = new User(null, "乔峰", "qiaofeng", 30);

        int row = service.insert(user);

    }


    @Test

    public void  testSelectByPrimaryKey() {

        Useruser = service.selectByPrimaryKey(8);

    }


    @Test

    public void  testSelectList() throws Exception {

        Listusers = service.selectList();

        for (User user : users) {

            System.out.println(user);

        }

    }


}



applicationContext配置文件的配置

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="

  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.xsd

  http://www.springframework.org/schema/aop

  http://www.springframework.org/schema/aop/spring-aop.xsd

  http://www.springframework.org/schema/tx

   http://www.springframework.org/schema/tx/spring-tx.xsd">

<!-- 设置注解配置包扫描位置-->

<context:component-scanbase-package="cn.zj.mybatis"/>

</beans>



MyBatis 框架SqlSessionFactory对象的创建

UserMapper 代理对象使用 SqlSession 操作对象创建 

 SqlSessionFactory工厂对象创建SqlSession 对象

 SqlSessionFactory对象如何创建

   1,和Spring框架集成之前 MyBatis框架自己读取配置文件中的相关配置去创建

   2,和Spring框架集成之后交给Spring容器来创建

          在 mybatis和spring集成的类查阅桥梁包

         org.mybatis.spring.SqlSessionFactoryBean创建 SqlSessionFactory




配置文件

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="

        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.xsd

       

  http://www.springframework.org/schema/aop

       

  http://www.springframework.org/schema/aop/spring-aop.xsd

       

  http://www.springframework.org/schema/tx

       

  http://www.springframework.org/schema/tx/spring-tx.xsd

        ">



    <!-- 配置读取  db.properties 数据库配置文件 -->

    <context:property-placeholderlocation="classpath:db.properties"/>


    <!-- 配置数据源连接池  -->

    <beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">

        <propertyname="driverClassName"value="${jdbc.driverClassName}"/>

        <propertyname="url"value="${jdbc.url}"/>

        <propertyname="username"value="${jdbc.username}"/>

        <propertyname="password"value="${jdbc.password}"/>

        <propertyname="maxActive"value="${jdbc.maxActive}"/>

    </bean>



    <!--

        配置MyBatis框架的  SqlSessionFactoryBean 类,创建


         SqlSessionFactory工厂对象

     -->

    <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

        <!-- 1.注入数据源 -->

        <propertyname="dataSource"ref="dataSource"/>



        <!-- 2.配置映射文件 -->

        <propertyname="mapperLocations">

            <array>


                <!-- 可以使用通配符 * 读取  目录下面所有的配置文件 -->

                <value>classpath:cn/zj/mybatis/mapper/*Mapper.xml</value>

            </array>

        </property>


        <!-- 3. 配置别名使用包扫描  -->

        <propertyname="typeAliasesPackage"value="cn.zj.mybatis.pojo"/>


        <!-- 4.读取mybat-config.xml配置文件,此配置文件可能还会配一些mybatis框架的

            其他个性化配置

            实际项目开发可能不用配置

         -->

         <propertyname="configLocation"value="classpath:mybatis-config.xml"/>

    </bean>

</beans>

创建MyBatis的Mapper接口的代理对象

使用桥梁包org.mybatis.spring.mapper.MapperFactoryBean<T> 创建UserMapper代理对象



此种方式每一个Mapper接口需要单独配置,如果Mapper过多,创建Mapper可能造成配置代码过多

     <!-- 创建UserMapper代理对象-创建单个Mapper对象


     使用桥梁包 org.mybatis.spring.mapper.MapperFactoryBean<T> 创建 UserMapper代理对象

      -->


      <beanid="userMapper"class="org.mybatis.spring.mapper.MapperFactoryBean">


           <!-- 注入SqlSessionFacotry对象 -->

           <propertyname="sqlSessionFactory"ref="sqlSessionFactory"/>


           <!-- 注入UserMapper接口类型:底层创建UserMapper的代理对象 -->

           <propertyname="mapperInterface"value="cn.zj.mybatis.mapper.UserMapper"/>


      </bean>



使用包扫描创建MyBatis的Mapper接口的代理对象



<!-- 批量创建Mapper代理对象 ,使用包扫描创建Mapper代理对象

  使用桥梁包


  org.mybatis.spring.mapper.MapperScannerConfigurer

  -->


  <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <!-- 配置需要创建Mapper接口代理对象对应的包 -->

        <propertyname="basePackage"value="cn.zj.mybatis.mapper"/>


        <!-- 配置SqlSessionFactoryBean 的名称,不是引用 -->

        <propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/>


  </bean>


MyBatis的事务管理器的配置

一般开发,事务的管理都会使用aop切入到业务层


      <!-- 配置事务管理器 -->

      <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <!-- 注入数据源 -->

        <propertyname="dataSource"ref="dataSource"/>

      </bean>


      <!--

  spring事务配置 -->

      <tx:adviceid="txAdvice"transaction-manager="transactionManager">


        <!-- 事务属性配置 -->

        <tx:attributes>

            <!-- DQL :查询操作,配置只读事务  -->

            <tx:methodname="get*"read-only="true"isolation="REPEATABLE_READ"  propagation="REQUIRED"/>

            <tx:methodname="select*"read-only="true"isolation="REPEATABLE_READ"  propagation="REQUIRED"/>

            <tx:methodname="find*"read-only="true"isolation="REPEATABLE_READ"  propagation="REQUIRED"/>

            <tx:methodname="query*"read-only="true"isolation="REPEATABLE_READ"  propagation="REQUIRED"/>


            <!-- 其他 SQL :非只读事务 -->

            <tx:methodname="*"read-only="false"isolation="REPEATABLE_READ"  propagation="REQUIRED"/>


        </tx:attributes>


      </tx:advice>


      <!-- 配置AOP 切入事务 -->


      <aop:config>

        <!-- 切入点 -->

        <aop:pointcutexpression="execution(*

  cn.zj.mybatis.service..*.*(..))"id="pt"/>


        <!-- 切面 -->

        <aop:advisoradvice-ref="txAdvice"pointcut-ref="pt"/>

      </aop:config>



SpringMVC的集成

在web.xml配置SpringMVC的前端控制器

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appxmlns: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">


    <!-- 配置字符编码过滤器 -->

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



    <!-- 配置前端控制器 -->

    <servlet>

       <servlet-name>MVC</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <init-param>

           <param-name>contextConfigLocation</param-name>


           <!-- 读取配置文件

              问题:有多个spring相关配置文件如何读取

              如 :spring.xml 和springmvc.xml


              解决方案:

                  方案一:直接使用 统配 * 可以读取多个有相同前缀的文件

                  classpath:spring*.xml

                  方案二:先读取一个配置文件 如果 spring.xml

                  再在spring.xml文件中使用<import>标签导入 springmvc.xml文件


            -->


           <param-value>classpath:spring.xml</param-value>

       </init-param>


       <load-on-startup>1</load-on-startup>


    </servlet>

    <servlet-mapping>

       <servlet-name>MVC</servlet-name>

       <url-pattern>*.do</url-pattern>

    </servlet-mapping>


</web-app>

[if !supportLists]2.1.1.  [endif]springmvc.xml配置文件

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:mvc="http://www.springframework.org/schema/mvc"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    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

        ">

        <!-- 配置springmvc的注解驱动 -->

        <mvc:annotation-driven/>


</beans>



编写控制器 UserController


@Controller

@RequestMapping("/user")

public class UserController

  {


    @Autowired

    private UserService service;


    @RequestMapping("/list")

    public String list(Model m) {


        //调用service查询所有用户方法

        Listusers = service.selectList();


        //共享数据

        m.addAttribute("users", users);


        return "/WEB-INF/view/user_list.jsp";

    }



    @RequestMapping("/delete")

    public String delete(Integer id) {

        System.out.println(id);


        //调用service层的删除方法

        service.delteByPrimaryKey(id);


        return "redirect:/user/list.do";

    }


}



user_list.jsp 页面

在jsp页面使用jstl标签库需要先在页面引入jstl 标签库

<%@pagelanguage="java"contentType="text/html;

  charset=UTF-8"

    pageEncoding="UTF-8"%>

<!-- 引入jstl标签库  -->

<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>

<!DOCTYPEhtml>

<html>

<head>

<metacharset="UTF-8">

<title>Insert title here</title>

</head>

<body>

    <h3>用户列表</h3>


    <tableborder="1"style="width: 500px;" cellspacing="0">

        <tr>

            <th>id</th>

            <th>名称</th>

            <th>密码</th>

            <th>年龄</th>

            <th>操作</th>

        </tr>



        <c:forEachitems="${users}"var="user">

            <tr>

                <td>${user.id}</td>

                <td>${user.name}</td>

                <td>${user.password}</td>

                <td>${user.age}</td>

                <td>

                    <ahref="javascript:void(0);"onclick="deleteByPrimaryKey(${user.id})">删除</a> 

                    <ahref="">修改</a>

                </td>

            </tr>

        </c:forEach>

    </table>


<scripttype="text/javascript">


    function deleteByPrimaryKey(userId){

        if(confirm("亲,您确定删除此条数据么?")){

                window.location.href="${pageContext.request.contextPath}/user/delete.do?id="+userId;

        }

    }

</script>

</body>

</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。