SSM三大框架整合

SSM:SpringMVC+Spring+MyBatis

1. SSM整合思想

原理:java经典三层架构
整合的关键所在:利用MyBatis-Spring项目(mybatis-spring-1.3.0.jar)使得Spring与Mybatis的整合

2. Spring与Mybatis的如何整合?

1、导入spring库、mybatis-spring-1.3.0.jar(MyBatis-Spring项目)、mybatis-3.4.1.jar
2、配置beans.xml
a、数据源
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123
beans.xml
<context:property-placeholder location="classpath:jdbc.properties"/>
<context:component-scan base-package="com.gec.service"  />
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    destroy-method="close" p:driverClassName="${jdbc.driver}" 
    p:url="${jdbc.url}" p:username="${jdbc.username}" 
    p:password="${jdbc.password}" />
b、 将SqlSessionFactroy工厂对象注入到Spring容器所管理 
<!-- 将SqlSessionFactroy工厂对象注入到Spring容器所管理 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 注入数据库连接池 -->
	<property name="dataSource" ref="dataSource" />
	<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
	<property name="configLocation" value="classpath:mybatis-config.xml" />
	<!-- 扫描sql配置文件:mapper需要的xml文件 -->
	<property name="mapperLocations" value="classpath:com/gec/mapper/*.xml" />
</bean>
c、Mapper文件所对应的接口对象配置成bean管理
<!-- Mapper文件所对应的接口对象配置成bean管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 注入sqlSessionFactory -->
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	<!-- 给出需要扫描Dao接口包 -->
	<property name="basePackage" value="com.gec.dao" />
        <property name="annotationClass" value="org.springframework.stereotype.Repository"/>
</bean>

3、利用逆向工具生成pojo、mapper映射xml和接口,注意:需要在类前面加上@Repository注解

UserMapper.java

@Repository
public interface UserMapper {
    	int deleteByPrimaryKey(Integer id);
    	int insert(User record);
    	int insertSelective(User record);
    	User selectByPrimaryKey(Integer id);
    	int updateByPrimaryKeySelective(User record);
    	int updateByPrimaryKey(User record);
}

4、编写一个业务bean,注意:需要在beans.xml扫描并在类前面加@ Service注解,依赖项userMapper前面加@Autowired自动配置bean的注解

UserService .java

@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
		
	public int  insertUser(User user) {
	    return userMapper.insert(user);
	}
}

4、测试用例

MainTest.java

public class MainTest {
	public static void main(String[] args) 
	{
		//获取spring的IOC容器
		ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
		UserService userService=(UserService) ctx.getBean("userService");
		User user=new User();
		user.setName("张学友");
		user.setAge(56);
		user.setSex("男");
		userService.insertUser(user);
	}
}

3. 如何spring整合mybatis基础上加事务管理

1、在beans.xml文件 配置spring事务管理器
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" />
<!--启动注解实现事务管理-->
<tx:annotation-driven transaction-manager="transactionManager" />
2、在方法添加@Transactional注解
@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	
	@Transactional
	public int  insertUser(User user) {
		return userMapper.insert(user);
	}
}

4. 整合Spring+mybatis+springmvc框架

 1、在web.xml文件

图解如下:

 

(1)ContextLoaderListener:上下文监听器,会生成上下文的root WebApplication(父IOC容器)

a、配置业务层的bean
b、数据源
c、事务管理
d、dao层的bean、与mybatis整合
(2)DispatcherServlet:前端控制器
    根据springmvc-config.xml生成WebApplication(子ioc容器)
a、配置表现层的bean
b、springmvc相关的核心组件
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>day0110_ssm</display-name>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- contextConfigLocation参数用来指定Spring的配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/spring-service.xml,classpath:spring/spring-dao.xml</param-value>
	</context-param>
	
	<!-- 定义Spring MVC的前端控制器 -->
  	<servlet>
    	<servlet-name>springmvc</servlet-name>
    	<servlet-class>
            org.springframework.web.servlet.DispatcherServlet
    	</servlet-class>
    	<init-param>
      		<param-name>contextConfigLocation</param-name>
      		<param-value>classpath:spring/springmvc-config.xml</param-value>
    	</init-param>
    	<load-on-startup>1</load-on-startup>
  	</servlet>
  	<!-- 让Spring MVC的前端控制器拦截所有请求 -->
  	<servlet-mapping>
    	<servlet-name>springmvc</servlet-name>
    	<url-pattern>/</url-pattern>
  	</servlet-mapping>
</web-app>
2、在springmvc-config.xml文件配置与springmvc核心组件相关的信息
springmvc-config.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:p="http://www.springframework.org/schema/p"
	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.3.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.3.xsd">
	
	<context:component-scan base-package="com.gec.controller"/>
	<mvc:annotation-driven />
	<mvc:default-servlet-handler />
	
	<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>
