案例分析
基本功能
- 接收发送指令
- 根据指令自动回复对应内容
模块划分
- 回复内容维护
- 对话功能
- 回复内容列表
- 回复内容删除
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相关信息:
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的作用:
- 向SQL语句传入参数(向PreparedStatement的占位符中传入参数)。
- 执行SQL语句。
- 获取SQL语句执行的结果。
- 对事务的控制
如何获得SQLSession?
- 通过配置文件获取数据库连接的相关信息;
- 通过配置信息构建SqlSessionFactory;
- 通过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>
时间: 2024-10-08 17:15:44