J2EE-022 SSM XML配置SSM框架


Spring IOC,DI
Spring-MVC 从前端到后端的流程控制
Mybatis ORM框架

xml框架结构认识

各个XML流程和作用解释

整体XML框架大概结构

ContextLoaderListener监听类 Web.xml Spring-mvc Spring-tx.xml applicationContext.xml Mybatis.xml Bean-Controller.xml Bean-Service.xml Mapper-Dao接口类 注入 注入 注入 分发 监听类指向监听app 加载Bean 加载Bean 加载Bean ContextLoaderListener监听类 Web.xml Spring-mvc Spring-tx.xml applicationContext.xml Mybatis.xml Bean-Controller.xml Bean-Service.xml Mapper-Dao接口类

web.xml

  • 配置DispatcherServlet,进行访问的入口路径和流程分发
  • 配置CharacterEncodingFilter 配置编码格式为UTF-8
  • 配置监听器ContextLoaderListener,作用是和web初始化的事实一同初始化加载Bean

spring-mvc.xml

  • 配置视图解析器InternalResourceViewResolver,设置前(prefix)后(suffix)缀路径
  • import,加载Bean文件
  • mvc:default-servlet-handler,开启静态资源放行
  • mvc:annotation-driven 开启自定义标签

spring-Mybatis.xml

  • 加载jdbc.properties
  • 配置DataSource数据源
  • 配置sqlSessionBeanFactory,整合Mybatis的SqlSessionFactory对象到spring容器中进行管理
  • 配置MapperScannerConfigurer,以前的方式config里通过environments标签获得对象,这里直接注入找到对象注入进去 ,配置使用代理方式来生成XML文件映射Mapper接口的实例交给spring容器管理等同调用了sqlSession.getMapper()方法

吾日三省吾身之前是用数据流加载XML的方式获得SqlSession方法,再通过sqlSession.openSesion()获得对象,再通过sqlSesson.GetMapper(类对象)拿到Mapper,比如:
Reader reader = Resources.getResourceAsReader("mybatisconfig/MybatisConfiguration.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader); sqlSession = build.openSession();UserDAO mapper = sqlSession.getMapper(UserDAO.class);

spring-tx.xml

  • 配置DataSourceTransactionManager,事务管理器
  • 配置<tx:advice 切面通知规则
  • 配置<aop:config 切如点
  • 加载bean-context 逻辑分层负责service层加载,事务处理service层

Bean-context.xml

  • 针对service类的Bean配置

Bean-controller.xml

  • 针对controller类的Bean配置

BeanMapper.xml

  • Mapper类映射接口完成TSQL编写

总结

总结:大体可以看成4层,
1.Web.config层 负责启动
2.spring-mvc层 负责分发
3.spring-mybatis 负责数据源和sqlSessionFactory
4.spring-tx,负责数据库的链接对象和Mpaper映射关系

项目创建

考虑好了我们的xml需要怎么进行分类,就开始思考需要使用那些Maven引用,进行项目的创建

pom.xml

spring-webmvc:加载dipacherServlet分发器
spring-aspects:用于事务切入点的通知
spring-jdbc:spring数据库链接
druid:数据源
mybatis:ORM框架
mybatis-spring:sqlSeesionFactory
mysql-connector-java:数据库driver驱动
servlet-api:分发
lombok:工具类

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
    </dependency>

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

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
    </dependency>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
    </dependency>

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

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

web.config

  • 配置dipatcherServlet分发器
  • 这里需要新增spring-mvc.xml文件后面进行配置
<servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:context/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • 配置characterencodingFilter编码格式
 <filter>
        <filter-name>Filter</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>Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • 配置监听器,同web一同启动
  • 需要新增applicationContext文件
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

Spring-mvc.xml

  • 配置InternalResourceViewResolver,jsp视图解析器
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="suffix" value=".jsp"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
    </bean>
  • 开启mvc自定义标签使用
 - <mvc:annotation-driven/>
  • 开启静态资源的放行
<mvc:default-servlet-handler/>
  • 引入Bean-controller.xml
<import resource="classpath:context/book/book-controller.xml"/>

Spring-mybatis.xml

  • 配置数据源
    1.加载配置文件
<context:property-placeholder location="classpath:jdbc.properties"/>

2.加载数据源

 <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.root}"></property>
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="password" value="${jdbc.pwd}"></property>
    </bean>

3.配置SqlSessionFactoryBean
1.属性DataSource为数据源
2.configLoaction和mapperLocations为配置mapper的2种方式
mapperLocations是在不同包的情况下配置XML文件加载
configLoaction是加载Mybatisconfig种的配置环境Env

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="druidDataSource"></property>
    <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
    <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"></property>
</bean>

4.配置MapperScannerConfigurer,是为了解决MapperFactoryBean繁琐而生的,有了MapperScannerConfigurer就不需要我们去为每个映射接口去声明一个bean了。大大缩减了开发的效率。

   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="scannerConfigurer">
        <property name="basePackage" value="demo.mvc.dao"/>
    </bean>

Spring-tx.xml

1.配置事务DataSourceTransactionManager,加载数据源

<bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="druidDataSource"/>
    </bean>

2.配置切面tx:advice

 <tx:advice transaction-manager="transcationManager" id="interceptor">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="query*" propagation="SUPPORTS"/>
            <tx:method name="log*" propagation="REQUIRES_NEW"/>
            <tx:method name="*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
        </tx:attributes>
    </tx:advice>

3.配置切入点aop.conifg

<aop:config>
        <aop:pointcut id="pcut" expression="execution(* ssm.mvc..*.*(..))"/>
        <aop:advisor advice-ref="interceptor" pointcut-ref="pcut"/>
    </aop:config>

4.配置切入点aop.conifg
引入DAO层的context文件

 <import resource="classpath:context/book/book-context.xml"/>

Bean-Context.xml

注册Servie层Bean

<bean class="ssm.mvc.service.BooksServiceImpl" id="bookService">
        <property name="bookMapper" ref="bookMapper"></property>
</bean>

ref="bookMapper"指向的是接口

Bean-controller.xml

注册controller的ben

    <bean id="bookController" class="ssm.mvc.controller.BookController">
        <property name="bookService" ref="bookService"></property>
    </bean>

配置Mapper.xml

<mapper>
    <!--增加一本书-->
    <insert id="addBook" parameterType="book">
        insert into books(bookName,bookCount,detail)
        values (#{bookName},#{bookCount},#{detail})
    </insert>
    <!--删除一本书-->
    <delete id="deleteBookByID" parameterType="int">
        delete from books where bookID=#{bookID}
    </delete>
    <!--更新一本书-->
    <update id="updateBook" parameterType="book">
        update books set
                         bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
        where bookID=#{bookID} ;
    </update>
    <!--查询一本书-->
    <select id="queryByID" resultType="book">
        select * from books where bookID=#{bookID}
    </select>
    <!--查询所有书-->
    <select id="queryAllBooks" resultType="book">
        select * from books
    </select>
</mapper>

配置ApplicationContext.xml

  <import resource="classpath:context/spring-mybatis.xml"/>
    <import resource="classpath:context/spring-tx.xml"/>
    <import resource="classpath:context/spring-mvc.xml"/>

配置Mybatis-config.xml

  • 配置别名和小驼峰命名方式
 <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <typeAlias type="ssm.mvc.model.Books" alias="book"></typeAlias>
    </typeAliases>

类代码编写

前端JS页面

<h1>全部书籍展示</h1>
${list}

Controller

@RequestMapping("/book")
public class BookController {
    private BookService bookService;
    public void setBookService(BookService bookService) {
        this.bookService = bookService;
    }
    //查询全部书籍,并且返回到一个页面进行显示
    @RequestMapping("/allBooks")
    public String list(Model model) {
        List<Books> books = bookService.queryAllBooks();
        model.addAttribute("list", books);
        return "allBooks";
    }
}

Mapper

public interface BookMapper {
    //增加一本书
    int addBook(Books books);
    //删除一本书
    //@Param注解指定传入参数的名称
    int deleteBookByID(@Param("bookID") int id);
    //更新一本书
    int updateBook(Books books);
    //查询一本书
    //@Param注解指定传入参数的名称
    Books queryByID(@Param("bookID") int id);
    //查询全部的书
    List<Books> queryAllBooks();
}

model

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Books {
    private Integer bookID;
    private String bookName;
    private Integer bookCounts;
    private String bookeDetail;
}

Service层,

public class BooksServiceImpl implements BookService{
    //dao层的Mapper接口对象
    private BookMapper bookMapper;
    //set方法,为后续Spring注入准备
    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }
    public int addBook(Books books) {
        //调用dao层的方法
        return bookMapper.addBook(books);
    }
    public int deleteBookByID(int id) {
        //调用dao层的方法
        return bookMapper.deleteBookByID(id);
    }
    public int updateBook(Books books) {
        //调用dao层的方法
        return bookMapper.updateBook(books);
    }
    public Books queryByID(int id) {
        //调用dao层的方法
        return bookMapper.queryByID(id);
    }
    public List<Books> queryAllBooks() {
        //调用dao层的方法
        return bookMapper.queryAllBooks();
    }
}

services层

public interface BookService {
    //增加一本书
    int addBook(Books books);
    //删除一本书
    int deleteBookByID(int id);
    //更新一本书
    int updateBook(Books books);
    //查询一本书
    Books queryByID(int id);
    //查询全部的书
    List<Books> queryAllBooks();
}

运行测试 it’s OK

在这里插入图片描述

总结

前面花了大量篇幅讲解xml的分层,后面篇幅花的比较少之前讲过的内容都是,主要是讲解xml分三层,spring-mvc,spring-tx,spring-tx。各自负责的职责,每个功能做什么。以及需要注册的类的方法,需要牢记熟背对后面的源码理解有功不可没的功能。

代码

https://pan.baidu.com/s/1SV0rbN0pDlzlTJw2PrqqXg
b4om

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值