mybatis、jstl、log4j搭建自動回復機器人(含知識要點與步驟)

轉載請注明出處:
牽手生活--頭條新聞:筆記是整理思路方式,分享是一個美德,牽手是我的生活方式
牽手生活--簡書:筆記是整理思路方式,分享是一個美德,牽手是我的生活方式

項目效果

機器人聊天url

http://localhost:8080/InitTalkServlet.action
機器人聊天

自動回復指令維護url

http://localhost:8080/List.action
自動回復指令維護

app實現(xiàn)流程

  • javaBean 創(chuàng)建于數(shù)據(jù)庫中表對應的實體
  • dao:實現(xiàn)表對應的增刪改查,如MessageDAO是和message表相關的數(shù)據(jù)庫操作
  • service:負責調(diào)用對應的dao,并實現(xiàn)與數(shù)據(jù)庫無關的業(yè)務邏輯操作。如MessageService調(diào)用MessageDAO實現(xiàn)增刪改查,并負責一些數(shù)據(jù)類型轉換。
  • servlet:主要是通過調(diào)用對應的service,提供http方法方法,并處理web訪問的格式(如UTF-8)與參數(shù)接收。
  • DbHelper:提供訪問數(shù)據(jù)庫輔助。如單例模式DBJdbcHelper提供jdbc方式訪問mysql數(shù)據(jù)庫連接對象Connection;DBMybatisHelper(還沒改為單例模式)提供mybatis訪問數(shù)據(jù)庫的會話SqlSession
app實現(xiàn)流程

用idea創(chuàng)建一個maven 的web項目MicroMessageMybatis

注:如果對idea創(chuàng)建Manven webapp不熟悉,可參見Spring MVC -Hello World(環(huán)境搭建)

app 目錄結構1
image.png

下面介紹涉及知識

  • Maven
  • mybatis(數(shù)據(jù)庫訪問框架)
  • jdbc
  • EL表達式(不介紹)
  • JSTL表達式
  • javaBean
  • Servlet
  • js(不介紹)
  • jquery(不介紹)

