详解SpringMVC和MyBatis框架开发环境搭建和简单实用
1、下载springmvc框架架包,下载地址:
点击打开地址如图所示,点击下载即可
然后把相关的jar复制到lib下导入
2、mybatis(3.4.2)下载
mybatis中文文档地址
下载解压之后把jar复制到lib下导入,大概是这样子的
3、jdbc连接库还没有下载。。。这个是5.1.41版本的。。。
解压之后这样子。。。
4、fastjson 阿里巴巴的json解析库
版本是1.2.24 这个是托管到了github上面的,地址是:点击进入
5、创建webproject
注意下一步有个选项,如果不勾选,默认是不会生成web.xml的
6、项目创建完毕,把之前的包都弄进来。。
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>coolweb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>coolweb</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <!-- <param-value>classpath:application-context.xml</param-value> --> <param-value>classpath:coolweb-servlet.xml</param-value> </init-param><!-- classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. --> <load-on-startup>1</load-on-startup> </servlet> <!-- 如果不配置servlet-mapping服务器就无法响应/请求 --> <servlet-mapping> <servlet-name>coolweb</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
7、在src下创建coolweb-servlet.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: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"> <!-- 开启springmvc注解 --> <context:component-scan base-package="com.vincent.lwx"/> <mvc:annotation-driven/> </beans>
8、在src下编写applicationcontext.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: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.vincent.lwx"/> <mvc:annotation-driven/> <!-- user实体类 --> <bean id="user" class="com.vincent.lwx.bean.user"/> <!-- 支持上传文件 --> <bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> <property name="defaultencoding" value="utf-8"/> <!-- max size:10m --> <property name="maxuploadsize" value="10485760"/> </bean> </beans>
user实体类要在这里注册
9、在src下编写mybatis.xml
<?xml version="1.0" encoding="utf-8"?> <!doctype configuration public "-//mybatis.org//dtd config 3.0//en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc" /> <!-- 配置数据库连接信息 --> <datasource type="pooled"> <property name="driver" value="com.mysql.jdbc.driver" /> <!-- 注意3306后面是数据库名称 autoreconnect自动重连--> <property name="url" value="jdbc:mysql://localhost:3306/cool?useunicode=true&characterencoding=utf-8&usessl=false&autoreconnect=true" /> <property name="username" value="root" /> <property name="password" value="root" /> </datasource> </environment> </environments> <mappers> <mapper resource="com/vincent/lwx/dao/usermapping.xml" /> </mappers> </configuration>
10、log4j.xml配置
<?xml version="1.0" encoding="utf-8"?> <configuration status="debug"> <appenders> <console name="console" target="system_out"> <thresholdfilter level="trace" onmatch="accept" onmismatch="deny" /> <patternlayout pattern="%d{yyyy-mm-dd hh:mm:ss.sss} %-5level %class{36} %l %m - %msg%xex%n" /> </console> <rollingfile name="rollingfile" filename="d:logs/schoolmallapi.log" filepattern="log/$${date:yyyy-mm}yimoservicerun-%d{mm-dd-yyyy}-%i.log.gz"> <patternlayout pattern="%d{yyyy-mm-dd 'at' hh:mm:ss z} %-5level %class{36} %l %m - %msg%xex%n" /> <sizebasedtriggeringpolicy size="15mb" /> </rollingfile> </appenders> <loggers> <root level="debug"> <appender-ref ref="rollingfile" /> <appender-ref ref="console" /> </root> </loggers> <!-- 下面是打印 mybatis语句的配置 --> <logger name="com.ibatis" additivity="true"> <level value="debug" /> </logger> <logger name="java.sql.connection" additivity="true"> <level value="debug" /> </logger> <logger name="java.sql.statement" additivity="true"> <level value="debug" /> </logger> <logger name="java.sql.preparedstatement" additivity="true"> <level value="debug" /> </logger> <logger name="java.sql.resultset" additivity="true"> <level value="debug" /> </logger> <root> <level value="debug" /> <appender-ref ref="console" /> <!-- <appender-ref ref="file" /> --> <!-- <appender-ref ref="framework" /> --> </root> </configuration>
这个配置貌似有点问题,虽然不影响使用,不过我也没有去深入研究还,最近还要准备面试android哎。。。
现在差不多是这样子咯
11、环境搭建差不多了,现在开始撸代码,写一个注册的动能吧
简历一个实体类user.java
package com.vincent.lwx.bean; import java.io.serializable; import lombok.data; import lombok.getter; import lombok.setter; /** * @title: user.java * @package com.vincent.lwx.bean * @description: todo(用一句话描述该文件做什么) * @author vincent * @date 2017年3月3日 下午6:36:58 * @version v1.0 */ public class user implements serializable{ /** * 序列化id */ private static final long serialversionuid = -6375697395831845246l; /** * 用户id */ private @getter string user_id; /** * 用户手机号码 */ private @setter@getter string phone; /** * 密码 */ private @setter@getter string password; /** * 用户名 */ private @setter@getter string nickname; /** * 用户头像地址 */ private @setter@getter string head; /** * 性别 */ private @setter@getter string sex; /** * 生日 */ private @setter@getter string birthday; /** * 生活状态(发表的说说) */ private @setter@getter string live_status; }
编写mybatis的实体类映射xml文件,就写个usermapping.xml好了,表示为用户相关的操作
<?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.vincent.lwx.mapping.usermapping"> <!-- 根据手机号码查询用户是否存在 --> <select id="selectuser" parametertype="string" resulttype="com.vincent.lwx.bean.user"> select * from user where phone = #{phone} </select> </mapper>
我这里只写了一个,别的还没写,注册之前先查询一下手机号码是否已注册。。
注意这里的id 不能重复,要具有唯一性。parametertype是传入的参数类型,这里是string类型的phone,如果要传入多个参数可以使用user对象,或者map,resulttype返回结果类型,我这里是直接返回一个user对象,之前用jdbc直接连接数据库,返回的东西还要手动封装,这个快多了。。。
创建mybatisutils.java类,用来从数据库获取sqlsession对象的,sqlsession执行sql语句,和jdbc的statement对象差不多感觉。。。也可能我的感觉是错的,哈哈,还没看源码。。。
package com.vincent.lwx.db; import java.io.ioexception; import java.io.reader; import java.util.timer; import java.util.timertask; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsessionfactorybuilder; import com.vincent.lwx.util.eattimertask; /** * @title: mybatisutils.java * @package com.vincent.julie.config * @description: todo(��һ�仰�������ļ���ʲô) * @author vincent * @date 2017��2��18�� ����12:05:35 * @version v1.0 */ public class mybatisutils { private static sqlsessionfactory sqlsessionfactory; private static sqlsession sqlsession; private static long timeinterval;//上一次运行的时间 private static timertask task =null; static { string resource = "mybatis.xml"; reader reader = null; try { reader = resources.getresourceasreader(resource); } catch (ioexception e) { system.out.println(e.getmessage()); } sqlsessionfactory = new sqlsessionfactorybuilder().build(reader); } /** * * @return */ public static sqlsessionfactory getsqlsessionfactory() { return sqlsessionfactory; } /** * ��ȡsqlsession���� * @return */ public static sqlsession getsqlsession(){ if (task != null){ task.cancel(); //将原任务从队列中移除 } task = new eattimertask(); timeinterval = system.currenttimemillis(); //间隔�?1小时 long period = 1000 * 60 * 60; //测试时间每分钟一�? //period = 1000 * 60; timer timer = new timer(); timer.schedule(task, timeinterval, period); if(sqlsessionfactory == null){ sqlsessionfactory = mybatisutils.getsqlsessionfactory(); } sqlsession = sqlsessionfactory.opensession(); return sqlsession; } }
这里有个计时器,我发现tomcat运行一段时间之后(听说是10小时)如果没有连接数据库,会出现异常。。
好,现在来写usercontroller.java类,处理客户端的请求
package com.vincent.lwx.controller; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.apache.ibatis.session.sqlsession; import org.apache.log4j.logmanager; import org.apache.log4j.logger; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import com.vincent.lwx.bean.servicestatus; import com.vincent.lwx.bean.user; import com.vincent.lwx.db.mybatisutils; import com.vincent.lwx.util.responseutils; /** * @title: usercontrol.java * @package com.vincent.lwx.mapping * @description: todo(��һ�仰�������ļ���ʲô) * @author vincent * @date 2017��3��3�� ����6:28:37 * @version v1.0 */ @controller public class usercontroller { private static final logger logger = logmanager.getlogger(usercontroller.class); /** * 注册 * @param phone * @param password * @param request * @param response */ @requestmapping(value = "register", method = requestmethod.post) public void registeruser(@requestparam("phone")string phone,@requestparam("password")string password,httpservletrequest request,httpservletresponse response){ if(hasuserphone(phone)){ //用户已存在,无须再次注册 responseutils.renderjsondatafail(response, servicestatus.runtime_exception, "该号码已被注册"); return; } } /** * 根据手机号码查询用户是否存在 * @param phone * @return */ public boolean hasuserphone(string phone){ /**sql 语句 完整的包名类名和方法id,*/ string sql = "com.vincent.lwx.mapping.usermapping.selectuser"; sqlsession session = mybatisutils.getsqlsession(); /**返回一个user对象*/ user user = session.selectone(sql, phone); if(user!=null){ //用户已存在 return true; }else{ //用户不存在 return false; } } }
10、最后一步,让tomcat跑起来,好吧,下载tomcat、
这个版本是tomcat9.0的
如果不会部署的话可以看这里的 部署tomcat
11、东西写完了不叫最后一步,最后一步应该自己测试一下,google浏览器自带postman检查一下接口的正确性
因为我的数据库我已经自己注册了,所以提示是正确的,另外附上user表的sql语句:
create detabase cool; //创建数据库并指定字符编码集 create database cool default character set utf8 collate utf8_general_ci; //创建表 create table user( user_id int(10) not null primary key auto_increment, phone varchar(11) not null, password varchar(16) not null, nickname varchar(36), head varchar(50), sex varchar(3), birthday varchar(10) default '1992-01-01', live_status varchar(255) )engine = innodb default charset=utf8; //限制最小id=10000 alter table user auto_increment=10000;设置已经存在的表的默认值 //限制手机号码唯一性 alter table user add unique(phone); 字段值唯一性约束 insert into user(phone,password) values( '18696855784', '555555');
github地址进入
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。