国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringBoot搭建一個(gè)SSM開發(fā)框架(二)

Nosee / 2754人閱讀

摘要:接著上一篇,我們在測試可以允許后,我們接著來寫一個(gè)查詢功能,一連接數(shù)據(jù)庫的查詢例子我來看看項(xiàng)目的結(jié)構(gòu)頂級父項(xiàng)目公司默認(rèn)有的父項(xiàng)目數(shù)據(jù)層

接著上一篇,我們在測試web可以允許后,我們接著來寫一個(gè)查詢功能,

一、 連接數(shù)據(jù)庫的查詢例子

我來看看項(xiàng)目的結(jié)構(gòu):

 tx-parent 頂級父項(xiàng)目(公司默認(rèn)有的)
    |- tx-manager ---------------------------pom.xml 父項(xiàng)目
       |- tx-manager-mapper ---------------數(shù)據(jù)層
       |- tx-manager-common ---------------工具層
       |- tx-manager-bean   ---------------實(shí)體層
       |- tx-manager-service --------------服務(wù)層
       |- tx-manager-web    ---------------控制層

技術(shù)棧:
mqsql數(shù)據(jù)庫
druid連接池
mybatis持久層
spring這個(gè)就不說了吧

分析:
分模塊開發(fā),所以我們需要把:
實(shí)體放到 -> bean 項(xiàng)目中
mybatis的接口和映射文件放到 -> mapper 項(xiàng)目中
yml項(xiàng)目配置如:連接池,日志等 放到 -> web 項(xiàng)目中

下面我們開始動(dòng)手:

一、tx-manager-mapper

1、創(chuàng)建數(shù)據(jù)庫、表(這個(gè)過程忽略),
2、添加依賴,我們需要依賴mybatis、mysql驅(qū)動(dòng)、連接池等。tx-manager-mapper的pom.xml內(nèi)容如下:


    4.0.0
    
        com.topinfo.manager
        tx-manager
        1.0.0-SNAPSHOT
    
    tx-manager-mapper

    
        
        
            com.topinfo.manager
            tx-manager-bean
            1.0.0-SNAPSHOT
        

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        

        
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
        
        
        
        
            mysql
            mysql-connector-java
        

         
        
            com.alibaba
            druid
        
        
    
    
    
    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                false
            
        
    

3、我們通過反向工程來生成 實(shí)體bean、 mybatis接口和映射文件, 并把他們拷貝到項(xiàng)目中,如圖:

二、tx-manager-bean

1、把反向工程生成的實(shí)體復(fù)制到 bean 項(xiàng)目中;pom.xml 不需要引入其他,如圖:

三、tx-manager-service

1、編寫測試方法,編寫接口和實(shí)現(xiàn)類;

接口 ITxAccountService :

public interface ITxAccountService {
    
    
    /**    
     * @Description: 新增賬戶  
     * @param: @param account
     * @param: @return      
     * @return: TxResult        
     */
    public TxResult addTxAccount(TxAccount account);
    
    
    
    /**    
     * @Description: 修改賬戶 
     * @param: @param account
     * @param: @return      
     * @return: TxResult        
     */
    public TxResult updateTxAccount(TxAccount account);
    
    
    
    /**    
     * @Description: 查看賬戶信息
     * @param: @param accountId
     * @param: @return      
     * @return: TxResult        
     */
    public TxResult queryTxAccount(String accountId);
    
    
    
    /**    
     * @Description: 查詢賬戶列表
     * @param: @param username
     * @param: @param page
     * @param: @param rows
     * @return: TxResult 
     */
    public TxResult queryTxAccountList(String username, int page, int rows);
    
   

}

實(shí)現(xiàn)類 TxAccountServiceImpl:

/**   
 * @ClassName:  TxAccountServiceImpl   
 * @Description: 賬戶服務(wù)類
 * @author: 楊攀
 * @date:   2019年1月10日 下午2:55:13     
 * @Copyright: 2019 www.tuxun.net Inc. All rights reserved. 
 */
@Service
public class TxAccountServiceImpl implements ITxAccountService {

    
    @Autowired
    private TxAccountMapper accountMapper;
    
    
    /**   
     * 

Description: 新增賬戶

* @param account * @return * @see com.topinfo.manager.service.ITxAccountService#addTxAccount(com.topinfo.manager.bean.TxAccount) */ @Override public TxResult addTxAccount(TxAccount account){ return null; } @Override public TxResult updateTxAccount(TxAccount account){ return null; } @Override public TxResult queryTxAccount(String accountId){ //根據(jù)賬戶id查詢 TxAccount account = accountMapper.selectByPrimaryKey (accountId); if(null != account) { return TxResult.buildSuccess (account); } return TxResult.buildFailure (); } @Override public TxResult queryTxAccountList(String username, int pageNum, int rows){ return null; } }
四、tx-manager-web

tx-manager-web層我們需要做幾步:
1、連接池、日志的配置
2、controller的編寫
3、啟動(dòng)dao層的掃描

1、連接池、日志的配置

1、在application-dev.yml開發(fā)配置中,添加連接池的配置,同時(shí)設(shè)置Tomcat服務(wù)端口、模板thymeleaf、security 等, 內(nèi)容如下:

############################################################
#############  開發(fā)環(huán)境配置
############################################################

## Tomcat服務(wù)端口
server:
  port: 8080


############################################################
############# 數(shù)據(jù)源配置 Druid 
############################################################  
druid:
  datasource:
    ## useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
    url: jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8&serverTimezone=UTC
    username: spring
    password: spring
    driverClass: com.mysql.jdbc.Driver


spring:
  ############################################################
  ##  thymeleaf 模板配置
  thymeleaf:
    cache: false ## 開發(fā)階段,關(guān)閉thymeleaf緩存
    prefix: classpath:/templates/
    suffix: .html

  security:
    user:
      name: admin
      password: 111111

說明: url后面需要添加 serverTimezone=UTC,否則啟動(dòng)會報(bào)異常

java.sql.SQLException: The server time zone value "?D1ú±ê×?ê±??"....

2、添加配置類

/**
 *@Description: 阿里連接池
 *@Author:楊攀
 *@Since:2018年6月28日下午5:18:02  
 */
@Configuration
@ConfigurationProperties(prefix = "druid.datasource")
public class DruidDataSourceConfig {
    
    @Autowired
    private Environment env;
    
    @Bean
    public DruidDataSource dataSource(){

        DruidDataSource dataSource = new DruidDataSource();
        
        dataSource.setUrl(env.getProperty("druid.datasource.url"));
        dataSource.setUsername(env.getProperty("druid.datasource.username"));
        dataSource.setPassword(env.getProperty("druid.datasource.password"));
        dataSource.setInitialSize(5);
        dataSource.setMaxActive(50);
        dataSource.setMinIdle(0);
        dataSource.setMaxWait(60000);
        dataSource.setValidationQuery("SELECT 1");
        dataSource.setTestOnBorrow(false);
        dataSource.setTestWhileIdle(true);
        dataSource.setPoolPreparedStatements(false);
        
        return dataSource;
    }    

}

3、在application.yml全局配置中添加日志的配置, mybatis的配置

############################################################
#############  全局配置
############################################################

# 多個(gè)環(huán)境配置文件切換 
spring:
  profiles:  
    active: dev 




############################################################
#############  mybatis 配置
############################################################

# mybatis配置
mybatis:
  # 配置mybatis的xml文件路徑 com.topinfo.manager.mapper
  mapper-locations: classpath:/com/topinfo/manager/mapper/*.xml
  # 配置Bean的路徑
  type-aliases-package: com.topinfo.manager.bean
  
# mybatis 分頁插件配置
pagehelper:
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
   

############################################################
############# logging 日志配置
############################################################  
logging:
  # 日志配置文件,Spring Boot默認(rèn)使用classpath路徑下的日志配置文件
  config: classpath:logback-boot.xml
  # 日志文件,絕對路徑或相對路徑 D:/upload, 最后不需要添加“/”
  dir:  D:/upload
  # 日志輸出級別: 級別依次為【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG
  level: 
    # 配置spring web日志級別  
    root: INFO 
2、controller的編寫

controller的編寫

@RestController
@RequestMapping("/account")
public class AccountController {

    @Autowired
    private ITxAccountService accountService;
    
     
    @RequestMapping(value="/view", method=RequestMethod.GET)
    public TxResult view(String id) {
        return accountService.queryTxAccount (id);
    }
    
}
3、啟動(dòng)dao層的掃描

添加 @MapperScan 掃描注解, 然后運(yùn)行。

@SpringBootApplication
@MapperScan(value={"com.topinfo.manager.mapper"}) //此注解表示動(dòng)態(tài)掃描DAO接口所在包
public class ManagerApplication {
    
    public static void main(String[] args) throws Exception{
        SpringApplication.run (ManagerApplication.class, args);
    }

}

在數(shù)據(jù)庫中添加了一條測試數(shù)據(jù),然后根據(jù)id訪問,最后結(jié)果如圖:

這樣,數(shù)據(jù)庫訪問就通了,接下來,我們繼續(xù)封裝,比如: 全局異常處理,安全模塊等等

補(bǔ)充:

TxResult 為自定義響應(yīng)格式,內(nèi)容如下:

/**   
 * @ClassName:  TxResult   
 * @Description: 自定義響應(yīng)格式 
 * @author: 楊攀
 * @date:   2018年12月26日 下午5:35:34     
 * @Copyright: 2018 www.tuxun.net Inc. All rights reserved. 
 */
public class TxResult {
    
    public static final int STATE_SUCCESS = 1; //表示成功

    public static final int STATE_FAILURE = -1; //表示失敗
    
    /** 
     *@Fields  成功返回: 1   失敗返回:-1 或 其他錯(cuò)誤碼
     */
    private Integer           errcode;

    /** 
     *@Fields  返回成功或失敗的信息提示.
     */
    private String            message;

    /** 
     *@Fields  返回的數(shù)據(jù),不管是單個(gè)對象還是對個(gè)對象,統(tǒng)一放到List中.
     */
    private List   data;
    
    
    /**   
     * @Fields expfield : 擴(kuò)展字段  
     */
    private String            expfield;
 
    
    
    private TxResult(int code, String message, Object object, String expfield) {
        this.errcode = code;
        this.message = message;
        this.expfield = expfield;
        
        if (null != object) {
            if(object instanceof List) { //如果是列表則
                this.data = (List) object;
            }else {
                List list = new ArrayList ();
                list.add (object);
                this.data = list;
            }
        }
    }
    
    
    private TxResult(int code, String message, Object object) {
        this (code, message, object, "");
    }

     
    /**    
     * @Description: 操作成功! 
     * @param: @return      
     * @return: TxResult        
     */
    public static TxResult buildSuccess(){
        return new TxResult(1, "操作成功!", null);
    }
    
    
    /**    
     * @Description: 操作成功! 
     * @param: @return      
     * @return: TxResult        
     */
    public static TxResult buildSuccess(Object data){
        return new TxResult(1, "操作成功!", data);
    }
    
    /**    
     * @Description: 操作失敗!  
     * @param: @return      
     * @return: TxResult        
     */
    public static TxResult buildFailure(){
        return new TxResult(-1, "操作失敗!", null);
    }
    
    /**    
     * @Description: 自定義消息   
     * @param: @param code
     * @param: @param msg
     * @param: @return      
     * @return: TxResult        
     */
    public static TxResult build(int code, String msg) {
        return new TxResult(code, msg, null);
    }
    
    /**    
     * @Description: 自定義消息
     * @param: @param code
     * @param: @param msg
     * @param: @param data
     * @param: @return      
     * @return: TxResult        
     */
    public static TxResult build(int code, String msg, Object data) {
        return new TxResult(code, msg, data);
    }
    
    
    /**    
     * @Description: 解析 json (TxResult的json) 判斷是否為 true
     * @param: @param json
     * @param: @return      
     * @return: T        
     */
    public static boolean parseBoolean(String json){
        try {
            JSONObject jsonObject = JSONObject.fromObject (json);
            int errcode = jsonObject.getInt ("errcode");
            if (STATE_SUCCESS == errcode) {// 成功
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
    /**    
     * @Description:  解析 json (TxResult的json) 的擴(kuò)展信息
     * @param: @param json
     * @param: @return      
     * @return: boolean        
     */
    public static String parseExpfield(String json){
        try {
            JSONObject jsonObject = JSONObject.fromObject (json);
            String expfield = jsonObject.getString ("expfield");
            return expfield;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    
    
    
    /**    
     * @Description: 解析 json (TxResult的json) 為一個(gè) 對象
     * @param: @param json
     * @param: @param clazz
     * @param: @return      
     * @return: T        
     */
    public static  T parseObject(String json, Class clazz){
        try {
            JSONObject jsonObject = JSONObject.fromObject (json);
            int errcode = jsonObject.getInt ("errcode");

            if (STATE_SUCCESS == errcode) {// 成功
                JSONArray jsonArray = jsonObject.getJSONArray ("data");
                if (jsonArray.size () > 0) {// 判斷,防止返回沒有對象
                    JSONObject bean = jsonArray.getJSONObject (0);
                    T t = (T) bean.toBean (bean, clazz);
                    return t;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    
    /**    
     * @Description: 解析json (TxResult的json)  為一個(gè) List  
     * @param: @param json
     * @param: @param clazz 
     * @param: @return      
     * @return: List        
     */
    public static  List parseArray(String json, Class clazz){
        
        try {
            JSONObject jsonObject = JSONObject.fromObject (json);
            int errcode = jsonObject.getInt ("errcode");

            if (STATE_SUCCESS == errcode) {// 成功
                JSONArray jsonArray = jsonObject.getJSONArray ("data");
                List list =  (List) JSONArray.toCollection (jsonArray, clazz);
                return list;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    
    public Integer getErrcode(){
        return errcode;
    }


    
    public void setErrcode(Integer errcode){
        this.errcode = errcode;
    }


    
    public String getMessage(){
        return message;
    }


    
    public void setMessage(String message){
        this.message = message;
    }


    
    public List getData(){
        return data;
    }


    
    public void setData(List data){
        this.data = data;
    }


    
    public String getExpfield(){
        return expfield;
    }


    
    public void setExpfield(String expfield){
        this.expfield = expfield;
    }
    
}
           
               
                                           
                       
                 
            
                     
             
               

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72933.html

相關(guān)文章

  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達(dá)成后還會有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實(shí)現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0
  • SpringBoot搭建一個(gè)SSM開發(fā)框架

    摘要:的子模塊我們先講層,因?yàn)槲蚁氚雅渲迷谶@里也說下。長這樣我們接下來看看每個(gè)子模塊如何編寫。二子模塊搭建子模塊搭建子模塊配置在將之前,我們先將的配置文件,使用一個(gè)全局的配置文件或,我們推薦使用文件。 現(xiàn)在,我們來搭建一個(gè)簡單的分模塊的SSM開發(fā)框架吧, 一: 分析并創(chuàng)建項(xiàng)目 先來簡單分析下我們項(xiàng)目的結(jié)構(gòu): 比如:我現(xiàn)在搭建一個(gè)管理系統(tǒng),我們把項(xiàng)目分為: tx-parent 頂級父項(xiàng)目(公...

    tuomao 評論0 收藏0
  • 兩年了,我寫了這些干貨!

    摘要:開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評論0 收藏0
  • SpringBoot 仿抖音短視頻小程序開發(fā)(一)

    摘要:一項(xiàng)目簡介模仿抖音做的一個(gè)短視頻微信小程序,用搭建小程序后臺,用框架搭建短視頻后臺管理系統(tǒng),小程序后臺通過分布式監(jiān)聽節(jié)點(diǎn)自動(dòng)下載或刪除短視頻后臺管理系統(tǒng)上傳的視頻。 一、項(xiàng)目簡介 模仿抖音做的一個(gè)短視頻微信小程序,用SpringBoot搭建小程序后臺,用SSM框架搭建短視頻后臺管理系統(tǒng),小程序后臺通過分布式zookeeper監(jiān)聽節(jié)點(diǎn)自動(dòng)下載或刪除短視頻后臺管理系統(tǒng)上傳的視頻。 二、環(huán)境...

    CoffeX 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<