框架学习——SpringMvc+Spring+Mybatis集成

来源:互联网 发布:外国人来中国后被淘宝 编辑:程序博客网 时间:2024/06/10 06:13

复习了下之前框架方面的知识,这次独立自己查看文档,搜百度将SpringMVC+Spring+Mybatis集成了。

这次集成版本是建Dynamic web Project,然后手动添加jar文件,配置文件而成。后面再出一个maven版本,废话不多说,我就开始写过程了。

首先三大框架基本概念:

一、SpringMvc

这里介绍SpringMVC我就不教课书似的介绍了,SpringMVC简单来说就是基于MVC模式,作为Spring家族的一个延续产品。除了SpringMVC,我们知道有Struts1,Struts2等框架。SpringMVC作为Spring 家族中的一员,其灵活性、扩展性更好。其核心为DispatcherServlet,本质上是基于HttpServlet实现的框架。

深入学习博客:http://www.cnblogs.com/baiduligang/p/4247164.html

二、Spring

springJ2EE应用程序框架,是轻量级的IoCAOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器。

其核心是IoC(Inversion of Control)控制反转,对象创建责任的反转,在springBeanFacotoryIoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。

还有向切面编程(AOP),项目中权限控制,字符过滤,日志管理等都会用到面向切面编程。

深入学习博客:http://blog.csdn.net/liujiahan629629/article/details/20735407

三、MyBatis

MyBatis和Hibernate一样,是一个优秀的持久层框架。已经说过很多次了,原生的jdbc操作存在大量的重复性代码(如注册驱动,创建连接,创建statement,结果集检测等)。框架的作用就是把这些繁琐的代码封装,这样可以让程序员专注于sql语句本身。

MyBatis通过XML或者注解的方式将要执行的sql语句配置起来,并通过java对象和sql语句映射成最终执行的sql语句。最终由MyBatis框架执行sql,并将结果映射成java对象并返回。

这段直接引用博客:http://blog.csdn.net/qq_32166627/article/details/70741729

四、SpringMvc+Spring+Mybatis集成案例

1.环境准备

  • Jdk环境:jdk1.6.0_31
  • Ide环境:eclipse indigo
  • 数据库环境:MySQL 5.7.1
  • SpringMVC:3.2.0
  • Spring:3.2.0
  • Mybatis:3.2.1

2.项目工程介绍



3.jar包引入

mybatis:

   mybatis-3.2.1.jar

   mybatis-spring-1.2.0.jar

Spring:

  spring-core-3.2.0.RELEASE.jar

  spring-beans-3.2.0.RELEASE.jar

  spring-aop-3.2.0.RELEASE.jar

  spring-expression-3.2.0.RELEASE.jar

  spring-context-3.2.0.RELEASE.jar

  spring-aspects-3.2.0.RELEASE.jar

  spring-jdbc-3.2.0.RELEASE.jar

  spring-orm-3.2.0.RELEASE.jar

  spring-test-3.2.0.RELEASE.jar

  spring-tx-3.2.0.RELEASE.jar

  spring-web-3.2.0.RELEASE.jar

SpringMVC:

    spring-webmvc-3.2.0.RELEASE.jar

数据库连接(MYSQL):

   mysql-connector-java-5.1.24-bin.jar

连接池:

    com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar

    com.springsource.org.apache.commons.pool-1.5.3.jar

日志:

    slf4j-api-1.7.2.jar

   slf4j-log4j12-1.7.2.jar

    com.springsource.org.apache.commons.logging-1.1.1.jar

    commons-logging-1.1.1.jar

    log4j-1.2.17.jar

测试:

    junit-4.11.jar

其他:

     asm-3.3.1.jar

     cglib-2.2.2.jar

     com.springsource.org.aopalliance-1.0.0.jar

     com.springsource.org.apache.commons.fileupload-1.2.0.jar

     com.springsource.org.apache.commons.io-1.4.0.jar

     com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

     hamcrest-all-1.3.jar

     javassist-3.17.1-GA.jar

对这些包进行了简单的分类,可以简单将其分为SpringMvc,Spring,Mybatis,数据库连接,日志(基于slf4j),测试还有一些其它关联包。

4.配置文件说明

4.1 db.properties(数据库连接配置文件)

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql:///ssm

jdbc.username=root

jdbc.password=*****

这里就不多说了,与applicationContext.xml中引入datasource需传值的一样,详情看4.2章节  

4.2 applicationContext.xml

applicationContext.xml 作为集成Spring必不可少的配置文件,我们来对其进行说明。

配置这个文件,我们的一个大致思路应是从db.properties-->dataSource-->Mybaities-->SqlsessionFactoryBean-->Mapper-->Controller

   <!-- 引入数据库连接配置文件-->

