zoukankan      html  css  js  c++  java
  • MyBatis实战——自动回复机器人

    案例分析

    基本功能

    • 接收发送指令
    • 根据指令自动回复对应内容

    模块划分

    • 回复内容维护
    • 对话功能
    • 回复内容列表
    • 回复内容删除

    MyBatis的下载和核心架构的搭建

      下载地址:https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.2.8

        下载需要的jar包和源码包。在源码包中提供了官方的示例教程,核心配置文件在mybatis-3-mybatis-3.2.8src estjavaorgapacheibatissubmittedcomplex_propertyConfiguration.xml,在src目录下新建一个config目录,存放此配置文件:

      打开此配置文件,可以发现它将原来的JDBC中的驱动等配置到了这个文件中,我们只需要仿照它的格式配置我们自己的jdbc相关信息:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4     "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 
     6 <configuration>
     7 
     8 <!--
     9   <settings>
    10     <setting name="useGeneratedKeys" value="false"/>
    11     <setting name="useColumnLabel" value="true"/>
    12   </settings>
    13 
    14   <typeAliases>
    15     <typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/>
    16   </typeAliases>
    17 -->
    18 
    19   <environments default="development">
    20     <environment id="development">
    21       <transactionManager type="JDBC">
    22         <property name="" value=""/>
    23       </transactionManager>
    24       <!--
    25       <dataSource type="UNPOOLED">
    26         <property name="driver" value="org.hsqldb.jdbcDriver"/>
    27         <property name="url" value="jdbc:hsqldb:mem:complexprop"/>
    28         <property name="username" value="sa"/>
    29       </dataSource>
    30       -->
    31       <!-- 替换成我们自己的JDBC驱动、URL、用户名和密码 -->
    32       <dataSource type="UNPOOLED">
    33         <property name="driver" value="org.gjt.mm.mysql.Driver"/>
    34         <property name="url" value="jdbc:mysql://localhost:3306/mybatisrobot?characterEncoding=utf8"/>
    35         <property name="username" value="root"/>
    36         <property name="password" value="mysqladmin"/>
    37       </dataSource>
    38     </environment>
    39   </environments>
    40 
    41 <!-- 
    42   <mappers>
    43     <mapper resource="org/apache/ibatis/submitted/complex_property/User.xml"/>
    44   </mappers>
    45 -->
    46 </configuration>

      以上的配置文件就已经修改完毕。

      Mybaits向DAO层提供的一个核心的对象是SqlSession。SqlSession的作用:

    1. 向SQL语句传入参数(向PreparedStatement的占位符中传入参数)。
    2. 执行SQL语句。
    3. 获取SQL语句执行的结果。
    4. 对事务的控制

    如何获得SQLSession?

    1. 通过配置文件获取数据库连接的相关信息;
    2. 通过配置信息构建SqlSessionFactory;
    3. 通过SqlSessionFactory打开数据库会话(SqlSession就是和数据库进行交互的一次会话)。

    在数据库层,我们新建一个DBAccess类:

     1 package org.gpf.db;
     2 
     3 import java.io.IOException;
     4 import java.io.Reader;
     5 
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 /**
    12  * 数据库访问层
    13  * @author gaopengfei
    14  * @date 2015-5-24 下午4:47:29
    15  */
    16 public class DBAccess {
    17 
    18     public SqlSession getSqlSession() throws IOException{
    19         
    20         // 通过配置文件获取数据库连接信息(路径从src的第一级子目录开始)
    21         Reader reader = Resources.getResourceAsReader("org/gpf/config/Configuration.xml");
    22         // 通过配置信息构建一个SqlSessionFactory
    23         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
    24         // 通过SqlSessionFactory打开一个数据库会话
    25         SqlSession sqlSession = factory.openSession();
    26         
    27         return sqlSession;
    28     }
    29     
    30 }

      在DAO层,我们实例化DBAccess的一个实例。测试是否取得SqlSession。

     1 package org.gpf.dao;
     2 
     3 import java.io.IOException;
     4 import java.util.List;
     5 
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.gpf.bean.Message;
     8 import org.gpf.db.DBAccess;
     9 
    10 /**
    11  * 和message表相关的操作
    12  * @author gaopengfei
    13  * @date 2015-5-25 上午10:52:19
    14  */
    15 public class MessageDAO {
    16 
    17     /**
    18      * 根据条件查询消息列表
    19      * @param command
    20      * @param description
    21      * @return
    22      */
    23     public List<Message> queryMessagesList(String command,String description){
    24         
    25         DBAccess dbAccess = new DBAccess();
    26         SqlSession sqlSession = null;                // 放在外面,在finally中
    27         try {
    28             sqlSession = dbAccess.getSqlSession();    // 在DAO层进行异常处理
    29             // 通过SqlSession执行SQL语句
    30             
    31         } catch (IOException e) {
    32             e.printStackTrace();
    33         }finally{
    34             if (sqlSession != null)
    35                 sqlSession.close();
    36         }
    37         return null;
    38     }
    39     
    40     /**
    41      * 测试是否取得SqlSession
    42      * @param args
    43      */
    44     public static void main(String[] args) {
    45         MessageDAO messageDAO = new MessageDAO();
    46         messageDAO.queryMessagesList("", "");
    47     }
    48 }

      MyBatis和JDBC不一样,它不是将SQL语句写死在代码里面,也不是用Java代码来动态拼接SQL语句。MyBatis大部分的工作是在配置文件中。在官方的核心配置文件的同一目录下有一个配置SQL的配置文件User.xml.该配置文件的目的是将此文件中配置的SQL语句传递给SqlSession让它执行。拷贝该配置文件到我们自己的项目,重命名为Message.xml,删除不必要的部分,添加我们自己的SQL语句。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 
     6 <mapper namespace="User">
     7 
     8   <resultMap type="UserAlias" id="UserResult">
     9     <id column="id" jdbcType="INTEGER" property="id"/>
    10     <result column="username" jdbcType="VARCHAR" property="username"/>
    11     <result column="password" jdbcType="VARCHAR" property="password.encrypted"/>
    12     <result column="administrator" jdbcType="BOOLEAN" property="administrator"/>
    13   </resultMap>
    14 
    15   <select id="find" parameterType="long" resultMap="UserResult">
    16     SELECT id,command,description,content FROM message
    17   </select>
    18 
    19 </mapper>

      

  • 相关阅读:
    为TextBox定义快捷键
    (转)再谈“我是怎么招聘程序员的”
    (转)jQuery框架学习第二天:jQuery中万能的选择器
    (转)MongoDB学习笔记(一) MongoDB介绍及安装
    asp.net 导出CSV
    领域驱动设计下系统层次结构风格(转载)
    (转)谈谈数据加密的处理提供各种算法处理
    (转)REST服务开发实战
    领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
    (转)你的工作不是命令人们去做什么
  • 原文地址:https://www.cnblogs.com/happyfans/p/4525978.html
Copyright © 2011-2022 走看看