zoukankan      html  css  js  c++  java
  • mybatis学习(二)——环境搭建

    开发环境搭建主要包括以下几步

    1、新建一个JAVA项目(可以只建一个文件夹)

     2、导入jar包

    log4j是一个日志包,可以不加,这里为了定位问题添加了该包,下面两个包必须需要。

    3、创建数据库

    CREATE TABLE `hotel` (
      `id` int(11) NOT NULL,
      `hotel_name` varchar(20) NOT NULL,
      `hotel_address` varchar(20) DEFAULT NULL,
      `price` int(11) NOT NULL,
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    数据库如下,手动添加了一些数据

    4、配置全局配置文件mybatis_config.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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库源信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/spring_mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="pjf520" />
                </dataSource>
            </environment>
        </environments>
    </configuration>

    这里配置了数据库连接信息,后面还需要配置包含sql的xml文件位置

    5、编写JAVA代码实体类

    这里以查询一个酒店列表为例,那么实体类就是酒店

    package com.pjf.mybatis.po;
    
    public class Hotel {
        private int hotelId;
        private String hotelName;
        private String hotelAddress;
        private int price;
    
        public int getHotelId() {
            return hotelId;
        }
    
        public void setHotelId(int hotelId) {
            this.hotelId = hotelId;
        }
    
        public String getHotelName() {
            return hotelName;
        }
    
        public void setHotelName(String hotelName) {
            this.hotelName = hotelName;
        }
    
        public String getHotelAddress() {
            return hotelAddress;
        }
    
        public void setHotelAddress(String hotelAddress) {
            this.hotelAddress = hotelAddress;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Hotel [hotelId=" + hotelId + ", hotelName=" + hotelName + ", hotelAddress=" + hotelAddress + ", price="
                    + price + "]";
        }
    
    }

    为了方便打印,重写了一个toString方法。

    6、编写sql映射文件hotelMapper.xml

    <?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="com.pjf.mybatis.mapper.hotelMapper">
    
       <select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
        select * from hotel where id=#{id}
       </select>        
    </mapper>

    这里sql语句比较简单,就是根据id查询酒店记录

    这时候就需要在配置文件mybatis_config.xml中注册hotelMapper.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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库源信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/spring_mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="tuniu520" />
                </dataSource>
            </environment>
        </environments>
        
        <!-- 配置包含sql语句的xml文件 -->
        <mappers>
        <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
        </mappers>
    </configuration>

    7、编写测试类

    package com.pjf.mybatis.po;
    
    import java.io.IOException;
    import java.io.InputStream;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    public class TestHotel {
        @Test
        public void test() throws IOException {
            // 根据配置文件创建一个SqlSessionFactory对象
            String resource = "mybatis_config.xml";
            InputStream is = Resources.getResourceAsStream(resource);
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
    
            // 根据SqlSessionFactory对象来对数据库进行增删改查
            // 一个SqlSession代表一次和数据库的会话,需要打开和关闭
            SqlSession session = sessionFactory.openSession();
            // 根据sql的唯一标识(namespace+sql的id)来通知mybatis来执行哪个sql语句
            String statement = "com.pjf.mybatis.mapper.hotelMapper.getHotel";
    
            // 执行查询返回一个hotel对象
            // 这里selectOne有两个参数,第一个是sql的唯一标识,告知mybatis执行哪个sql,
            // 后面一个是sql的动态参数,这里是查询id=1001的酒店
            Hotel hotel = session.selectOne(statement, 1001);
            System.out.println(hotel);
    
            // sqlsession用完关闭回话
            session.close();
        }
    }

    8、查看结果

    运用了log4j可以看到查询的sql语句,方便了我们定位。但我们发现虽然查询出了结果,但是hotelName值和hotelAddress值没取到,这是因为hotel类中定义的变量和数据库中的表的字段不一致导致的。

    可以修改sql印刷文件中的语句为(当然后面mybatis针对这种问题有其他的解决办法)

    select id as hotelId,hotel_name as hotelName, hotel_address as hotelAddress, price from hotel where id=#{id}

    就可以看到正确结果了

  • 相关阅读:
    人在年轻的时候,最需要的能力--吃药的能力
    查分单词-Python
    关于NLP算法工程师的几点思考
    找出只出现一次的数字-Python
    最长连续序列
    二叉树中的最大路径和-Python
    windows:查找端口所对应的进程
    vue项目路由模式为history时打包后部署在nginx 配置访问
    用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
    mysql误删root用户
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/7661953.html
Copyright © 2011-2022 走看看