</beans>
3、在spring-service.xml文件配置数据源、业务层的bean、事务管理
spring-service.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:p="http://www.springframework.org/schema/p"
	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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

	<context:property-placeholder location="classpath:jdbc.properties" />
	<context:component-scan base-package="com.gec.service"  />

	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"                                             p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}"		                                                                  p:username="${jdbc.username}" p:password="${jdbc.password}" />
		
	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
		p:dataSource-ref="dataSource" 
	/>
	
	<!--启动注解实现事务管理-->
	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
4、在spring-dao.xml文件 整合mybatis框架
spring-dao.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 将SqlSessionFactroy工厂对象注入到Spring容器所管理 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 注入数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
		<property name="configLocation" value="classpath:mybatis-config.xml" />
		<!-- 扫描sql配置文件:mapper需要的xml文件 -->
		<property name="mapperLocations" value="classpath:com/gec/mapper/*.xml" />
	</bean>
	
	<!-- Mapper文件所对应的接口对象配置成bean管理-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 注入sqlSessionFactory -->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
		<!-- 给出需要扫描Dao接口包 -->
		<property name="basePackage" value="com.gec.dao" />
		<property name="annotationClass" value="org.springframework.stereotype.Repository"/>
	</bean>
</beans>

5. SSM加入分页

分页作用:实现按区域查询数据
分页的主要参数:
1、当前页: pageindex
2、每页显示记录数: pageSize
3、总记录条数: totalRecordSum(通过count的sql语句获取)
4、总页数: totalPageNum=(totalRecordSum+pageSize-1)/pageSize
5、开始位置: sqlstartLimitPos =(pageIndex-1)*pageSize
PageModel.java
public class PageModel {
	private int pageIndex;
	private int pageSize=5;
	private int totalRecordSum;
	private int totalPageNum;
	
	public int getPageIndex() {
		this.pageIndex=this.pageIndex<=1?1:this.pageIndex;
		this.pageIndex=this.pageIndex>=getTotalPageNum()?getTotalPageNum():this.pageIndex;
		return pageIndex;
	}
	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getTotalRecordSum() {
		return totalRecordSum;
	}
	public void setTotalRecordSum(int totalRecordSum) {
		this.totalRecordSum = totalRecordSum;
	}
	public int getTotalPageNum() {
		if(getTotalRecordSum()==0) {
			return 0;
		}
		this.totalPageNum = this.totalRecordSum%this.pageSize==0?this.totalRecordSum/this.pageSize:                                                            (this.totalRecordSum/this.pageSize)+1;
		return totalPageNum;
	}
	public int getStartLimitPos() {
		return (getPageIndex()-1)*getPageSize();
	}
}
编写查询总记录sql定制方法
<select id="queryBookInfoCount" resultType="int">
  	select  count(*) from tb_book
  	<where>
  		<if test="bookName!=null and bookName!=''">
  			and book_name like concat(#{bookName},'%')
  		</if>
  		<if test="bookAuthor!=null and bookAuthor!=''">
  			and book_author like concat(#{bookAuthor},'%');
  		</if>  			
  		<if test="fromBookDate!=null">
  			<![CDATA[ and book_date>=#{fromBookDate}]]>
  		</if>  			
  		<if test="toBookDate!=null">
  			<![CDATA[ and book_date<=#{toBookDate}]]>
  		</if>  			
  		<if test="fromPrice!=null">
  			<![CDATA[ and book_price>=#{fromPrice}]]>
  		</if>  			
  		<if test="toPrice!=null">
  			<![CDATA[ and book_price<=#{toPrice}]]>
  		</if>
  	</where>  		
  </select>
针对mysql的数据库的区域查询
select * from  tb_book where xxxx limit 开始位置,记录条数
<select id="queryBookInfoList" resultMap="BaseResultMap">
        select  * from tb_book
  	<where>
  		<if test="bookName!=null and bookName!=''">
  			and book_name like concat(#{bookName},'%')
  		</if>
  		<if test="bookAuthor!=null and bookAuthor!=''">
  			and book_author like concat(#{bookAuthor},'%');
  		</if>
  		<if test="fromBookDate!=null">
  			<![CDATA[ and book_date>=#{fromBookDate}]]>
  		</if>
  		 <if test="toBookDate!=null">
  			<![CDATA[ and book_date<=#{toBookDate}]]>
  		</if>
  		<if test="fromPrice!=null">
  			<![CDATA[ and book_price>=#{fromPrice}]]>
  		</if> 
  		<if test="toPrice!=null">
  			<![CDATA[ and book_price<=#{toPrice}]]>
  		</if>
  	</where>
  	limit #{startLimitPos},#{pageSize}
  </select>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值