一。 ssm整合步骤
Mybatis层:
一: mybatis-config.xml (sqlMapConfig.xml)
1. 配置要扫描的pojo层 为他们起别名
<typeAliases>
<!--单个别名的定义-->
<typeAlias type="com.jay.pojo.Books" alias="books"/>
<!--批量别名的定义 自动扫描整个包下的类 别名为类名字(首字母大写或小写都可以)(推荐)-->
<package name="com.jay.domain"/>
</typeAliases>
2.告知mybatis映射配置的具体位置 相当于写impl
<mappers>
<!--<mapper resource="com/jay/dao/BookDao.xml"/>-->
<!--<mapper class="com.jay.dao.BooksDao"/>--> <!--也不行 因为使用注解会和xml冲突 所以必须删掉UserDao.xml-->
<!--或者直接一键注册所有dao(推荐)-->
<package name="com.jay.dao"/>
</mappers>
二。具体实现 Booksdao.xml等类似实现类的xml文件
1.
<mapper namespace="com.jay.dao.UserDao">
<resultMap id="userMap" type="com.jay.domain.User">
<!--配置主键 主键是id property是pojoc对象的字段的名字 column是数据库的字段的名字-->
<id property="uid" column="uid"/>
<result property="uname" column="uname"/>
<result property="pwd" column="pwd"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<result property="birth" column="birth"/>
<!-- collection 是用于建立一对多中集合属性的对应关系
ofType 用于指定集合元素的数据类型
-->
<collection property="roles" ofType="com.jay.domain.Role">
<id column="rid" property="roleId"/>
<result column="role_name" property="roleName"/>
<result column="role_desc" property="roleDesc"/>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
<!-- select * from t_user;-->
<!--用户到角色的多对多 包含角色信息 -->
SELECT u.* , r.* FROM t_user u
LEFT JOIN user_role ur ON u.`uid` = ur.`UID`
LEFT JOIN role r ON ur.`RID` = r.`rid`;
</select>
。。。
。。。
这样的
Spring层:
一.spring-dao.xml:(spring整合dao)
1.关联数据库配置文件
eg:<context:property-placeholder location="classpath:database.properties"/>
2.配置连接池
2.1 配置连接池属性(driverClass jdbcUrl user password 等)
2.2 私有属性 maxPoolSize minPoolSize等
3.配置sqlsessionFactory对象
3.1 注入数据库连接池 <property name="dataSource" ref="dataSource"/>
3.2 配置MyBaties全局配置文件:mybatis-config.xml(相当于spring 和 mybatis相关联)
<!--注意这里的configLocation是value 不是ref-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
3.3(注):配置SqlSessionFactory对象时,
SqlSessionFactoryBean是生产SqlSessionFactory的一种工厂Bean;
SqlSessionFactory是一种生产SqlSession的工厂;
SqlSession是代表数据库连接客户端和数据库Server之间的会话信息;
SqlSessionTemplate是SqlSession的一个具体实现。如下图3.3:
4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 <!--解释可参考: https://www.cnblogs.com/jpfss/p/7799806.html-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
4.1 注入sqlSessionFactory
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
4.2 给出需要扫描Dao接口包
<property name="basePackage" value="com.jay.dao"/>
图3.3
一.4解释参考
二. spring-service.xml(spring整合service 原来一部分内容是写在bean.xml)
1 扫描service相关的bean
<context:component-scan base-package="com.jay.service"/>
2. IOC容器配置
<!--如将 BookServiceImpl注入到IOC容器中-->
<bean id="BookServiceImpl" class="com.jay.service.impl.BookServiceImpl">
<property name="bookMapper" ref="bookMapper"/>
</bean>
3. 配置事务管理器
3.1 利用aop配置事务管理器
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
</bean>
3.2 <!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--配置事务的属性-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="false"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
3.3 <!--配置aop-->
<aop:config>
<!--配置切入点表达式-->
<aop:pointcut id="ptserviceImplAllMethod" expression="execution(* com.jay.service.impl.*.*(..))"/>
<!--建立事务控制和切入点的关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="ptserviceImplAllMethod"/>
</aop:config>
SpringMVC层:
1.web.xml:
里面配置:DispatcherServlet,,encodingFilter以及 Session过期时间
2.spring-mvc.xml: (spring整合springmvc )
2.1 开启SpringMVC注解驱动
<mvc:annotation-driven />
2.2 静态资源默认servlet配置
<mvc:default-servlet-handler/>
2.3 配置jsp 显示ViewResolver视图解析器 (如果是前后端分离项目就不必配置)
2.4<!-- 4.扫描web相关的controller -->
<context:component-scan base-package="com.jay.controller" />
最后:
在applicationContext.xml ( bean.xml)里 整合三个xml文件(spring-dao,spring-service,spring-mvc)
配置文件,暂时结束!接下来就是Controller 和 视图层编写
二。学习ssm整合时遇到的问题
1.还未掌握利用ajax将本页与后端交互后得到的信息转发或重定向来 携带到另外一个页面(表单请求可以?? )
2.点击的时候有弹窗但是没能用ajax加载到tab标签里
有这么个前端错误
Uncaught TypeError: Cannot read property ‘length’ of undefined
‘
经过调试 发现是在前端在ajax请求返回data时 利用js拼接的时候 循环控制出错
思考发现是因为 后端返回来的json数据格式是数组类型的 于是应该控制变量时按照 data.length来控制循环终止的条件
成功页面应该是前端拼接字符串出来 显示在div里的
参考资料 https://blog.kuangstudy.com/index.php/archives/487/