SpringMVC+Mybatis+Maven的简单学习

来源:互联网 发布:淘宝无线首页模板 编辑:程序博客网 时间:2024/06/05 13:29

对SpringMVC+Mybatis+Maven的简单理解和其它

这是我的第一篇博客,由于最近刚开始实习接触了第一个公司的项目主要是用SpringMVC+Mybatis的框架,然后也是完成了需要开发的内容,所以想写一篇文章来记录自己学习的内容,可能会有很些理解上的偏差,希望能在以后的慢慢学习中逐步提高。(第一次用markdown编辑器,排版不好勉强看看吧......):
  • springMVC
  • mybatis
  • maven
  • 其他

SpringMVC

 刚开始听到springmvc的时候,我以为是mvc设计模式加spring框架,因为之前在学校接触过的mvc设计模式(model,controller,view)其实就是把需要的文件进行分类放到不同的文件夹中,便于查看和管理,并没有太多的技术含量,而spring框架主要内容是ioc(控制反转和依赖注入)和aop(好像是什么切面编程,具体叫什么忘了)。
 但是其实springmvc和上面我所知道的有很大的不同(也有可能是我学的不够深入):配置文件,controller层,各种注解,路径的跳转等等。
 
 首先介绍一下springmvc的配置文件,配置文件中首先是要配置扫描的包
<context:component-scan base-package="com.djs.controller" />
 上面这个配置是告诉编译器到哪里去读取controller层,上面的代码就是说到package中扫描所有有@controller注解的类,通过这个配置,每次Tomcat启动时都会将扫描后的controller类记录,然后每当有跳转,若路径符合,则会跳转到相应的controller类以及里面的方法进行处理,controller类如何编写我将在下面进行说明。
  springmvc还可以配置对view层,也就是前端jsp,html等文件的跳转,主要是配置前缀和后缀,省去一些代码上的繁琐
  <!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