<context:property-placeholder location="classpath:db.properties" />
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    <!-- SqlSessionFactoryBean通过getObject获取SqlSessionFactory的实例 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置MyBatis的映射文件 -->
        <property name="mapperLocations" value="classpath*:/com/qzq/mybatis/mapper/*.xml" />
        <!-- 配置别名的包路径 -->
        <property name="typeAliasesPackage" value="com.qzq.mybatis.activemq.model" />
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- private String basePackage; Mapper接口的包路径 -->
        <property name="basePackage" value="com.qzq.mybatis.activemq.mapper" />
    </bean>

    <!-- 1.事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 不是注入sqlSessionFactory,而是注入dataSource -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <!-- 2.aop切入点 -->
    <aop:config>
      <aop:advisor advice-ref="adviceId" pointcut="execution(* com.qzq.mybatis.activemq.service.I*Service.*(..))"/>
    </aop:config>
    
    <!-- 3.事务通知 -->
    <tx:advice id="adviceId" transaction-manager="transactionManager">
      <tx:attributes>
        <tx:method name="get*" read-only="true" propagation="SUPPORTS"/>
        <tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
        <tx:method name="*"/>
      </tx:attributes>
    </tx:advice>
    
    <!-- 注解的组件扫描 -->
    <context:component-scan base-package="com.qzq.mybatis.activemq" />
    <!-- 开启对spring注解的支持 ,低版本兼容 -->
    <context:annotation-config />
    <!-- 必须引入spring mvc的配置文件 -->
    <import resource="classpath:applicationContext-mvc.xml" />

4.2 applicationContext-mvc.xml

applicationContext-mvc.XML是作为连接SpringMVC配置的,需要引入到applicationContext.xml中。

    <!-- 静态资源访问 -->
    <mvc:default-servlet-handler />
    <!-- SpringMVC开启注解支持 -->
    <mvc:annotation-driven />
    <!-- 配置一个视图解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--返回路径-->
        <property name="prefix" value="/WEB-INF/views/" />
        <!-- private String suffix = ""; 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
    <!-- 必须配置上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为1MB -->
        <property name="maxUploadSize">
            <value>1048576</value>
        </property>
    </bean>



4.4 log4j.properties(日志管理配置文件)

log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
log4j.logger.cn.itsource=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%dkm%p [%c] - %m%n


4.5 Mapper文件简单说明

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qzq.mybatis.activemq.mapper.UserMapper">(nameSpace为对应Mapper)
    <select id="get" parameterType="long" resultType="com.qzq.mybatis.activemq.model.User">
            select * from t_User where id = #{id}
    </select>
</mapper>

5.代码实现

5.1 建表+javabean(模型建立)

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `height` double DEFAULT NULL,
  `weight` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;



这里的javabean需提供get,set方法。

5.2Mapper映射实现

回顾4.2章节 我们配置了

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- private String basePackage; Mapper接口的包路径 -->
        <property name="basePackage" value="com.qzq.mybatis.activemq.mapper" />
    </bean>

则在对应包路径下,我们对mapper进行映射接口实现


这里做一个简单说明:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置MyBatis的映射文件 -->
        <property name="mapperLocations" value="classpath*:/com/qzq/mybatis/mapper/*.xml" />
        <!-- 配置别名的包路径 -->
        <property name="typeAliasesPackage" value="com.qzq.mybatis.activemq.model" />
    </bean>

在4.2章节中,我们向sqlsessionfactorybean中注入了datasource,并配置了Mybatis的映射文件。Mybatis会连接通过datasource与Xml有对象关系映射(ORM),然后通过我们配置的这个Mapper包路径对外提供Mapper文件对应操作接口。即UserMapper.xml中的操作与我们UserMapper.java对应,UserMapper.java中的get方法与xml中ID=‘get’的sql对应。

5.3 service实现

@Service
public class UserService implements IuserService{

    @Autowired
    UserMapper UserMapper;
    
    @Override
    public List<User> get(String id) {
        return UserMapper.get(id);
    }

}

5.4Contoller实现

@Controller
@RequestMapping("user")
public class UserContorller {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @Autowired
    public IuserService userService;
    
    
    private String id;
    
    @RequestMapping("list")
    public String list(Model model){
        model.addAttribute("depts", userService.get("1"));
        return "/user/list";
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    
}

6 最终实现效果+总结

我们可以通过访问服务器拿到数据。

SSM框架作为当下互联网比较流行的架构,有着众多的好处,SpringMVC安全性高,我是亲历去年Struts2漏洞爆发对公司产品的影响,大面积的病毒爆发,数据迁移,重新升级Struts2.当然这只是一个缩影,就工作上的体验而言,框架本身其实并不难,我们开发配置起来,跑起来,主要还是实现业务。难得是深入学习框架的思想,比较框架之间的差别,在做项目时合理的选择,基于控制成本,可维护,性能等综合的考虑,这需要我们深入了解每一款框架的原理和适用场景,这也是我们需要深入学习的。


7.资源分享

看大家对框架的集成还是很感兴趣,这里将自己的代码作为一个分享。希望大家用到:

http://download.csdn.net/download/qq_29178991/9972147

阅读全文
1 0
原创粉丝点击