下面介紹涉及的工作步驟

  • pom.xml
  • 創(chuàng)建mybatis的輔助類DBMybatisHelper.java
  • 創(chuàng)建jdbc的輔助類DBJdbcHelper.java
  • 配置mybatis配置文件入口.xml文件與不同的mapper對應的.xml
  • 配置日志系統(tǒng)log4j的log4j.properties配置文件
  • 搭建單元測試框架(這里僅用于調(diào)試mybatis獲取數(shù)據(jù)功能)
  • 創(chuàng)建不同的javaBean(基本與數(shù)據(jù)庫表一致,涉及到父子表,采用List<子表javaBean>方式定義屬性:如 private List<CommandContent> contentList;//一條指令對應的自動回復內(nèi)容列表
  • 創(chuàng)建與javaBean對應的DAO:處理數(shù)據(jù)庫的相關操作
  • 創(chuàng)建service : 調(diào)用DAO跟數(shù)據(jù)庫交互,還有一些業(yè)務邏輯需要處理,一般用service一般與servlet對應,被servlet調(diào)用
  • 創(chuàng)建不同的servlet:
  • 在web.xml中注冊servlet,并配置http訪問路徑
  • 創(chuàng)建單元測試用例

配置pom.xml 用Maven方式導入到

  • mysql(訪問mysql數(shù)據(jù)庫)
  • servlet
  • slf4j(日志系統(tǒng),用于測試mybatis)
  • mybatis(數(shù)據(jù)庫訪問框架)
  • junit單元測試
  • JSTL(這里沒有采用Maven的方式配置,而是導入對應的jar包)
JSTL表達式的jar包

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>6.0.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <!--添加Servlet-->

    <!--添加Servlet-->
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0-b01</version>
      <scope>provided</scope>
    </dependency>

    <!-- slf4j日志處理 應用 log4j 調(diào)試動態(tài) SQL-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>


      <!-- 添加mybatis依賴 -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.2.8</version>
      </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.8.2</version>
    </dependency>

    <!--添加log4j依賴-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.5.6</version>
    </dependency>


  </dependencies>

Mybatis中OGNL表達式

Mybatis中OGNL表達式1
Mybatis中OGNL表達式2

Mybatis配置文件

  • mybatis配置文件入口Configuration.xml(可以是其他文件名稱哦)
  • mybatis范圍數(shù)據(jù)庫的sql語句與參數(shù)配置文件Command.xml;CommandContent.xml;Message.xml
    mybatis的配置文件參考mybatis源碼中的例子:


    mybatis配置例子路徑

mybatis-3-mybatis-3.4.6\src\test\java\org\apache\ibatis\submitted\complex_property

  • Configuration.xml:用于配置數(shù)據(jù)庫連接
  • User.xml:用于配置對user表的增、刪、改、查

注意點:如果xml中有&符合,需要用&轉義如

<property name="url" value="jdbc:mysql://**.96.**.27:3306/auth?serverTimezone=UTC&useUnicode=true"/>

需要改為

<property name="url" value="jdbc:mysql://**.96.**.27:3306/auth?serverTimezone=UTC&amp;useUnicode=true"/>
Mybatis配置文件--Configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
        <property name="" value=""/>
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://**.96.**.27:3306/auth?serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="你的密碼"/>

      </dataSource>
    </environment>
  </environments>

  <!--mybatis范圍數(shù)據(jù)庫的sql語句與參數(shù)配置文件-->
  <mappers>
    <mapper resource="sqlMybatisMapping/Message.xml"/>
    <mapper resource="sqlMybatisMapping/Command.xml"/>
    <mapper resource="sqlMybatisMapping/CommandContent.xml"/>
  </mappers>

  
</configuration>
Mybatis配置文件--Message.xml

Message.xml

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

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Message">

  <resultMap type="com.younghare.micromessage.bean.Message" id="MessageResult">
      <!--數(shù)據(jù)庫主鍵使用id標簽,否則使用result標簽;jdbcType對應jdbc中的java.sqlMybatisMapping.Types下的類型-->
    <!--<result column="password" jdbcType="VARCHAR" property="password.encrypted"/>-->
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="COMMAND" jdbcType="VARCHAR" property="command"/>
      <result column="description" jdbcType="VARCHAR" property="description"/>
    <result column="CONTENT" jdbcType="VARCHAR" property="content"/>
  </resultMap>

  <!--配置一個sql語句,讓mybatis可以讀到并執(zhí)行
  resultMap:對應java中的javabean:與數(shù)據(jù)庫查詢結果對應的
  xml中&不能直接使用必須轉&amp; ":也不能直接使用必須用&quot;進行轉
  參數(shù)配置使用OGNL表達式:&quot表示單引號
  -->
  <!--SELECT * FROM message WHERE id = #{id:INTEGER}-->
  <select id="queryMessageList" parameterType="com.younghare.micromessage.bean.Message" resultMap="MessageResult">
      SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message where 1=1
      <if test="command !=null and !&quot;&quot;.equals(command.trim())">
        and COMMAND = #{command}</if>
      <if test="description !=null and !&quot;&quot;.equals(description.trim())">
        and DESCRIPTION like '%' #{description} '%'  </if>
  </select>

    <!--單條記錄刪除-->
    <delete id="deleteOne" parameterType="int">
        DELETE FROM message WHERE ID = #{_parameterType}
    </delete>

    <!--批量記錄刪除,separator 是分隔符-->
    <delete id="deleteBatch" parameterType="java.util.List">
        DELETE FROM message WHERE ID in (
        <foreach collection="list" item="item" separator=",">
            #{item}
        </foreach>
        )
    </delete>



</mapper>

Mybatis配置文件--父子表Command.xml、CommandContent.xml

Command.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Command">

  <!--
  表返回數(shù)據(jù)與javaBean的映射關系;涉及到一對多關系
  -->
  <resultMap type="com.younghare.micromessage.bean.Command" id="Command">
      <!--數(shù)據(jù)庫主鍵使用id標簽,否則使用result標簽;jdbcType對應jdbc中的java.sqlMybatisMapping.Types下的類型
      collection標簽表示主表包含子表的一個集合與javaBean中的Command的CommandContent.Content屬性對應;CommandContent的配置信息在CommandContent.xml中
      C_ID 是查詢中ID的別名
      -->
      <!--<result column="password" jdbcType="VARCHAR" property="password.encrypted"/>-->
    <id column="C_ID" jdbcType="INTEGER" property="id"/>
    <result column="NAME" jdbcType="VARCHAR" property="name"/>
    <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/>
    <collection property="contentList"  resultMap="CommandContent.Content"/>
  </resultMap>
    <!--配置一個sql語句,讓mybatis可以讀到并執(zhí)行
  resultMap:對應java中的javabean:與數(shù)據(jù)庫查詢結果對應的
  xml中&不能直接使用必須轉&amp; ":也不能直接使用必須用&quot;進行轉
  參數(shù)配置使用OGNL表達式:&quot表示單引號
  查詢參數(shù)使Command實體對象,自動映射對象的屬性作為參數(shù)如:command.name
  left join 表示無論字表是否有內(nèi)容,主表的內(nèi)容必須出來
  -->


  <select id="queryCommandList" parameterType="com.younghare.micromessage.bean.Command" resultMap="Command">
    select a.ID C_ID,a.NAME,a.DESCRIPTION,b.ID,b.CONTENT,b.COMMAND_ID
    from COMMAND a left join COMMAND_CONTENT b
    on a.ID=b.COMMAND_ID
    <where>
        <if test="name != null and !&quot;&quot;.equals(name.trim())">
            and a.NAME=#{name}
        </if>
        <if test="description != null and !&quot;&quot;.equals(description.trim())">
            and a.DESCRIPTION like '%' #{description} '%'
        </if>
    </where>
  </select>
</mapper>

CommandContent.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="CommandContent">
  <resultMap type="com.younghare.micromessage.bean.CommandContent" id="Content">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="CONTENT" jdbcType="VARCHAR" property="content"/>
    <result column="COMMAND_ID" jdbcType="VARCHAR" property="commandId"/>
  </resultMap>
</mapper>

Mybatis配置文件的讀取DBMybatisHelper.sql

public class DBMybatisHelper {
    /**
     * 根據(jù)配置文件返回一個mybatis的sqlsession
     * @return
     * @throws IOException
     */
    public SqlSession getSqlSession() throws IOException {
        //通過配置文件獲取數(shù)據(jù)庫連接信息,從src的目錄開始
        //Reader reader= Resources.getResourceAsReader("com/younghare/micromessage/config/Configuration.xml");
        Reader reader= Resources.getResourceAsReader("Configuration.xml");
        //通過配置信息構建一個SqlSessionFactory
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
        //通過sqlSessionFactory打開一個數(shù)據(jù)庫會話
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    };
}

配置日志系統(tǒng)log4j配置(用于通過日志觀察mybatis的sql語句、傳遞參數(shù))

可以匹配值輸出到控制臺,也可以log輸出到文件

控制臺觀察日志

log4j.properties

#配置輸出到控制臺,如果要輸出到文件,需要修改這類
log4j.appender.Cons=org.apache.log4j.ConsoleAppender
# 按自己的想法輸出
log4j.appender.Cons.layout=org.apache.log4j.PatternLayout
# 自定義輸出日志的格式%d:產(chǎn)生日志的時間;%t:產(chǎn)生日志線程的線程名稱;%5p:輸出日志的級別(5位字符);%c:表示所處類的全名包括包名;%m:日志內(nèi)容 %n:表示換行
log4j.appender.Cons.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n


# Root logger set to DEBUG、Console using the A2 appender defined above.
#設置log4j輸出日志的級別、位置DEBUG、Console
log4j.rootLogger=DEBUG, Cons 
log4j.additivity=false

#key=value的形式進行配置
# 位某個包下配置不同的級別
log4j.logger.com.younghare.micromessage=debug, Cons
log4j.logger.org.springframework=debug, Cons
log4j.additivity.com=false
# 這個包下的輸出的是NNFO日志級別
log4j.logger.org.apache=INFO

jdbc 訪問mysql輔助類DBJdbcHelper.java

package com.younghare.micromessage.db;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBJdbcHelper {
    private static final String driver = "com.mysql.jdbc.Driver"; //數(shù)據(jù)庫驅動
    //連接數(shù)據(jù)庫的URL地址
    //private static final String url="jdbc:mysql://localhost:3306/phpmyadmin?useUnicode=true&characterEncoding=UTF-8";
    private static final String url="jdbc:mysql://47.96.6.27:3306/auth?useUnicode=true&characterEncoding=UTF-8";
    private static final String username="root";//數(shù)據(jù)庫的用戶名
    private static final String password="emailczg";//數(shù)據(jù)庫的密碼

    private static Connection conn=null;

    //靜態(tài)代碼塊負責加載驅動
    static
    {
        try
        {
            Class.forName(driver);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

    //單例模式返回數(shù)據(jù)庫連接對象
    public static Connection getConnection() throws Exception
    {
        if(conn==null)
        {
            conn = DriverManager.getConnection(url, username, password);
            return conn;
        }
        return conn;
    }

    public static void main(String[] args) {

        try
        {
            Connection conn = DBJdbcHelper.getConnection();
            if(conn!=null)
            {
                System.out.println("數(shù)據(jù)庫連接正常!");
            }
            else
            {
                System.out.println("數(shù)據(jù)庫連接異常!");
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }

    }
}

javaBean的創(chuàng)建(僅提供Message.java其他不列出來)

Message.java

/**
 * 與指令消息表對應的實體類
 */
public class Message {
    private String id;  //主鍵
    private String command;  //指令名稱
    private String description; //描述
    private String content;   //內(nèi)容

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCommand() {
        return command;
    }

    public void setCommand(String command) {
        this.command = command;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

DAO的創(chuàng)建(僅提供MessageDAO.java其他不列出來)

MessageDAO.java

public class MessageDAO {
    static Logger logger = LoggerFactory.getLogger(MessageDAO.class);; //LogDemo為相關的類

    /**
     * 查詢消息列表
     * @param command 指令
     * @param description 描述 --模糊匹配
     * @return  返回消息列表
     */
    public List<Message> queryMessageListByMysql(String command,String description) {
        List<Message> messageList = new ArrayList<>();
        try {

            Connection conn =DBJdbcHelper.getConnection();

            //conn = DriverManager.getConnection(url, username, password);
            String sqlQuery = "SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message where 1=1";
            StringBuilder sql = new StringBuilder(sqlQuery);
            List<String> paramList = new ArrayList<String>();
            if (command != null && !"".equals(command.trim())){
                sql.append(" and COMMAND = ?");
                paramList.add(command);
            }
            if (description != null && !"".equals(description.trim())){
                sql.append(" and DESCRIPTION like '%?%'");//模糊匹配
                paramList.add(description);
            }
            System.out.println("sqlMybatisMapping:"+sql.toString());


            PreparedStatement statement = conn.prepareStatement(sql.toString());
            for(int i=0;i<paramList.size();i++){
                statement.setString(i+1,paramList.get(i));
                System.out.println(paramList.get(i));
            }

            ResultSet rs = statement.executeQuery();

            while (rs.next()){
                Message message = new Message();
                messageList.add(message);
                message.setId(rs.getString("ID"));
                message.setCommand(rs.getString("COMMAND"));
                message.setDescription(rs.getString("DESCRIPTION"));
                message.setContent(rs.getString("CONTENT"));
            }
            //req.setAttribute("messageList",messageList);

        }catch (ClassNotFoundException e){
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return messageList;
    }


    public List<Message> queryMessageList(String command,String description) {
        List<Message> messageList = new ArrayList<>();
        DBMybatisHelper dbMybatisHelper = new DBMybatisHelper();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbMybatisHelper.getSqlSession();
            Message message = new Message();
            message.setCommand(command);
            message.setDescription(description);
            //通過sqlSession執(zhí)行SQL語句---Message:mapper namespace="Message";queryMessageList是在Message.xml配置的id
            //messageList = sqlSession.selectList("Message.queryMessageList");//
            messageList = sqlSession.selectList("Message.queryMessageList",message);//

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession != null){
                sqlSession.close();
            }

        }

        return  messageList;

    }

    /**
     * 刪除message中的一條記錄
     * @param id
     */
    public  void deleteOne(int id){
        DBMybatisHelper dbMybatisHelper = new DBMybatisHelper();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbMybatisHelper.getSqlSession();
            /*Message.deleteOne是:Message.xml配置的id*/
            sqlSession.delete("Message.deleteOne",id);//
            sqlSession.commit();//增刪改都需要commit

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession != null){
                sqlSession.close();
            }

        }

    }

    /**
     * 刪除批量message中的記錄
     * @param ids
     */
    public  void deleteBatch(List<Integer> ids){
        DBMybatisHelper dbMybatisHelper = new DBMybatisHelper();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbMybatisHelper.getSqlSession();
            /*Message.deleteOne是:Message.xml配置的id*/
            sqlSession.delete("Message.deleteBatch",ids);//
            sqlSession.commit();//增刪改都需要commit

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession != null){
                sqlSession.close();
            }

        }

    }



}

service的創(chuàng)建(僅提供MessageService.java其他不列出來)

MessageService.java

/**
 * 與ListServlet對應
 * 跟數(shù)據(jù)庫交互之前,還有一些業(yè)務邏輯需要處理,一般用service一般與servlet對應,被servlet調(diào)用
 */
public class MessageService {

    /**
     * 查詢message的記錄集合
     * @param command
     * @param description
     * @return
     */
    public List<Message> queryMessageList(String command,String description){
        MessageDAO messageDAO = new MessageDAO();
        return messageDAO.queryMessageList(command,description);
    }
    /**
     * 刪除message的某條記錄
     * @param id
     */
    public void deleteOne(String  id){
        if (id != null && !"".equals(id.trim())){
            MessageDAO messageDAO = new MessageDAO();
            messageDAO.deleteOne(Integer.valueOf(id));
        }
    }

    /**
     * 刪除message的某條記錄
     * @param ids
     */
    public void deleteBatch(String[]  ids){
        List<Integer> idList = new ArrayList<Integer>();
        for (String id : ids) {
            idList.add(Integer.valueOf(id));
        }

        MessageDAO messageDAO = new MessageDAO();
        messageDAO.deleteBatch(idList);
    }


}

創(chuàng)建不同的servlet((僅提供ListServlet.java;DeleteOneServlet.java其他不列出來)

ListServlet.java

public class ListServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request,response);


    }

    protected void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp)
            throws javax.servlet.ServletException, IOException {
        //設置編碼
        req.setCharacterEncoding("UTF-8");
        //接受頁面的值
        String command =req.getParameter("command");
        String description = req.getParameter("description");
        //向頁面?zhèn)髦?        req.setAttribute("command",command);
        req.setAttribute("description",description);
        
        //查詢消息列表,并傳遞給頁面
        MessageService messageService = new MessageService();
        req.setAttribute("messageList", messageService.queryMessageList(command,description));

        //調(diào)整頁面
        req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req,resp);

    }
}

