详解SpringMVC和MyBatis框架开发环境搭建和简单实用

网友投稿 166 2023-05-18


详解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

CoolWeb

index.html

index.htm

index.jsp

default.html

default.htm

default.jsp

CoolWeb

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:CoolWeb-servlet.xml

1

CoolWeb

/

7、在src下创建CoolWeb-servlet.xml

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:mvc="http://springframework.org/schema/mvc"

xsi:schemaLocation="http://springframework.org/schema/mvc http://springframework.org/schema/mvc/spring-mvc-4.3.xsd

http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-4.3.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:mvc="http://springframework.org/schema/mvc"

xsi:schemaLocation="http://springframework.org/schema/mvc http://springframework.org/schema/mvc/spring-mvc-4.3.xsd

http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-4.3.xsd">

8、在src下编写ApplicationContext.xml文件

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:mvc="http://springframework.org/schema/mvc"

xsi:schemaLocation="http://springframework.org/schema/mvc http://springframework.org/schema/mvc/spring-mvc-4.3.xsd

http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-4.3.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:mvc="http://springframework.org/schema/mvc"

xsi:schemaLocation="http://springframework.org/schema/mvc http://springframework.org/schema/mvc/spring-mvc-4.3.xsd

http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-4.3.xsd">

User实体类要在这里注册

9、在src下编写mybatis.xml

10、log4j.xml配置

pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />

filePattern="log/$${date:yyyy-MM}yimoServiceRun-%d{MM-dd-yyyy}-%i.log.gz">

这个配置貌似有点问题,虽然不影响使用,不过我也没有去深入研究还,最近还要准备面试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好了,表示为用户相关的操作

select * from user where phone = #{phone}

我这里只写了一个,别的还没写,注册之前先查询一下手机号码是否已注册。。

注意这里的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地址进入

pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />

filePattern="log/$${date:yyyy-MM}yimoServiceRun-%d{MM-dd-yyyy}-%i.log.gz">

filePattern="log/$${date:yyyy-MM}yimoServiceRun-%d{MM-dd-yyyy}-%i.log.gz">

这个配置貌似有点问题,虽然不影响使用,不过我也没有去深入研究还,最近还要准备面试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好了,表示为用户相关的操作

select * from user where phone = #{phone}

我这里只写了一个,别的还没写,注册之前先查询一下手机号码是否已注册。。

注意这里的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地址进入


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java IO流 文件的编码实例代码
下一篇:java 中继承和多态详细介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~