在日常开发中,如果启动项目后,再次修改Mapper XML文件,必须重启服务才能生效,这样就大大影响了我们的开发效率。在近期接触到的项目里面,有个这个功能,趁着假期,查了些资料,将里面的用法拿出来,记录一下:
具体的源码还没来得及研究,水平有限,也看不懂源码。。。。。。。。。。
实际就是重写了mybatis的加载xml文件的方法,这个类SqlSessionFactoryBean
被修改了,项目需要用修改后的这个文件,具体内容在源码里,怎么使用在文章的最后,前面是搭建maven项目的简单步骤。
项目源码地址:https://github.com/linmengmeng-1314/testgit/tree/master/maven-demo1230
这里重建一个完整的maven-demo,顺便记录一下maven搭建web项目,我用idea和eclipse都是可以正常搭建maven项目的,但是公司用的都是myeclipse,刚开始我用myeclipse搭建maven项目时总是跑不起来,我也是服气,在折腾了好几天之后,总算弄好了,到现在我都不知道之前是哪里的原因。
首先是新建一个maven项目:
这里不勾选跳过骨架 快速创建:
下一步中关于groupid和artifactId这两个参数的说明:
groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。
初步创建完成之后,项目结构目录为:
这里可以看到pom.xml文件报错了,打开可以看到错误提示:
提示Web Project Version丢失,手动添加即可,将鼠标放在project上,即可出现下图弹窗(如果不显示点击一下第一行前面的红色的叉号),然后点击提示的3.0或者3.1即可自动添加Web Project Version
添加之后project上面的错误就消失了:
这时候可以看到项目的jre版本还是1.5,我们来将其改为1.7,在pom文件的build标签下的plugins标签里面添加:
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.5.1version>
<configuration>
<source>1.7source>
<target>1.7target>
<encoding>utf-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<uriEncoding>UTF-8uriEncoding>
<path>/maven-1224path>
<port>8088port>
configuration>
plugin>
顺带指定maven内置的tomcat版本为tomcat7,端口改为8088,然后右键项目名–>Maven4Myeclipse–>Update Project,直接点击OK,即可看到项目的编译版本变成1.7了,也不报错了:
到这里一个简单的、完整的、maven空壳项目就算完成了。
下面是Springmvc整合Mybatis的各种依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.lin.demogroupId>
<artifactId>maven-demo1230artifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>warpackaging>
<properties>
<srping.version>4.0.2.RELEASEsrping.version>
<mybatis.version>3.2.8mybatis.version>
<slf4j.version>1.7.12slf4j.version>
<log4j.version>1.2.17log4j.version>
<commons-lang3.version>3.3.2commons-lang3.version>
<commons-io.version>2.4commons-io.version>
<commons-codec.version>1.9commons-codec.version>
<commons-fileupload.version>1.3.1commons-fileupload.version>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>javaxgroupId>
<artifactId>javaee-apiartifactId>
<version>7.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-oxmartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>${srping.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>${mybatis.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.2.2version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.35version>
dependency>
<dependency>
<groupId>commons-dbcpgroupId>
<artifactId>commons-dbcpartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.10version>
dependency>
<dependency>
<groupId>jstlgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>${log4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.6version>
dependency>
<dependency>
<groupId>org.codehaus.jacksongroupId>
<artifactId>jackson-mapper-aslartifactId>
<version>1.9.13version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>${commons-io.version}version>
dependency>
<dependency>
<groupId>commons-codecgroupId>
<artifactId>commons-codecartifactId>
<version>${commons-codec.version}version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>${commons-fileupload.version}version>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>${commons-lang3.version}version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.5.1version>
<configuration>
<source>1.7source>
<target>1.7target>
<encoding>utf-8encoding>
configuration>
plugin>
<plugin>
<artifactId>maven-war-pluginartifactId>
<configuration>
<version>3.0version>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<uriEncoding>UTF-8uriEncoding>
<path>/maven-demo1230path>
<port>8088port>
configuration>
plugin>
plugins>
build>
project>
项目源码地址:https://github.com/linmengmeng-1314/testgit/tree/master/maven-demo1230
完整的项目结构如图所示:
圈中的地方是mybatis热部署的必须的文件,需要原封不动的加到项目里面,才能在修改mapper文件之后,不用重启项目即可生效,如果需要迁移进自己的项目,直接将圈中的部分添加到项目中即可。
需要注意的地方有三点:ApplicationContext-dao.xml中的配置mapper的内容都在图中标出来了,其中需要用到commons-long3
这个jar包,记得在自己的项目中添加此依赖:
运行项目:
右键项目名:Run as–>Maven build…(后面三个点的那一项)进入下图页面,输入tomcat7:run,点击Apply,运行即可,下次重新运行时,可直接选中Run as下面的Maven build即可。
下图所示是正常启动项目,如果报错了,就需要检查一下是不是哪一步的疏忽造成的问题了,细心点来,就可以了。
然后试着在浏览器里访问:http://localhost:8088/maven-demo1230/list?id=1 查询id为1的用户信息
浏览器显示的结果为:
这时我们尝试改TbUserMapper.xml中的selectByPrimaryKey的SQL语句:
将查询的内容改为只查询id和名称
Ctrl + S 保存之后,即可看到控制台输出刷新当前修改的文件名,这时不用重启项目,就可以是刚才更改的内容生效了,是不是很方便呢~