DeleteOneServlet.java

package com.younghare.micromessage.servlet;

import com.younghare.micromessage.service.MessageService;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;

/**
 * message單條記錄刪除控制層
 */
@WebServlet(name = "DeleteOneServlet")
public class DeleteOneServlet extends HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request,response);


    }

    protected void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp)
            throws javax.servlet.ServletException, IOException {
        //設置編碼
        req.setCharacterEncoding("UTF-8");
        //接受頁面的值
        String id =req.getParameter("id");
        //查詢消息列表,并傳遞給頁面
        MessageService messageService = new MessageService();
        messageService.deleteOne(id);

        //調(diào)整頁面
        req.getRequestDispatcher("/List.action").forward(req,resp);

    }
}

在web.xml中注冊servlet,并配置http訪問路徑

<web-app>
...
    <servlet>
        <servlet-name>ListServlet</servlet-name>
        <servlet-class>com.younghare.micromessage.servlet.ListServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>DeleteOneServlet</servlet-name>
        <servlet-class>com.younghare.micromessage.servlet.DeleteOneServlet</servlet-class>
    </servlet>

...

    <!--http://localhost:8080/List.action-->
    <servlet-mapping>
        <servlet-name>ListServlet</servlet-name>
        <url-pattern>/List.action</url-pattern>
    </servlet-mapping>

    <!--http://localhost:8080/DeleteOneServlet.action-->
    <servlet-mapping>
        <servlet-name>DeleteOneServlet</servlet-name>
        <url-pattern>/DeleteOneServlet.action</url-pattern>
    </servlet-mapping>

