欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatis学习笔记(一)

程序员文章站 2022-05-23 23:53:42
...

Mybatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。

MyBatis学习笔记(一)

1.查询客户


在实际开发中,查询操作通常都会涉及单条数据的精确查询,以及多条数据的模糊查询。下面使用Mybatis框架来实现这两种查询。

1.1 在mysql数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个t_customer表,同时预先插入几条数据。SQL语句如下:

//创建一个名为mybatis的数据库
CREATE DATABASE mybatis;
//使用mybatis数据库
USE mybatis;
//创建一个名称为t_customer的表
CREATE TABLE t_customer(
id int(32) PRIMARY KEY AUTO_INCRENMENT,
username varchar(50),
jobs varchar(50),
phone varchar(16)
);
//预先插入3条数据
INSERT INTO t_customer VALUES ('1','joy','doctor','13745874578');
INSERT INTO t_customer VALUES ('2','jack','teacher','13521210112');
INSERT INTO t_customer VALUES ('3','tom','worker','15179405961');

完成上述操作后,数据库t_customer表中数据如下:

MyBatis学习笔记(一)

1.2 在Eclipse中创建一个名为WebTest的Web项目,将Mybatis的核心JAR包以及MySQL数据的驱动JAR一同添加到项目的的lib目录下:

MyBatis学习笔记(一)

1.3由于mybatis默认使用log4j日志,所以需要在src目录下创建log4j.properties文件,文件内容如下:

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.itheima=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

1.4 在src目录下,创建一个com.webtest.po包,在该包下创建持久化类Customer

package com.webtest.po;
/**
 * 客户持久化类
 * */
public class Customer {
    private Integer id;         //主键id
    private String username;    //客户名称
    private String jobs;        //职业
    private String phone;       //电话
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getJobs() {
        return jobs;
    }
    public void setJobs(String jobs) {
        this.jobs = jobs;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString(){
        return "Customer [id=" + id +", username="+username+", jobs="+jobs+", phone="+phone +"]";
    }

}

1.5 在src目录下,创建一个com.webtest.mapper包,在包中创建映射文件CustomerMapper.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">
    <!-- namespace 表示命名空间 -->
    <mapper namespace="com.webtest.mapper.CustomerMapper">
        <!-- 根据客户编号获取用户信息 -->
        <select id="findCustomerById" parameterType="Integer" resultType="com.webtest.po.Customer">
            select * from t_customer where id = #{id}
        </select>    
     </mapper>

在定义的SQL语句中,”#{}”相当于一个占位符,而”#{id}”表示该占位符等待接收的参数名称为id。

1.6 在src目录下,创建mybatis的核心配置文件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>
        <!-- 1.配置环境,默认的环境id为mysql -->
        <environments default="mysql">
            <!-- 1.2配置id 为mysql的数据库 -->
            <environment id="mysql">
                <!--使用JDBC的事务管理 -->
                <transactionManager type="JDBC"></transactionManager>
                <!--数据库连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
        <!--2.配置Mapper的位置 -->
        <mappers>
            <mapper resource="com/webtest/mapper/CustomerMapper.xml"/>
        </mappers>
    </configuration>

1.7 在src目录下,创建一个com.webtest.test包,在该包下编写测试类MybatisTest,代码如下:

package com.webtest.test;
import java.io.InputStream;
import com.webtest.po.Customer;
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 MybatisTest {
    /**
     * 根据客户标号查询客户信息
     * 
     * */
    @Test
    public void findCustomerByIdTest() throws Exception{

        String resource = "mybatis-config.xml";     //1.读取配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);      
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    //2.根据配置文件构建SqlSessionFactory
        SqlSession sqlSession = sqlSessionFactory.openSession();        //3.通过SqlSessionFactory创建SqlSession
        Customer customer = sqlSession.selectOne("com.webtest.mapper.CustomerMapper.findCustomerById",1); //4.SqlSession执行配置文件中定义的SQL,并返回映射结果
        System.out.println(customer.toString());  //打印输出结果
        sqlSession.close();     //5.关闭SqlSession
    }

}

使用JUnit4测试执行findCustomerById()方法后,控制台输出结果,可以看出,使用Mybatis框架已经成功从Mysql数据库中查询了id为1的客户信息。

MyBatis学习笔记(一)