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}

就可以看到正确结果了

 

posted @ 2017-10-13 16:49  梦天幻  阅读(880)  评论(0编辑  收藏  举报