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>
相关文章推荐
- impala源码解析——前端SQL解析阶段
- JDBC中No operations allowed after connection closed
- 代码进行自动约束
- 基于最简单的FFmpeg采样读取内存读写:内存玩家
- 离线使用eclipse的代码提示功能
- Merge Two Sorted Lists
- Java报表生成技术
- Java-文件上传和下载
- KMP 字符串匹配
- MyEclipse 打开Struts配置文件时出错
- Android SwipeRefreshLayout实现工作原理.
- Hdu1242(bfs+优先队列or dfs)
- java算法学习
- Notepad++调试运行Python脚本方法
- PAT 数据结构 01-复杂度2. Maximum Subsequence Sum (25)
- Remove Linked List Elements
- AndroidManifest中android:exported="false"
- 数据库的最简单实现
- 使用 Cordova(PhoneGap)构建Android程序
- android git 开源地址