通过自动回复机器人学Mybatis:MySQL脚本 + db >> dao >> service >> servlet

留着参考

makeData.sql

delimiter //
create procedure make_data() 
begin
    declare i int default 1;
    while i < 1000 do
        insert into message values(i, 'a', 'b', 'c');
        set i = i + 1; 
    end while;
end;
//

call make_data();
DROP PROCEDURE IF EXISTS make_data;

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.imooc.bean.Message" id="MessageResult">
      <!-- 主键用id标签,其它的用result标签 -->
    <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>

  <!-- Message.xml的目的:配置如下的sql语句让SqlSession读到并执行 -->
  <!-- id是为了方便sqlSession调用,相同namespace下必须唯一 -->
  <select id="queryMessageList" parameterType="com.imooc.bean.Message" resultMap="MessageResult">
    select ID, COMMAND, DESCRIPTION, CONTENT from MESSAGE where 1=1
    <!-- OGNL表达式,它不是Mybatis专有的,类似于EL表达式,#{}是Mybatis专有的 -->
    <!-- 原: <if test="command != null && !"".equals(command.trim())"></if> -->
    <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 = #{_parameter}
  </delete>    
  
  <delete id="deleteBatch" parameterType="java.util.List">
      delete from MESSAGE where ID in (
          <foreach collection="list" item="item" separator=",">
              #{item}
          </foreach>
      )
  </delete>
  
</mapper>

访问数据库类

package com.imooc.db;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * 访问数据库类
 */
public class DBAccess {
    public SqlSession getSqlSession() throws IOException {
        Reader reader = Resources.getResourceAsReader("com/imooc/config/Configuration.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}

dao

package com.imooc.dao;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

import com.imooc.bean.Message;
import com.imooc.db.DBAccess;

public class MessageDao {
    /**
     * 根据查询条件获取消息列表
     */
    public List<Message> queryMessageList(String command, String description) {
        List<Message> messageList = new ArrayList<>();
        
        DBAccess dbAccess = new DBAccess();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbAccess.getSqlSession();
            // 通过sqlSession执行SQL语句
            Message message = new Message();
            message.setCommand(command);
            message.setDescription(description);
            
            messageList = sqlSession.selectList("Message.queryMessageList", message);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 如果中间发生异常sqlSession可能是null
            if (sqlSession != null) {
                sqlSession.close();
            }
        }    
        return messageList;
    }
    
    /**
     * 单条删除
     */
    public void deletOne(int id) {        
        DBAccess dbAccess = new DBAccess();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbAccess.getSqlSession();
            sqlSession.delete("Message.deleteOne", id);
            sqlSession.commit(); // Mybatis不默认提交
            // JDBC默认自动提交,除非setAutoCommit(false)
            // 这个时候姐需要conn.commit()提交事务
            // 可以通过conn.rollback([Savepoint savepoint])回滚
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }    
    }
    
    /**
     * 删除多条消息
     */
    public void deleteBatch(List<Integer> ids) {
        DBAccess dbAccess = new DBAccess();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbAccess.getSqlSession();
            sqlSession.delete("Message.deleteBatch", ids);
            sqlSession.commit(); 
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }    
    }
   
    public static void main(String[] args) {
        MessageDao messageDao = new MessageDao();
        messageDao.queryMessageList("", "");
    }
}

 service

MaintainService.java

package com.imooc.service;

import java.util.ArrayList;
import java.util.List;

import com.imooc.dao.MessageDao;

/**
 * 维护相关的业务功能
 */
public class MaintainService {
    /**
     * 删除单条信息
     */
    public void deleteOne(String id) {
        // servlet负责接收页面的值、向页面传值
        // service负责接收servlet穿过来的值并对这个值进行处理,做业务的操作,算法等等
        // 如果有需要调用相应的Dao
        if (id != null && !"".equals(id.trim())) { // 这个逻辑判断实际还是不够的!
            MessageDao messageDao = new MessageDao();
            messageDao.deletOne(Integer.valueOf(id)); 
        }
    }
    
    /**
     * 删除多条消息
     */
    public void deleteBatch(String[] ids) {
        MessageDao messageDao = new MessageDao();
        List<Integer> idList = new ArrayList<>();
        for (String id : ids) {
            idList.add(Integer.valueOf(id));
        }
        messageDao.deleteBatch(idList);
    }
}

QueryService.java

package com.imooc.service;

import java.util.List;

import com.imooc.bean.Message;
import com.imooc.dao.MessageDao;
import com.imooc.util.Iconst;

/**
 * 列表相关的业务功能
 */
public class QueryService {
    /**
     * 获取消息列表
     */
    public List<Message> queryMessageList(String command, String description) {
        MessageDao dao = new MessageDao();
        return dao.queryMessageList(command, description);
    }
    
    /**
     * 通过指令查询
     */
    public String queryByCommand(String command) {
        MessageDao dao = new MessageDao();
        List<Message> messageList;
        // 用户输入帮助    
        if (Iconst.HELP_COMMAND.equals(command)) {
            messageList = dao.queryMessageList(null, null);
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < messageList.size(); ++i) {
                if (i != 0) {
                    result.append("<br />");
                }
                result.append("回复[" + messageList.get(i).getContent() + "]可以查看" + messageList.get(i).getDescription());
            }
            return result.toString();
        }
        // 用户输入具体指令
        messageList = dao.queryMessageList(command, null);
        if (messageList.size() > 0) {
            return messageList.get(0).getContent();
        }
        // 用户输入位置指令
        return Iconst.NO_MATCHING_CONTENT;
    }
}

servlet

后台方面:

package com.imooc.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.service.QueryService;

/**
 * 列表页面初始化控制
 */
@SuppressWarnings("serial")
public class ListServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码
        req.setCharacterEncoding("UTF-8");
        // 接受页面的值
        String command = req.getParameter("command");
        String description = req.getParameter("description");
        // 向页面传值
        req.setAttribute("command", command);
        req.setAttribute("description", description);
        // 查询消息列表并传给页面
        QueryService listService = new QueryService();
        req.setAttribute("messageList", listService.queryMessageList(command, description));
        // 页面跳转
        req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
package com.imooc.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.service.MaintainService;

/**
 * 单条删除控制层
 */
@SuppressWarnings("serial")
public class DeleteOneServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码
        req.setCharacterEncoding("UTF-8");
        // 接受页面的值
        String id = req.getParameter("id");
        MaintainService maintainService = new MaintainService();
        maintainService.deleteOne(id);
        // 页面跳转
        req.getRequestDispatcher("/List.action").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
package com.imooc.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.service.MaintainService;

@SuppressWarnings("serial")
public class DeleteBatchServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码
        req.setCharacterEncoding("UTF-8");
        // 接受页面的值
        String[] ids = req.getParameterValues("id");
        MaintainService maintainService = new MaintainService();
        maintainService.deleteBatch(ids);
        // 页面跳转
        req.getRequestDispatcher("/List.action").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

前台方面:

package com.imooc.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 
 * 对话页的初始化控制
 *
 */
@SuppressWarnings("serial")
public class InitTalkServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码
        req.setCharacterEncoding("UTF-8");
        // 页面跳转
        req.getRequestDispatcher("/WEB-INF/jsp/front/talk.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
package com.imooc.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.service.QueryService;

/**
 * 自动回复功能控制层,
 * 针对AJAX的
 */
@SuppressWarnings("serial")
public class AutoReplyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        QueryService queryService = new QueryService();
        out.write(queryService.queryByCommand(req.getParameter("content")));
        out.flush();
        out.close();
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

 

posted @ 2017-07-03 21:09  xkfx  阅读(310)  评论(0编辑  收藏  举报