博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
轰轰烈烈的搭建Spring + Spring MVC + Mybatis
阅读量:6962 次
发布时间:2019-06-27

本文共 13719 字,大约阅读时间需要 45 分钟。

创建项目

打开IDEA -> Create New Project

勾选Create from archetype
clipboard.png

clipboard.png

选择使用的maven的本地位置,这个根据实际情况选择就好

图片描述

这一步会填写项目名称,根据实际来就好了。

图片描述

一个空的项目就已经完成了。

搭建项目基础目录

创建java文件夹

图片描述

设置java文件夹为Sources Root,只有在Rources RootxiaIRDEA才提供创建Java文件的选项

图片描述

创建Package

图片描述

clipboard.png

配置Tomcat Service

图片描述

图片描述

图片描述

图片描述

选择Deployment

图片描述

选择带exploded的

图片描述

然后OK,添加刚才的tomcat到配置里面

图片描述

图片描述

运行tomcat

图片描述

运行成功

图片描述

以上完成基础的搭建,下面会引入框架

配置Spring

pom.xml 添加Spring

...
5.0.4.RELEASE
...
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-test
${spring.version}
...
...

创建resources目录下的配置文件

图片描述

clipboard.png

spring-mvc.xml

如上配置,加入了一个InternalResourceViewResolver(视图解析器),这个视图解析器根据Controller的方法返回字符串或者ModelAndView,找到对应的视图(页面),可以再视图中加入EL表达式等代码绑定数据。

InternalResourceViewResolver中包含两个参数prefix和suffix,他们分别是视图解析器的前缀和后缀,比如,上面配置了prefix的值为‘/WEB-INF/jsp/’,那么当Controller返回字符串‘index’时,视图解析器回找到‘/WEB-INF/jsp/index’;如果再加上suffix属性,值为‘.jsp’,那么视图解析器就会去找‘/WEB-INF/jsp/index.jsp’。

web.xml 配置Spring MVC和编码格式

Archetype Created Web Application
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/*
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:conf/spring-*.xml
1
SpringMVC
/

如上面代码所示,这样配置的目的是把请求交给Spring框架的DispatcherServlet处理,由它找到请求路径所对应的Controller,把请求交由这个Controller处理。

pom.xml 添加servlet web

...
...
jstl
jstl
1.2
taglibs
standard
1.1.2
javax.servlet
javax.servlet-api
3.1.0
...
...

创建UserController.java和userIndex.jsp文件

clipboard.png

创建UserController.java

@Controller@RequestMapping("/user")public class UserController {    @RequestMapping("/index")    public ModelAndView index(ModelAndView modelAndView){        modelAndView.setViewName("/user/userIndex");        return modelAndView;    }}

创建userIndex.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    User Index

User Index

此时,运行系统,可通过Spring注解进入jsp页面,如:/user/index

clipboard.png

Spring & Mybatis

创建mapper层

clipboard.png

pom.xml 引入 mybatis 和 jdbc

...
...
mysql
mysql-connector-java
5.1.37
runtime
org.mybatis
mybatis
3.4.5
org.mybatis
mybatis-spring
1.3.1
...
...

创建数据库mybatis

create database mybatis;

创建表user

CREATE TABLE user(    id INT PRIMARY KEY auto_increment,    username VARCHAR ( 20 ),    password VARCHAR ( 20 ),    sex VARCHAR ( 10 ),    address VARCHAR ( 20 ) );

在 resources 目录下创建 jdbc.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3307/mybatis?useUnicode=true&characterEncoding=utf8jdbc.username=rootjdbc.password=root

在 resources 目录下创建 conf/spring-mybatis.xml

在 resources 目录下创建 conf/mybatis-config.xml

创建UserMapper

public interface UserMapper {    /**     * 查询一个用户     *     * @param  id 用户id     * @return User     */    public User getUser(Integer id) throws Exception;    /*     * 新增用戶     * @param user     * @return     * @throws Exception     */    public int insertUser(User user) throws Exception;    /*     * 修改用戶     * @param user     * @param id     * @return     * @throws Exception     */    public int updateUser(User user) throws Exception;    /*     * 刪除用戶     * @param id     * @return     * @throws Exception     */    public int deleteUser(Integer id) throws Exception;    /*     * 查询所有的用户信息     * @return     * @throws Exception     */    public List
getUsers() throws Exception;}

