zoukankan      html  css  js  c++  java
  • 通过自动回复机器人学Mybatis:搭建核心架构

    imooc视频学习笔记 ----> URL:http://www.imooc.com/learn/154

    MessageDao.java

    package com.imooc.dao;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    
    import com.imooc.bean.Message;
    import com.imooc.db.DBAccess;
    /**
     * 
     * Dao层需求:1对象能与数据库交互 2能执行SQL执行
     * Mybatis给dao层提供对象——SqlSession
     * SqlSession的作用:
     * 1、向SQL语句传入参数
     * 2、执行SQL语句
     * 3、获取SQL执行结果
     * 4、事务的控制
     * 如何得到SqlSession:
     * 1、通过配置文件获取数据库连接的相关信息
     * 2、通过配置信息构建SqlSessionFactory
     * 3、通过SqlSessionFactory打开数据库会话
     */
    public class MessageDao {
        /**
         * 改成Mybatis的一套
         * 根据查询条件获取消息列表
         */
        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语句
                messageList = sqlSession.selectList("Message.queryMessageList");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 如果中间发生异常sqlSession可能是null
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }    
            return messageList;
        }
        
        public static void main(String[] args) {
            MessageDao messageDao = new MessageDao();
            messageDao.queryMessageList("", "");
        }
        
    /*    // 数据库驱动
        private static final String JDBC_DRIVER = "org.gjt.mm.mysql.Driver";
        // 数据库地址
        private static final String DB_URL = "jdbc:mysql://localhost:3306/miro_message";
        
        // 用户名与密码
        private static final String USER = "root";
        private static final String PASS = "19971019";
        
        private static Connection conn = null;
    
        // 加载数据库驱动
        static {
            try {
                Class.forName(JDBC_DRIVER);
                conn = DriverManager.getConnection(DB_URL, USER, PASS);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        // 获取消息列表
        public List<Message> queryMessageList(String command, String description) {
            List<Message> messageList = new ArrayList<>();
            
            // SQL拼接
            StringBuilder sqlBuilder = new StringBuilder();
            sqlBuilder.append("select ID, COMMAND, DESCRIPTION, CONTENT from MESSAGE where 1=1");
            
            List<String> paramList = new ArrayList<>();
            // 判断指令是否为空
            if (command != null && !"".equals(command.trim())) {
                sqlBuilder.append(" and COMMAND=?");
                paramList.add(command);
            }
            // 判断描述是否为空
            if (description != null && !"".equals(description.trim())) {
                sqlBuilder.append(" and DESCRIPTION like '%' ? '%'");
                paramList.add(description);
            }
            
            String sql = sqlBuilder.toString();
            
            PreparedStatement prep = null;
            ResultSet result = null;
            try {
                prep = conn.prepareStatement(sql);
                // 设置SQL参数
                for (int i = 0; i != paramList.size(); ++i) {
                    prep.setString(i+1, paramList.get(i)); 
                }
                // 执行查找操作
                result = prep.executeQuery();
                while (result.next()) {
                    // 把查找结果放进List里
                    Message message = new Message();
                    messageList.add(message);
                    
                    message.setId(result.getString("ID"));
                    message.setCommand(result.getString("COMMAND"));
                    message.setDescription(result.getString("DESCRIPTION"));
                    message.setContent(result.getString("CONTENT"));
                }
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            // 如果出现异常就返回一个空的List
            return messageList;
        }*/
    }

    Configuration.xml

    <?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.gjt.mm.mysql.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/miro_message"/>
            <property name="username" value="root"/>
            <property name="password" value="19971019"/>
          </dataSource>
        </environment>
      </environments>
     
      <mappers>
        <mapper resource="com/imooc/config/sqlxml/Message.xml"/>
      </mappers>
      
    </configuration>

    DBAccess.java

    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 {
        // 异常交给Dao层处理
        public SqlSession getSqlSession() throws IOException {
            // STEP-1 通过配置文件获取数据库连接的相关信息
            Reader reader = Resources.getResourceAsReader("com/imooc/config/Configuration.xml");
            // STEP-2 通过配置信息构建一个SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            // STEP-3 通过SqlSessionFactory打开数据库会话
            SqlSession sqlSession = sqlSessionFactory.openSession();
            return sqlSession;
        }
    }

    Message.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    
           Copyright 2009-2016 the original author or authors.
    
           Licensed under the Apache License, Version 2.0 (the "License");
           you may not use this file except in compliance with the License.
           You may obtain a copy of the License at
    
              http://www.apache.org/licenses/LICENSE-2.0
    
           Unless required by applicable law or agreed to in writing, software
           distributed under the License is distributed on an "AS IS" BASIS,
           WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
           See the License for the specific language governing permissions and
           limitations under the License.
    
    -->
    <!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" resultMap="MessageResult">
        select ID, COMMAND, DESCRIPTION, CONTENT from MESSAGE where 1=1
      </select>
    
    </mapper>
  • 相关阅读:
    滚轮事件的防冒泡、阻止默认行为的代码(效果是:只让当前div滚动,连当前文档都不滚动的效果)
    js原生封装getClassName()方法-ie不支持getElementsByClassName,所以要自己实现获取类名为className的所有元素
    使用 RequireJS 优化 Web 应用前端
    javascript的页面加载及性能优化(兼容IE7)
    JavaScript中的this陷阱的最全收集--没有之一
    mysql 配置MHA
    mysql 在linux下的完整安装过程
    vue 开发系列(八) 动态表单开发
    vue 开发系列(七) 路由配置
    vue 开发系列(六) 企业微信整合
  • 原文地址:https://www.cnblogs.com/xkxf/p/7083209.html
Copyright © 2011-2022 走看看