成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

轟轟烈烈的搭建Spring + Spring MVC + Mybatis

Fourierr / 2674人閱讀

摘要:配置和編碼格式使用提供過濾器處理字符編碼。請求從不改變資源的狀態(tài),無副作用。中添加,采用默認配置已經(jīng)足夠面對大多數(shù)場景注入?yún)⒖兼溄邮职咽纸棠阏献顑?yōu)雅框架我的編碼習(xí)慣接口定義設(shè)計最佳實踐

創(chuàng)建項目

打開IDEA -> Create New Project
勾選Create from archetype

選擇使用的maven的本地位置,這個根據(jù)實際情況選擇就好

這一步會填寫項目名稱,根據(jù)實際來就好了。

一個空的項目就已經(jīng)完成了。

搭建項目基礎(chǔ)目錄

創(chuàng)建java文件夾

設(shè)置java文件夾為Sources Root,只有在Rources RootxiaIRDEA才提供創(chuàng)建Java文件的選項

創(chuàng)建Package

配置Tomcat Service

選擇Deployment

選擇帶exploded的

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

運行tomcat

運行成功

以上完成基礎(chǔ)的搭建,下面會引入框架

配置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}
        
        
        ...
        
    

    ...

創(chuàng)建resources目錄下的配置文件

spring-mvc.xml



    
    
    
    

    
    

    
    

    
    

如上配置,加入了一個InternalResourceViewResolver(視圖解析器),這個視圖解析器根據(jù)Controller的方法返回字符串或者ModelAndView,找到對應(yīng)的視圖(頁面),可以再視圖中加入EL表達式等代碼綁定數(shù)據(jù)。
InternalResourceViewResolver中包含兩個參數(shù)prefix和suffix,他們分別是視圖解析器的前綴和后綴,比如,上面配置了prefix的值為‘/WEB-INF/jsp/’,那么當(dāng)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處理,由它找到請求路徑所對應(yīng)的Controller,把請求交由這個Controller處理。

pom.xml 添加servlet web

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

創(chuàng)建UserController.java和userIndex.jsp文件

創(chuàng)建UserController.java

@Controller
@RequestMapping("/user")
public class UserController {

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

創(chuàng)建userIndex.jsp

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



    User Index


User Index

此時,運行系統(tǒng),可通過Spring注解進入jsp頁面,如:/user/index

Spring & Mybatis 創(chuàng)建mapper層

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
        
    
        ...
        
    
    
    ...

創(chuàng)建數(shù)據(jù)庫mybatis

create database mybatis;

創(chuàng)建表user

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

在 resources 目錄下創(chuàng)建 jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3307/mybatis?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
在 resources 目錄下創(chuàng)建 conf/spring-mybatis.xml



    
    

    
    

    
    

    
    

    
    

在 resources 目錄下創(chuàng)建 conf/mybatis-config.xml



    
    
        
        

        
        

        
        
    

創(chuàng)建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;
}

創(chuàng)建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}
    

    

    
    

    

創(chuàng)建Service層

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
@Transactional
public 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層

創(chuàng)建相應(yīng)文件

編寫返回的Bean,統(tǒng)一返回格式,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; // 拋出異常
    /**
     * 接口返回狀態(tài)碼,0表示成功,其他的看對應(yīng)定義
     *
     * 推薦:
     * 0  : 表示成功
     * >0 :  表示已知的異常(需要在調(diào)用的地方多帶帶處理)
     * <0 :  表示未知的異常(不需要多帶帶處理,調(diào)用方統(tǒng)一處理)
     */
    private int code = SUCCESS; // 返回狀態(tài)

    /**
     * 返回信息(出錯的時候使用)
     */
    private String msg = "success";

    /**
     * 返回的數(shù)據(jù)
     */
    private T data;

    /**
     * 請求正確(新增、修改、刪除信息),返回調(diào)用
     */
    public ResultBean() {
        super();
    }

    /**
     * 請求數(shù)據(jù)正確,返回調(diào)用
     * @param data 返回數(shù)據(jù)
     */
    public ResultBean(T data) {
        super();
        this.data = data;
    }

    /**
     * 請求出錯,返回調(diào)用
     * @param msg 錯誤提醒語句
     */
    public ResultBean(String msg) {
        this.code = CHECK_FAIL;
        this.msg = msg;
    }

    /**
     * 請求異常,返回調(diào)用
     * @param e 異常
     */
    public ResultBean(Throwable e) {
        super();
        this.msg = e.toString();
        this.code = UNKNOWN_EXCEPTION;
    }
    
    /**
     * getter and setter
     * 
     * 因為屬性是private的,所以屬性必須有g(shù)etter才能在被獲取
     */

}
接口采用RESTful API

使用四種HTTP方法POST,GET,PUT,DELETE可以提供CRUD功能(創(chuàng)建,獲取,更新,刪除)。

獲?。菏褂肎ET方法獲取資源。GET請求從不改變資源的狀態(tài),無副作用。GET方法是冪等的。GET方法具有只讀的含義。因此,你可以完美的使用緩存

創(chuàng)建:使用POST創(chuàng)建新的資源。對同一URL進行多次請求會生成多份資源,所以POST不是冪等的

更新:使用PUT創(chuàng)建或更新現(xiàn)有資源。對同一URL多次PUT都是相同的,所以PUT方法是冪等的

刪除:使用DELETE刪除現(xiàn)有資源,有副作用,但DELETE方法是冪等的

冪等操作的特點是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同
--- POST - 創(chuàng)建 GET - 獲取 PUT - 更新 DELETE - 刪除
/users 創(chuàng)建一個用戶 獲取用戶列表 批量更新用戶信息 批量刪除用戶信息
/users/{id} --- 獲取單個用戶信息 更新單個用戶信息 刪除單個用戶信息

完成UserController的編碼

/**
 * 用戶信息管理
 */
@Controller
public 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編碼的內(nèi)容,比如說: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,F(xiàn)astJson采用默認配置已經(jīng)足夠面對大多數(shù)場景




    ...

    
    
        
            
        
    

    ...

參考鏈接
手把手教你整合最優(yōu)雅SSM框架
我的編碼習(xí)慣-接口定義
RESTful API 設(shè)計最佳實踐

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68874.html

相關(guān)文章

  • 寫這么多系列博客,怪不得找不到女朋友

    摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...

    JerryWangSAP 評論0 收藏0
  • 【Java】基于Maven搭建Spring+SpringMVC+Mybatis框架

    摘要:關(guān)于的配置,可以參考這篇文章的第一個小節(jié)配置模板引擎搭什么搭直接用腳手架不行嗎下載就能用下載就能用下載就能用碼云咳咳,開個玩笑,如果本著學(xué)習(xí)態(tài)度的話,那就慢慢啃吧搭建空的項目使用搭建基本的空項目填寫和,,選擇項目的地址,在新的窗口打開最 關(guān)于springMVC的配置,可以參考這篇文章的第一個小節(jié):【java】intellij idea SpringMVC 配置FreeMarker模板引...

    edagarli 評論0 收藏0
  • 70 個 Spring 最常見面試題,Java 晉升必會

    摘要:容器自動完成裝載,默認的方式是這部分重點在常用模塊的使用以及的底層實現(xiàn)原理。 對于那些想面試高級 Java 崗位的同學(xué)來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術(shù)的細節(jié)和難點成為了主要考察的內(nèi)容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...

    Ashin 評論0 收藏0
  • SSM框架網(wǎng)站后臺搭建(一)

    摘要:傳統(tǒng)的代碼中,在類中調(diào)用其他對象,都是自己出來一個對象,然后調(diào)用,這樣代碼的耦合度就比較高。日志對象和主程序的耦合度降到最低,即使更改日志對象的操作,主程序不受影響。 SSM框架網(wǎng)站后臺搭建(一) 1.所用技術(shù)簡單介紹 1.SSM中的S:Spring Spring在百度詞條上的解釋是: Spring是一個開放源代碼的設(shè)計層面框架,他解決的是業(yè)務(wù)邏輯層和其他各層的松耦合問題,因此它將面向...

    ZweiZhao 評論0 收藏0
  • springmvc簡介和快速搭建

    摘要:簡介和眾多其他框架一樣,它基于的設(shè)計理念,此外,它采用可松散耦合可插拔組件結(jié)構(gòu),比其他框架更具擴展性和靈活性??蚣車@核心展開,是框架的總導(dǎo)演,總策劃,它負責(zé)截獲請求并將其分派給相應(yīng)的處理器處理。 springmvc簡介 springmvc和眾多其他web框架一樣,它基于MVC的設(shè)計理念,此外,它采用可松散耦合可插拔組件結(jié)構(gòu),比其他MVC框架更具擴展性和靈活性。 springmvc通過...

    Sike 評論0 收藏0

發(fā)表評論

0條評論

Fourierr

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<