您的位置:首页 > 其它

MyBatis实战——自动回复机器人

2015-07-13 10:32 441 查看

案例分析

基本功能

接收发送指令

根据指令自动回复对应内容

模块划分

回复内容维护

对话功能

回复内容列表

回复内容删除

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

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




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



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

<?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>

<!--
<settings>
<setting name="useGeneratedKeys" value="false"/>
<setting name="useColumnLabel" value="true"/>
</settings>

<typeAliases>
<typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/>
</typeAliases>
-->

<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<!--
<dataSource type="UNPOOLED">
<property name="driver" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:complexprop"/>
<property name="username" value="sa"/>
</dataSource>
-->
<!-- 替换成我们自己的JDBC驱动、URL、用户名和密码 -->
<dataSource type="UNPOOLED">
<property name="driver" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisrobot?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="mysqladmin"/>
</dataSource>
</environment>
</environments>

<!--
<mappers>
<mapper resource="org/apache/ibatis/submitted/complex_property/User.xml"/>
</mappers>
-->
</configuration>


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

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

向SQL语句传入参数(向PreparedStatement的占位符中传入参数)。

执行SQL语句。

获取SQL语句执行的结果。

对事务的控制

如何获得SQLSession?

通过配置文件获取数据库连接的相关信息;

通过配置信息构建SqlSessionFactory;

通过SqlSessionFactory打开数据库会话(SqlSession就是和数据库进行交互的一次会话)。

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

package org.gpf.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;

/**
* 数据库访问层
* @author gaopengfei
* @date 2015-5-24 下午4:47:29
*/
public class DBAccess {

public SqlSession getSqlSession() throws IOException{

// 通过配置文件获取数据库连接信息(路径从src的第一级子目录开始)
Reader reader = Resources.getResourceAsReader("org/gpf/config/Configuration.xml");
// 通过配置信息构建一个SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
// 通过SqlSessionFactory打开一个数据库会话
SqlSession sqlSession = factory.openSession();

return sqlSession;
}

}


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

package org.gpf.dao;

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

import org.apache.ibatis.session.SqlSession;
import org.gpf.bean.Message;
import org.gpf.db.DBAccess;

/**
* 和message表相关的操作
* @author gaopengfei
* @date 2015-5-25 上午10:52:19
*/
public class MessageDAO {

/**
* 根据条件查询消息列表
* @param command
* @param description
* @return
*/
public List<Message> queryMessagesList(String command,String description){

DBAccess dbAccess = new DBAccess();
SqlSession sqlSession = null;                // 放在外面,在finally中
try {
sqlSession = dbAccess.getSqlSession();    // 在DAO层进行异常处理
// 通过SqlSession执行SQL语句

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

/**
* 测试是否取得SqlSession
* @param args
*/
public static void main(String[] args) {
MessageDAO messageDAO = new MessageDAO();
messageDAO.queryMessagesList("", "");
}
}


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

<?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="User">

<resultMap type="UserAlias" id="UserResult">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="username" jdbcType="VARCHAR" property="username"/>
<result column="password" jdbcType="VARCHAR" property="password.encrypted"/>
<result column="administrator" jdbcType="BOOLEAN" property="administrator"/>
</resultMap>

<select id="find" parameterType="long" resultMap="UserResult">
SELECT id,command,description,content FROM message
</select>

</mapper>


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: