1. 程式人生 > >實戰 :Spring MVC + 註解 +SqlServer 框架搭建及詳解

實戰 :Spring MVC + 註解 +SqlServer 框架搭建及詳解

原始碼下載:http://download.csdn.NET/detail/u010469432/6786687

https://blog.csdn.net/u010469432/article/details/17587699

先說一下Spring3 MVC的優點:

spring MVC 屬於輕量級框架

1、Spring3 MVC的學習難度小於Struts2,Struts2用不上的多餘功能太多。呵呵,當然這不是決定因素。

2、Spring3 MVC很容易就可以寫出效能優秀的程式,Struts2要處處小心才可以寫出效能優秀的程式(指MVC部分)

3、Spring3 MVC的靈活是你無法想像的,Spring的擴充套件性有口皆碑,Spring3 MVC當然也不會落後,不會因使用了MVC框架而感到有任何的限制。

 

對於SpringMVC的一些文件型理論知識我不再多加贅述,今天主要是一步一步的開始搭建框架,當然這是我工作中的成果。

不多說,上程式碼:

 

1.建立Web project,我使用的是myeclipse。起名為Springmvc(名字自定)

2.引用SpringMVC 需要的核心jar包:

3.配置web.xml檔案

 

[html] view plain copy

  

<?xml version="1.0" encoding="UTF-8"?>  

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  

    version="2.5">  

    <!-- 配置監聽器 -->  

    <listener>  

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

    </listener>  

    <!-- 在專案啟動時,載入Src/config下的所有以 spring- 開頭的.xml 配置檔案 -->  

    <context-param>  

        <param-name>contextConfigLocation</param-name>  

        <param-value>classpath:config/spring-*.xml</param-value>  

    </context-param>  

    <!--專案啟動後預設開啟的頁面 -->  

    <welcome-file-list>  

        <welcome-file>login.jsp</welcome-file>  

    </welcome-file-list>  

    <!--這裡的配置是關鍵,servlet-name  -->  

    <servlet>  

        <servlet-name>springmvc</servlet-name>  

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

        <!-- 配置載入相應的檔案 -->  

        <init-param>  

            <param-name>contextConfigLocation</param-name>  

            <param-value>classpath*:config/springmvc.xml</param-value>  

        </init-param>  

        <load-on-startup>1</load-on-startup>  

    </servlet>  

    <!-- 配置servlet對映    

      在訪問URL時路徑要寫為:  /service/+ Controller 層@RequestMapping("/admin") 中的admin /+方法上的@RequestMapping(value = "/login")中的 login   

     例如  登陸表單  提交的action就是     /service/admin/login -->  

    <servlet-mapping>  

        <servlet-name>springmvc</servlet-name>  

        <url-pattern>/service/*</url-pattern>  

    </servlet-mapping>  

  

</web-app>  

4.配置Spring.xml檔案,此檔案的名稱必須與web.xml中的servlet-name名稱一致。

 

[html] view plain copy

  

<?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:cache="http://www.springframework.org/schema/cache"   xmlns:aop="http://www.springframework.org/schema/aop"  

    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"  

    xmlns:jdbc="http://www.springframework.org/schema/jdbc"  

    xsi:schemaLocation="http://www.springframework.org/schema/beans    

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

            http://www.springframework.org/schema/context    

            http://www.springframework.org/schema/context/spring-context-3.1.xsd    

            http://www.springframework.org/schema/tx    

            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd    

            http://www.springframework.org/schema/jdbc    

            http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd  

            http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd"  

    default-autowire="byName">  

    <!-- 自動搜尋@Controller標註的類 -->  

    <context:component-scan base-package="com.yfapp.platform" />  

    <context:annotation-config />  

  

    <bean  

        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />  

    <!-- 啟動Spring MVC的註解功能,完成請求和註解POJO的對映 -->  

    <bean  

        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  

        <property name = "messageConverters">  

          <list>  

           <bean class="org.springframework.http.converter.StringHttpMessageConverter">  

           <property name="supportedMediaTypes">  

            <list>  

             <value>text/plain;charset=UTF-8</value>  

            </list>  

           </property>  

           </bean>  

          </list>  

        </property>  

    </bean>  

  

    <!-- Default ViewResolver -->  

    <bean id="viewResolver"  

        class="org.springframework.web.servlet.view.InternalResourceViewResolver">  

        <property name="viewClass"  

            value="org.springframework.web.servlet.view.JstlView" />  

        <property name="prefix" value="" />  

        <property name="suffix" value=".jsp"></property>  

    </bean>  

 <!-- 啟用快取註解功能,這個是必須的,否則註解不會生效,另外,該註解一定要宣告在spring主配置檔案中才會生效 -->    

 <cache:annotation-driven cache-manager="cacheManager"/>    

<bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager" />     

</beans>  

 

5.配置資料庫讀取檔案jdbc.properties放在類資料夾src下我這裡載入的是SqlServer資料庫

 

[html] view plain copy

  

driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver     //連線的資料庫  

url=jdbc:sqlserver://127.0.0.1:1433; DatabaseName=renji            

username=sa  

password=admin  

 

6.配置資料庫相關的檔案

spring-application.xml(檔名稱可以自定義,但是需要在web.xml檔案中載入這裡即對應web.xml中的<!--在你專案啟動時載入spring- 開頭的.xml檔案-->)

 

[html] view plain copy

  

<?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:aop="http://www.springframework.org/schema/aop"  

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  

    <!-- 讀取資原始檔   步驟5 的檔案 -->  

    <bean  

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  

        <property name="location" value="classpath:jdbc.properties" />  

    </bean>  

    <!-- 這個是Spring的注入技術   給org.apache.commons.dbcp.BasicDataSource 類的屬性注入對應的值 ,讀取資料庫配置資訊-->  

    <bean id="dataSource"  

        class="org.apache.commons.dbcp.BasicDataSource">  

        <property name="driverClassName" value="${driverClassName}"></property>  

        <property name="password" value="${password}"></property>  

        <property name="username" value="${username}"></property>  

        <property name="url" value="${url}"></property>  

    </bean>  

    <!-- 這個是向第7步中的 DbUtilsTemplate.java 類的dataSource變數注入值  -->  

    <bean id="dbUtilsTemplate" class="com.yfapp.platform.dao.template.DbUtilsTemplate">   

        <property name="dataSource" ref="dataSource" />   

    </bean>   

      

</beans>  

7.資料庫操作類:DbUtilsTemplate.Java這是我封裝好的工具類直接使用就可以了。

 

[html] view plain copy

  

import java.sql.SQLException;  

import java.util.ArrayList;  

import java.util.List;  

import java.util.Map;  

  

import javax.sql.DataSource;  

  

import org.apache.commons.dbcp.BasicDataSource;  

import org.apache.commons.dbutils.QueryRunner;  

import org.apache.commons.dbutils.handlers.BeanHandler;  

import org.apache.commons.dbutils.handlers.BeanListHandler;  

import org.apache.commons.dbutils.handlers.MapHandler;  

import org.apache.commons.dbutils.handlers.MapListHandler;  

import org.apache.commons.dbutils.handlers.ScalarHandler;  

import org.apache.commons.logging.Log;  

import org.apache.commons.logging.LogFactory;  

  

public class DbUtilsTemplate {  

    private DataSource dataSource;   

    private QueryRunner queryRunner;   

    private static final Log LOG = LogFactory.getLog(DbUtilsTemplate.class);   

  

    public void setDataSource(BasicDataSource dataSource) {   

        this.dataSource = dataSource;   

    }   

  

    /**   

     * 執行sql語句   

     * @param sql sql語句   

     * @return 受影響的行數   

     */   

    public int update(String sql) {   

        return update(sql, null);   

    }   

  

    /**   

     * 執行sql語句   

     * <code>   

     * executeUpdate("update user set username = 'kitty' where username = ?", "hello kitty");   

     * </code>   

     * @param sql sql語句   

     * @param param 引數   

     * @return 受影響的行數   

     */   

    public int update(String sql, Object param) {   

        return update(sql, new Object[] { param });   

    }   

  

    /**   

     * 執行sql語句   

     * @param sql sql語句   

     * @param params 引數陣列   

     * @return 受影響的行數   

     */   

    public int update(String sql, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        int affectedRows = 0;   

        try {   

            if (params == null) {   

                affectedRows = queryRunner.update(sql);   

            } else {   

                affectedRows = queryRunner.update(sql, params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to update data", e);   

        }   

        return affectedRows;   

    }   

  

    /**   

     * 執行批量sql語句   

     * @param sql sql語句   

     * @param params 二維引數陣列   

     * @return 受影響的行數的陣列   

     */   

    public int[] batchUpdate(String sql, Object[][] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        int[] affectedRows = new int[0];   

        try {   

            affectedRows = queryRunner.batch(sql, params);   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to batch update data", e);   

        }   

        return affectedRows;   

    }       

  

    /**   

     * 執行查詢,將每行的結果儲存到一個Map物件中,然後將所有Map物件儲存到List中   

     * @param sql sql語句   

     * @return 查詢結果   

     */   

    public List<Map<String, Object>> queryForList(String sql) {   

        return queryForList(sql, null);  

    }   

  

    /**   

     * 執行查詢,將每行的結果儲存到一個Map物件中,然後將所有Map物件儲存到List中   

     * @param sql sql語句   

     * @param param 引數   

     * @return 查詢結果   

     */   

    public List<Map<String, Object>> queryForList(String sql, Object param) {   

        return queryForList(sql, new Object[] {param});   

    }   

  

    /**   

     * 執行查詢,將每行的結果儲存到一個Map物件中,然後將所有Map物件儲存到List中   

     * @param sql sql語句   

     * @param params 引數陣列   

     * @return 查詢結果   

     */   

    @SuppressWarnings("unchecked")   

    public List<Map<String, Object>> queryForList(String sql, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();   

        try {   

            if (params == null) {   

                list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler());   

            } else {   

                list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to query data", e);   

        }   

        return list;   

    }   

  

    /**   

     * 執行查詢,將每行的結果儲存到Bean中,然後將所有Bean儲存到List中   

     * @param entityClass 類名   

     * @param sql sql語句   

     * @return 查詢結果   

     */   

    public <T> List<T> queryForList(Class<T> entityClass, String sql) {   

        return queryForList(entityClass, sql, null);   

    }   

  

    /**   

     * 執行查詢,將每行的結果儲存到Bean中,然後將所有Bean儲存到List中   

     * @param entityClass 類名   

     * @param sql sql語句   

     * @param param 引數   

     * @return 查詢結果   

     */   

    public <T> List<T> queryForList(Class<T> entityClass, String sql, Object param) {   

        return queryForList(entityClass, sql, new Object[] { param });   

    }   

  

    /**   

     * 執行查詢,將每行的結果儲存到Bean中,然後將所有Bean儲存到List中   

     * @param entityClass 類名   

     * @param sql sql語句   

     * @param params 引數陣列   

     * @return 查詢結果   

     */   

    @SuppressWarnings("unchecked")   

    public <T> List<T> queryForList(Class<T> entityClass, String sql, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        List<T> list = new ArrayList<T>();   

        try {   

            if (params == null) {   

                list = (List<T>) queryRunner.query(sql, new BeanListHandler(entityClass));   

            } else {   

                list = (List<T>) queryRunner.query(sql, new BeanListHandler(entityClass), params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to query data", e);   

        }   

        return list;   

    }   

  

    /**   

     * 查詢出結果集中的第一條記錄,並封裝成物件   

     * @param entityClass 類名   

     * @param sql sql語句   

     * @return 物件   

     */   

    public <T> T query(Class<T> entityClass, String sql) {   

        return queryFirst(entityClass, sql, null);   

    }   

  

    /**   

     * 查詢出結果集中的第一條記錄,並封裝成物件   

     * @param entityClass 類名   

     * @param sql sql語句   

     * @param param 引數   

     * @return 物件   

     */   

    public <T> T queryFirst(Class<T> entityClass, String sql, Object param) {   

        return queryFirst(entityClass, sql, new Object[] { param });   

    }   

  

    /**   

     * 查詢出結果集中的第一條記錄,並封裝成物件   

     * @param entityClass 類名   

     * @param sql sql語句   

     * @param params 引數陣列   

     * @return 物件   

     */   

    @SuppressWarnings("unchecked")   

    public <T> T queryFirst(Class<T> entityClass, String sql, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        Object object = null;   

        try {   

            if (params == null) {   

                object = queryRunner.query(sql, new BeanHandler(entityClass));   

            } else {   

                object = queryRunner.query(sql, new BeanHandler(entityClass), params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to query data", e);   

        }   

        return (T) object;   

    }   

  

    /**   

     * 查詢出結果集中的第一條記錄,並封裝成Map物件   

     * @param sql sql語句   

     * @return 封裝為Map的物件   

     */   

    public Map<String, Object> queryFirst(String sql) {   

        return queryFirst(sql, null);   

    }   

  

    /**   

     * 查詢出結果集中的第一條記錄,並封裝成Map物件   

     * @param sql sql語句   

     * @param param 引數   

     * @return 封裝為Map的物件   

     */   

    public Map<String, Object> queryFirst(String sql, Object param) {   

        return queryFirst(sql, new Object[] { param });   

    }   

  

    /**   

     * 查詢出結果集中的第一條記錄,並封裝成Map物件   

     * @param sql sql語句   

     * @param params 引數陣列   

     * @return 封裝為Map的物件   

     */   

    @SuppressWarnings("unchecked")   

    public Map<String, Object> queryFirst(String sql, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        Map<String, Object> map = null;   

        try {   

            if (params == null) {   

                map = (Map<String, Object>) queryRunner.query(sql, new MapHandler());   

            } else {   

                map = (Map<String, Object>) queryRunner.query(sql, new MapHandler(), params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to query data", e);   

        }   

        return map;   

    }   

  

    /**   

     * 查詢某一條記錄,並將指定列的資料轉換為Object   

     * @param sql sql語句   

     * @param columnName 列名   

     * @return 結果物件   

     */   

    public Object queryForObject(String sql, String columnName) {   

        return queryForOjbect(sql, columnName, null);   

    }   

  

    /**   

     * 查詢某一條記錄,並將指定列的資料轉換為Object   

     * @param sql sql語句   

     * @param columnName 列名   

     * @param param 引數   

     * @return 結果物件   

     */   

    public Object queryForObject(String sql, String columnName, Object param) {   

        return queryForOjbect(sql, columnName, new Object[] { param });   

    }   

  

    /**   

     * 查詢某一條記錄,並將指定列的資料轉換為Object   

     * @param sql sql語句   

     * @param columnName 列名   

     * @param params 引數陣列   

     * @return 結果物件   

     */   

    public Object queryForOjbect(String sql, String columnName, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        Object object = null;   

        try {   

            if (params == null) {   

                object = queryRunner.query(sql, new ScalarHandler(columnName));   

            } else {   

                object = queryRunner.query(sql, new ScalarHandler(columnName), params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to query data", e);   

        }   

        return object;   

    }   

  

    /**   

     * 查詢某一條記錄,並將指定列的資料轉換為Object   

     * @param sql sql語句   

     * @param columnIndex 列索引   

     * @return 結果物件   

     */   

    public Object queryForObject(String sql, int columnIndex) {   

        return queryForObject(sql, columnIndex, null);   

    }   

  

    /**   

     * 查詢某一條記錄,並將指定列的資料轉換為Object   

     * @param sql sql語句   

     * @param columnIndex 列索引   

     * @param param 引數   

     * @return 結果物件   

     */   

    public Object queryForObject(String sql, int columnIndex, Object param) {   

        return queryForObject(sql, columnIndex, new Object[] { param });   

    }   

  

    /**   

     * 查詢某一條記錄,並將指定列的資料轉換為Object   

     * @param sql sql語句   

     * @param columnIndex 列索引   

     * @param params 引數陣列   

     * @return 結果物件   

     */   

    public Object queryForObject(String sql, int columnIndex, Object[] params) {   

        queryRunner = new QueryRunner(dataSource,true);   

        Object object = null;   

        try {   

            if (params == null) {   

                object = queryRunner.query(sql, new ScalarHandler(columnIndex));   

            } else {   

                object = queryRunner.query(sql, new ScalarHandler(columnIndex), params);   

            }   

        } catch (SQLException e) {   

            LOG.error("Error occured while attempting to query data", e);   

        }   

        return object;   

    }   

    /**  

     * 獲取記錄數  

     * @param sql  

     * @param entityClass  

     * @return 結果物件  

     */  

    public Object  getCount(String sql,Class entityClass){  

        queryRunner = new QueryRunner(dataSource,true);   

        Object i=null;  

        try {  

            List list = (List) queryRunner.query(sql, new BeanListHandler(entityClass));  

            if(list.size()>0){  

                i=list.get(0);  

            }  

        } catch (SQLException e) {  

            e.printStackTrace();  

        }  

        return i;  

    }  

  

    /**  

     * 獲取記錄數  

     * @param sql  

     * @param entityClass  

     * @param param  

     * @return 結果物件  

     */  

    public Object getCount(String sql,Class entityClass,Object param ){  

        return getCount(sql,entityClass,new Object[] { param });  

    }  

    /**  

     * 獲取記錄數  

     * @param sql  

     * @param entityClass  

     * @param Object[] params  

     * @return 結果物件  

     */  

    public Object getCount(String sql,Class entityClass,Object[] params ){  

        queryRunner = new QueryRunner(dataSource,true);  

        Object i=null;  

        try{  

            if (params == null) {  

                i= getCount(sql,entityClass);  

            }else{  

                List list = (List) queryRunner.query(sql, new BeanListHandler(entityClass),params);  

                if(list.size()>0){  

                    i=list.get(0);  

                }  

            }  

        }catch (Exception e) {  

        }  

        return i;  

    }  

}   

8。到此為止,框架已經搭建成功了,可以啟動一下專案,

 

啟動成功!

下面我寫個測試例子大家看一下:

我的專案是寫成了三層分開的架構,控制層(Controller),服務層介面(Service),服務層實現類(ServiceImpl),資料庫操作介面(Dao),資料庫操作實現類(DaoImpl).

1.login頁面:

 

[html] view plain copy  


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

    pageEncoding="UTF-8"%>  

<%  

    String path = request.getContextPath();  

    String basePath = request.getScheme() + "://"  

            + request.getServerName() + ":" + request.getServerPort()  

            + path + "/";  

%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<html xmlns="http://www.w3.org/1999/xhtml">  

<head>  

<base href="<%=basePath%>">  

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

</head>  

<body>  

  

    <form action="service/admin/login" method="post">  

        <div class="user clr">  

            <span class="fl">管 理 員 :</span><input name="adminCode" type="text"  

                class="fl " />  

        </div>  

        <div class="user clr">  

            <span class="fl">密    碼 :</span><input  

                name="adminPwd" type="password" class="fl" />  

        </div>  

        <div class="user clr">  

            <input name="" type="reset" value="重 置" class="cancel_btn fr" /><input  

                name="" type="submit" class="login_btn fr" value="登 錄" />  

        </div>  

    </form>  

  

</body>  

</html>  



2.Controller(控制)層的程式碼:AdminController.java





[html] view plain copy

  

package com.yfapp.platform.controller;  

  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

  

import org.springframework.beans.factory.annotation.Autowired;  

import org.springframework.stereotype.Controller;  

import org.springframework.web.bind.annotation.RequestMapping;  

  

import com.yfapp.platform.entity.Admin;  

import com.yfapp.platform.service.AdminService;  

  

@Controller  

@RequestMapping("/admin")  

public class AdminController {  

    @Autowired  

    private AdminService adminService;  

  

    /**  

     * 管理員登陸  

     * @param admin    登陸傳入的使用者物件  

     * @return String  要跳轉到的頁面  

     */  

    @RequestMapping(value = "/login")  

    public String login(HttpServletRequest request, HttpServletResponse response, Admin admin) throws Throwable {  

        Admin ad =new Admin();  

        if(null!=admin.getAdminPwd()||null!=admin.getAdminCode()){  

            ad = adminService.login(admin);  

        }else{  

            ad=null;  

        }  

        if (null != ad) {  

            request.getSession().setAttribute("admin", ad);  

            return "/indexhome";  

        } else {  

            request.setAttribute("imgs", "請重新登入!");  

            return "/login";  

        }  

    }  

}  

3.服務層介面:AdminService.java  以及 服務層實現類AdminServiceImpl.java





[html] view plain copy

  

package com.yfapp.platform.service;  

  

  

import com.yfapp.platform.entity.Admin;  

  

public interface AdminService{  

    //登陸  

    Admin login(Admin admin);  

}  

[html] view plain copy

  

package com.yfapp.platform.service.impl;  

  

  

import org.springframework.beans.factory.annotation.Autowired;  

import org.springframework.stereotype.Service;  

  

import com.yfapp.platform.dao.AdminDao;  

import com.yfapp.platform.entity.Admin;  

import com.yfapp.platform.service.AdminService;  

  

@Service("adminService")  

public class AdminServiceImpl implements AdminService{  

    @Autowired  

    private AdminDao adminDao;  

  

    /**  

     * 登陸  

     */  

    public Admin login(Admin admin){  

        return adminDao.login(admin);  

    }  

}  

4.資料庫操作介面類  BaseDao.java   和  AdminDao.java

 

BaseDao.java是基礎的操作類,這裡面可以將寫一些基本的資料庫操作方法比如增刪改查,我這裡就不寫了,寫這個主要是對映資料庫連線,建立連線池。

AdminDao.java是功能模組的介面類,如果你要寫別的模組的時候只需要想AdminDao一樣繼承BaseDao就行,當然如果不需要BaseDao 也可以不寫BaseDao,這樣寫只是應用了java的思想。使用了泛型。

[html] view plain copy

  

package com.yfapp.platform.dao;  

  

import java.io.Serializable;  

  

public interface BaseDao<PO,ID extends Serializable> {  

      

}  

[html] view plain copy

  

package com.yfapp.platform.dao;  

import com.yfapp.platform.entity.Admin; 
public interface AdminDao extends BaseDao<Admin, Integer>{  
    // 登陸  

    Admin login(Admin admin);  

}  

5.資料庫操作介面實現類  BaseDaoImpl.java   和  AdminDaoImpl.java

 

 

[html] view plain copy

  

package com.yfapp.platform.dao.impl;    

import java.io.Serializable;  

import org.springframework.beans.factory.annotation.Autowired;  

import com.yfapp.platform.dao.BaseDao;  

import com.yfapp.platform.dao.template.DbUtilsTemplate;  

public class BaseDaoImpl<PO,ID extends Serializable> implements BaseDao<PO,ID>  

{       //這個是之前說的資料庫操作幫助類,使用註解的方式,此變數在spring-application.xml中注入值。  

    @Autowired  

    protected DbUtilsTemplate dbUtilsTemplate;  

}  

[html] view plain copy

  

package com.yfapp.platform.dao.impl;  


import org.springframework.stereotype.Repository;  
 

import com.yfapp.platform.dao.AdminDao;  

import com.yfapp.platform.entity.Admin;  


@Repository  

public class AdminDaoImpl extends BaseDaoImpl<Admin, Integer> implements AdminDao {  

   &nb