...
</web-app>

創(chuàng)建單元測試用例MessageDAOTest

MessageDAOTest.java

import com.younghare.micromessage.bean.Message;
import org.junit.Test;

import java.util.List;

public class MessageDAOTest {
    @Test
    public void testqueryMessageList() {
        MessageDAO messageDAO = new MessageDAO();
        List<Message> messages = messageDAO.queryMessageList("","精");
        System.out.println("記錄數(shù):"+messages.size());
    }

    @Test
    public void testqueryMessageListByMysql() {
        MessageDAO messageDAO = new MessageDAO();
        List<Message> messages =  messageDAO.queryMessageListByMysql("","");
        System.out.println("記錄數(shù):"+messages.size());

    }
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • 一. Java基礎部分.................................................
    wy_sure閱讀 4,017評論 0 11
  • 關于米課創(chuàng)始人老華的第一桶金,就是非常碟屋的項目,我已經(jīng)看了許多遍,想了許多遍,不是我想做一個類似的生意,而是我想...
    奔跑的老王閱讀 667評論 0 0
  • 首先想提一下這本書的封面,是樂瑤的畫作,經(jīng)過加工而來的。本身書是一本電子書,由于不習慣看電子書,需要把文章打印出來...
    辮兒媽閱讀 201評論 0 0
  • 在我很小的時候,當我像一個小公主一樣被我的媽媽用雙手輕輕的托起時,他們也想讓我看到以我的身高看不到的世界,我對...
    寫給你的詩情畫意閱讀 604評論 0 0

友情鏈接更多精彩內(nèi)容