创建UserMapper.xml

insert into user (username,password,sex,address) values (#{username},#{password},#{sex},#{address})
update user set address=#{address} where id=#{id}
delete from user where id=#{id}

创建Service层

clipboard.png

User

public class User {    private Integer id;    private String username;    private String password;    private String sex;    private String address;    // getter and setter    }

UserService.java

public interface UserService {    /**     * 查询一个用户     *     * @param  id 用户id     * @return User     */    public User getUser(Integer id) throws Exception;    /*     * 新增用戶     * @param user     * @return     * @throws Exception     */    public int insertUser(User user) throws Exception;    /*     * 修改用戶     * @param user     * @param id     * @return     * @throws Exception     */    public int updateUser(User user) throws Exception;    /*     * 刪除用戶     * @param id     * @return     * @throws Exception     */    public int deleteUser(Integer id) throws Exception;    /*     * 查询所有的用户信息     * @return     * @throws Exception     */    public List
getUsers() throws Exception;}

UserServiceImpl.java

@Service@Transactionalpublic class UserServiceImpl implements UserService {    @Autowired    UserMapper userMapper;    /**     * 查询一个用户     *     * @param  id 用户id     * @return User     */    public User getUser(Integer id)  throws Exception {        return userMapper.getUser(id);    }    /*     * 新增用戶     * @param user     * @return     * @throws Exception     */    public int insertUser(User user) throws Exception {        return userMapper.insertUser(user);    }    /*     * 修改用戶     * @param user     * @param id     * @return     * @throws Exception     */    public int updateUser(User user) throws Exception {        return userMapper.updateUser(user);    }    /*     * 刪除用戶     * @param id     * @return     * @throws Exception     */    public int deleteUser(Integer id) throws Exception {        return userMapper.deleteUser(id);    }    /*     * 查询所有的用户信息     * @return     * @throws Exception     */    public List
getUsers() throws Exception { return userMapper.getUsers(); }}

spring-service.xml

修改web.xml

classpath:spring/spring-mvc.xml
# 改成 -->
classpath:spring/spring-*.xml

Controller层

创建相应文件

clipboard.png

编写返回的Bean,统一返回格式,ResultBean

public class ResultBean
implements Serializable { /** * 错误代码 */ private static final int SUCCESS = 0; // 成功 private static final int CHECK_FAIL = 1; // 失败 private static final int UNKNOWN_EXCEPTION = -99; // 抛出异常 /** * 接口返回状态码,0表示成功,其他的看对应定义 * * 推荐: * 0 : 表示成功 * >0 : 表示已知的异常(需要在调用的地方单独处理) * <0 : 表示未知的异常(不需要单独处理,调用方统一处理) */ private int code = SUCCESS; // 返回状态 /** * 返回信息(出错的时候使用) */ private String msg = "success"; /** * 返回的数据 */ private T data; /** * 请求正确(新增、修改、删除信息),返回调用 */ public ResultBean() { super(); } /** * 请求数据正确,返回调用 * @param data 返回数据 */ public ResultBean(T data) { super(); this.data = data; } /** * 请求出错,返回调用 * @param msg 错误提醒语句 */ public ResultBean(String msg) { this.code = CHECK_FAIL; this.msg = msg; } /** * 请求异常,返回调用 * @param e 异常 */ public ResultBean(Throwable e) { super(); this.msg = e.toString(); this.code = UNKNOWN_EXCEPTION; } /** * getter and setter * * 因为属性是private的,所以属性必须有getter才能在被获取 */}

接口采用RESTful API

使用四种HTTP方法POST,GET,PUT,DELETE可以提供CRUD功能(创建,获取,更新,删除)。

  • 获取:使用GET方法获取资源。GET请求从不改变资源的状态,无副作用。GET方法是幂等的。GET方法具有只读的含义。因此,你可以完美的使用缓存
  • 创建:使用POST创建新的资源。对同一URL进行多次请求会生成多份资源,所以POST不是幂等的
  • 更新:使用PUT创建或更新现有资源。对同一URL多次PUT都是相同的,所以PUT方法是幂等的
  • 删除:使用DELETE删除现有资源,有副作用,但DELETE方法是幂等的
幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同
--- POST - 创建 GET - 获取 PUT - 更新 DELETE - 删除
/users 创建一个用户 获取用户列表 批量更新用户信息 批量删除用户信息
/users/{id} --- 获取单个用户信息 更新单个用户信息 删除单个用户信息

完成UserController的编码

/** * 用户信息管理 */@Controllerpublic class UserController {    @Autowired    private UserService userService;    /*     * 获取用户列表     *     * @return     * @throws Exception     */    @ResponseBody    @GetMapping("/users")    public ResultBean
> getUsers() throws Exception { List
users = userService.getUsers(); return new ResultBean
>(users); } /* * 新增用户信息 * * @return * @throws Exception */ @ResponseBody @PostMapping("/users") public ResultBean insertUser(@RequestBody User user) throws Exception { int result = userService.insertUser(user); if (result > 0) { return new ResultBean(); } else { return new ResultBean("新增失败"); } } /* * 获取用户信息 * * @param id 用户id * @return * @throws Exception */ @ResponseBody @GetMapping("/users/{id}") public ResultBean
getUser(@PathVariable Integer id) throws Exception { User user = userService.getUser(id); return new ResultBean
(user); } /* * 修改用户信息 * * @return * @throws Exception */ @ResponseBody @PutMapping("/users/{id}") public ResultBean updateUser(@PathVariable Integer id, @RequestBody User user) throws Exception { user.setId(id); int result = userService.updateUser(user); if (result > 0) { return new ResultBean(); } else { return new ResultBean("修改失败"); } } /* * 删除用户信息 * * @param id 用户id * @return * @throws Exception */ @ResponseBody @DeleteMapping("/users/{id}") public ResultBean deleteUser(@PathVariable Integer id) throws Exception { int result = userService.deleteUser(id); if (result > 0) { return new ResultBean(); } else { return new ResultBean("删除失败"); } }}
使用
@RequestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等,本例子目标是处理application/json

使用@PathVariable Integer id映射@RequestMapping("/users/{id}") / @GetMapping("/users/{id}") / @DeleteMapping("/users/{id}")等请求中的{id}

引入fastjson

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
...
...
com.alibaba
fastjson
1.2.47
...
...

/conf/spring-mvc.xml中添加FastJson,FastJson采用默认配置已经足够面对大多数场景

...
...

参考链接

转载地址:http://gowsl.baihongyu.com/

你可能感兴趣的文章
MySQL中权限管理
查看>>
JavaEE 请求响应
查看>>
如何解决数据文件传输的风险?
查看>>
Hyper-v集群高可用性配置
查看>>
查看域名解析是否生效的方法
查看>>
javax.crypto.spec.SecretKeySpec
查看>>
ubuntu14.04搭建Nginx+php+mysql+phpmyadmin
查看>>
fatal error C1083: 无法打开预编译头文件:“Debug\a.pch”: No su
查看>>
Linux Crontab定时任务
查看>>
ubuntu安装谷歌浏览器
查看>>
崛起于Springboot2.X之mysql读写分离升级版(22)
查看>>
Weblogic数据池测试出错
查看>>
django 迁移数据 暂时禁用auto_now / auto_now_add
查看>>
多个线程之间的通信
查看>>
Tomcat中server.xml文件内各节点详解
查看>>
SSH远程访问及控制
查看>>
centos6 远程桌面链接
查看>>
jquery javascript iframe操作
查看>>
【原创】一路成长一路歌
查看>>
hello
查看>>