具体功能注解上已经有说明就不再叙述。
其实springmvc配置文件中还可以配置其他的东西,比如页面拦截,文件资源访问等,但是这些并不是配置所必需的,我也不甚了解,就不再赘述。
  有人可能会说,配置文件中不需要配置数据库吗?由于我们使用mybatis管理数据库,所以数据库相关的使用在mybatis中叙述。

  接下来我们来讲一下controller层,其实controller主要的功能应当是和我们以前学习的servlet,struts这些是差不多的,都是对页面跳转后的后台处理,但是controller因当是使用起来更加的方便了。
  首先一个controller类的编写,最首要的是注解@controller,这在上面也提到过,有了@controller注解才能让配置文件扫描到你。第二个注解是@RequestMapping(“name”),这个注解主要是用于前端跳转时要写的路径,在类前和方法前都要写,比如类前的注解为@RequestMapping(“/test”),方法前的注解为@RequestMapping(“/function”),那么前端表单或者ajax或者a标签访问的方法的路径就为“/test/function”。但其实网上也有说类名上的注解可以不用写,可以直接访问方法上的路径,这个我还没有试过,不过我觉得在大型项目里面,有很多的controller层,每个controller层中有许多方法,最好是在类名上注解大范围的名称,方法名上注解具体名称,这样使用起来会更加的方便。
  controller中需要使用的注解还有@Autowired和@Resource,两个注解的功能差不多,都是用于bean的自动注入,也就是取代了setter方法,但是内部如何实现注入是不同的,具体的我还没有了解过。
  controller类的最大功能是让前端,后端之间的跳转更加的方便,数据的获取更加快捷。在servlet中,我们如果要获取前端传递的数据,需要使用request.getParameter()方法,通过name来获取内容,而在controller方法中,如果我们需要获取任何一个数据,直接在方法的括号中传递参数,参数的名称和类型只要和传递的数据相同,又或者用@RequestParam注解绑定不同名的数据,就可以将数据传递。而如果表单中传递的是一个bean中的值,在参数中直接定义一个bean,也会自动将所有数据注入到这个bean中。还可以使用@PathVariable(“value”),将写在路径后面的值传递给绑定的参数。而controller把值传递回前端主要是用model来实现,神奇的是只需要把值用addAttribute(key, value)方法放到model中,再return要跳转的页面,跳转回去的前端页面就可以直接取key值来显示,而不需要像servlet一样还要用response的方法进行复杂的跳转操作。需要注意的是使用ajax进行数据传输时,需要在使用的方法上加@ResponseBody注解,我的理解是@ResponseBody注解是用于将返回的数据直接写入HTTP的body中返回,而ajax是异步刷新,即不需要刷新整个页面就可以更新数据,@ResponseBody刚好实现了这一点。下面是一个简单的controller方法的代码,仅供参考(实在还不会贴代码,凑合这看吧):
  @Controller
  @RequestMapping(“/test”)
  public class UserController {
   public UserController() {
 System.out.println(“UserController”);
}

  @Resource
  private IUserService userService;
  @RequestMapping( value =”/showUser”, method = {RequestMethod.POST})
   public String toIndex(HttpServletRequest request,Model model,integer id) {
      try {
         User user = userService.getUserById(id);
          if(user!=null) {
         model.addAttribute(“user”, user);
         return “ShowUser”;
        }
     else
        {
       message = “输入有误”;
       model.addAttribute(“message”,message);
      }
      } catch (NumberFormatException e) {
      e.printStackTrace();
       }
     message=”输入有误”;
     model.addAttribute(“message”,message);
      return “ShowUser”;
  }

Mybatis

  接下来是mybatis的学习,mybatis主要是对数据库的操作,它取代了许多JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO类映射成数据库中的记录,主要涉及到springmybatis配置文件,mapper映射文件,Bean pojo文件,Dao文件。
  首先是springmybatis配置文件,在mybatis配置文件首先是对数据库的链接配置,
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>

主要的配置如上,其实这个和以前hibernate中的配置差不多
  其次是对mapper映射文件的扫描,对service层注解的扫描和对dao层的查找配置

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/djs/mapping/*Mapper.xml"></property>
</bean>

对service层扫描
<context:component-scan base-package="com.djs.service" />

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

接下来是mapper文件,mapper文件是具体的增删改查代码,首先要在文件中最开头的mapper namespace=“?”的问号中写对数据库操作的Dao类的具体位置,比如我要操作数据库的Dao类名为UserDao,包名为com.djs.dao,那么?中写com.djs.dao.UserDao就可以了,在mapper文件中这样写了后,Dao只需要写一个和mapper中对应id的函数名,不需要实现,在调用时就可以实现具体的操作。而mapper文件中的select,insert等操作其实和数据库语句相差不大,下面是一个查询语句
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from user_t
where id = #{id,jdbcType=INTEGER}
</select>

上面的id是唯一的操作标识,resultmap是返回参数类型,parameterType是传入参数类型,传入和传出有type和map两种,前者是java的基本数据类型,后者是其他数据类型,这个不做具体分析。
 
 Dao文件是写作接口来实现数据库的操作,因为在mapper中已经定义了那个dao用于映射,所以就不需要dao中编写具体的方法。User selectByPrimaryKey(Integer id);只需要传入的参数类型和返回的类型与mapper中配置的相同即可。注意,Dao中的方法名必须和mapper中对应的id相同
 
 上面的配置看起来很多,也很容易因为一些小的细节没有写好导致配置错误,值得庆幸的是,使用mybatis-generator工具可以帮我们自动生成上面mybatis的mapper,bean,dao这三个文件。只需要下载一个mybatis-generator的jar包,相应数据库的链接驱动jar,在xml文件中书写正确的链接语句,然后在命令行中输入生成文件的语句,即可在指定位置产生上述三个文件。具体操作可以百度mybatis-generator的相关操作。(eclipse可以嵌入generator的插件,在eclipse里面可以直接生成,但是idea我还是刚刚入手,不知道如何在idea中使用。)
 

Maven

  maven主要是用于各种jar文件的导入。在我们的工程中,需要导入大量的jar包,每次都需要自己去网上查找相应的包,然后导入,这里面难免会有版本的冲突,重复导入,最后导致服务器启动失败,而我们又不知道是为什么。我依稀记得当初用ssh框架写网页的时候,老师给的jar包是冲突的,然后弄了半天服务器起不来我都不知道是为什么。
  使用maven就比较简单了,只需要在pom.xml文件中写入你需要的版本,jar名称,jar版本号,jar组织标识符(groupId)和jar唯一标识符(artifactId),具体要导入哪些可以到网上百度,一般spring啊,mybatis啊,jdbc啊这些都可以在网上找到的。注意:eclipse使用maven后是会自动下载的,需要等待下载后再进行相应的编译,而idea需要在右上方一个弹框处点击update才会自动下载
  之前有个同学问我你们用maven只是用来导入jar包的嘛,那也太简单了吧。然后我去网上查了查,发现maven还有对项目进行打包,测试,发布等作用,不过具体使用还有待学习。

其他

  做公司的项目不仅仅使用了上述的框架,还要学前端的知识,ajax,jquery,vue等,项目管理工具SVN。总而言之一句话,学到老,活到老。