SSM框架学习记录6——与git上18年的SSM框架区别

    技术2022-07-11  145

    源码下载: 学习总结的SSM框架 18年git上收藏最多的SSM框架

    第一次学习的SMM和git上18年的SSM框架的区别


    Mybatis配置部分

    0.Mybatis的全局配置

    <!-- 配置全局属性 --> <settings> <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 --> <setting name="useGeneratedKeys" value="true" /> <!-- 使用列别名替换列名 默认:true --> <setting name="useColumnLabel" value="true" /> <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} --> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings>

    1.连接数据库-jdbc.properties

    driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test username=root password=

    1.1. 引入配置文件

    <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:properties/jdbc.properties"/> </bean>

    2.通过jdbc配置数据源dataSource,此处使用c3p0作为连接池

    <!-- 2.数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置连接池属性 --> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- c3p0连接池的私有属性 --> <property name="maxPoolSize" value="30" /> <property name="minPoolSize" value="10" /> <!-- 关闭连接后不自动commit --> <property name="autoCommitOnClose" value="false" /> <!-- 获取连接超时时间 --> <property name="checkoutTimeout" value="10000" /> <!-- 当获取连接失败重试次数 --> <property name="acquireRetryAttempts" value="2" /> </bean>

    3.配置事务管理transactionManager

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

    3.1 配置基于注解的声明式事务

    <!-- 配置基于注解的声明式事务 --> <tx:annotation-driven transaction-manager="transactionManager" />

    4.引用数据源配置sqlsessionFactory

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/> </bean>

    Spring配置部分

    配置dao接口包 <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.mayousheng.www.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>

    2.配置(扫描)service包

    <!-- 扫描service包下所有使用注解的类型 --> <context:component-scan base-package="com.soecode.lyf.service" />

    SpringMVC配置部分

    1.配置注解驱动

    <mvc:annotation-driven />

    2.配置视图解析器

    <!-- 3.配置jsp 显示ViewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>

    3.配置组件扫描

    <!-- 4.扫描web相关的bean --> <context:component-scan base-package="com.soecode.lyf.web" />

    源码部分

    1.entity,po 对象类,实体类 2.dto,pojo 实体类型的封装,方便进行复杂的业务操作 3.Mapper,或者dao 事务的最小单位,对数据库最基础的操作。 4.service 事务,通过dao对数据库进行操作 5.controller 控制器,用户通过调用controller调用service操作视图 6.exception 异常处理器,进行异常处理

    Web部分

    1.1img 用来保存图片 2.js 用来保存前端开发需要的依赖 3.jsp 用来保存jsp动态页面 4.web.xml 用来加载Spring容器和前端控制器和拦截器,乱码过滤等 前端控制器

    <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置springMVC需要加载的配置文件 spring-dao.xml,spring-service.xml,spring-web.xml Mybatis - > spring -> springmvc --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </init-param> </servlet>

    jar部分

    mybatis的jar包 Spring的核心jar包 junit单元测试包 slf4j日志jar包 mysql-connector-java数据库连接jar包 c3p0数据库连接池所需jar包

    区别

    Web部分的区别

    第一次学习SSM框架,是单独加载Spring的配置文件

    <!--加载spring容器--> <context-param> <param-name>contextConfigLocation</param-name> <!--<param-value>/WEB-INF/applicationContext.xml</param-value>--> <param-value>classpath:config/spring/applicationContex*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

    18年的SSM,是直接将所有的配置文件加载都放在了前端控制器中。 这两种方法都是可行的,是因为在单独配置Spring容器时还配置了监听器,在加载前端控制器时,同时也会加载单独配置的Spring配置文件。


    数据库部分的区别

    SSM框架1,没有将数据库表的创建代码放到项目中。 18版的,将表的创建语句单独放到项目中的sql文件夹中,方便开发者用创建数据库,这确实很方便。

    -- 创建图书表 CREATE TABLE `book` ( `book_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '图书ID', `name` varchar(100) NOT NULL COMMENT '图书名称', `number` int(11) NOT NULL COMMENT '馆藏数量', PRIMARY KEY (`book_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='图书表'; -- 初始化图书数据 INSERT INTO `book` (`book_id`, `name`, `number`) VALUES (1000, 'Java程序设计', 10), (1001, '数据结构', 10), (1002, '设计模式', 10), (1003, '编译原理', 10);

    源码部分的区别

    1.实体类: 实体类部分两框架没有多大变化 2.包装类部分: 之前学习的SSM框架只是进行多个实体间的封装,这种封装形成了更为复杂的实体,是为了满足匹配result返回结果类型, 18年的SSM框架的包装类,封装声明了实体的状态,不仅封装了实体,还封装了实体的状态,这使得这种类型的封装将能实现更复杂的业务。 3.dao或者mapper部分 18年SSM,在dao接口类的方法中,形参部分用到了注解

    @Param("name") String name

    这是之前不常用,这应该是一个要掌握的重点,主要是这种方式有两个好处, 1.对属性定义别名。 2.sql中传参时,可以传入多个参数,而不需要传入一个bean。

    4.service类 18年SSM,service的实现类中都使用了注解

    @Autowired private BookDao bookDao;

    这在spring容器初始化时,就将service的依赖注入,符合IOC的思想,应该常用。 5.controller类

    @Controller @RequestMapping("/book") // url:/模块/资源/{id}/细分 /seckill/list public class BookController { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private BookService bookService; @RequestMapping(value = "/list", method = RequestMethod.GET) private String list(Model model) {

    完全实现了基于注解的mvc开发方式,果然,基于注解的开发方式才是主流。 6.Exception 异常处理器是每个项目都要配置的,用来处理非系统性异常。 7.enums 相比于第一个SSM项目,18年的这个项目多出一个枚举型的类enums,这个类中实现了一些枚举型数据,方便项目中调用,单独创建一个枚举型字典类,这就是枚举型在项目中的用法了。

    resources部分的区别

    1.dao或者mapper的对应的xml 没有什么区别,虽然可以逆向工程生成,但是实际开发中都需要自己写。 2.Spring容器相关的配置文件 没有很大区别。 当使用了基于注解的开发,相关的包就需要配置组件扫描

    Processed: 0.018, SQL: 9