MyBatis 入门必备:如何配置和运行第一个程序

MyBatis 入门必备:如何配置和运行第一个程序

  1. 开发框架与中间件
  2. 2013.04.15
  3. 5 min read

MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。2013 年 11 月迁移到 Github。

iBATIS 一词来源于“internet”和“abatis”的组合,是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)

MyBatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

Mybatis 快速入门

准备开发环境

  1. 创建测试项目,普通的 Java 项目或者 JavaWeb 项目均可

  2. 添加相应的 jar 包

    • Mybatis 核心包 mybatis-3.30.jar
    • 数据库驱动 mysql-connector-5.1.19-bin.jar
  3. 创建数据库和表

create table `t_user` (
  `user_id` int(11) not null auto_increment,
  `f_name` varchar(255) default null,
  `f_age` int(11) default null,
  primary key (`user_id`)
) engine=InnoDB default charset=utf-8
insert into  t_user(f_name,f_age) values('CODE',26);
insert into  t_user(f_name,f_age) values('array',26);

使用 Mybatis 查询表中数据

  1. 添加 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>
    <!-- Continue going here -->
    <!--给Bean起别名,就不用每次都要写一长串的全类名了-->
    <typeAliases>
        <typeAlias type="com.code.bean.UserBean" alias="UserBean"/>
    </typeAliases>
    <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/mybatis"/>
                <property name="username" value="code"/>
                <property name="password" value="8998"/>
            </dataSource>
        </environment>
    </environments>

</configuration>
  1. 建立实体 Bean
package com.code.bean;
public class UserBean {
    private int id;
    private String name;
    private int age;
    public UserBean() {
    }
    public UserBean(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public UserBean(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "UserBean{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  1. 建立操作数据表的 sql 映射文件 userMapper.xml
  • 创建一个包 com.code.mapper,用来放映射文件和 xxxMapper.java
  • UserMapper.java
package com.code.mapper;
import com.code.bean.UserBean;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
	   //@Param为参数设置别名,在select语句的就用写 #{0} 了,而是 #{userID}
	   UserBean getUserById(@Param("userID")int userID);
}
  • userMapper.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,
    这样就能够保证namespace的值是唯一的
-->
<mapper namespace="com.code.mapper.UserMapper">
    <!--
        这里是当数据表字段名和实体类属性名不一致时将他们一一对应
    -->
    <resultMap id="userBean" type="UserBean">
        <id property="id" column="user_id" javaType="int"/>
        <result property="name" column="f_name" javaType="string"/>
        <result property="age" column="f_age" javaType="int"/>
    </resultMap>
    <!--
         根据id查询得到一个user对象
     -->
    <!--
         在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复.
         这里的id是UserMapper接口中的方法名
         使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
         resultType="com.code.bean.UserBean"就表示将查询结果封装成一个UserBean类的对象返回
         如果实体类属性和数据表字段名字不相同,则通过resultMap指定
    -->
    <select id="getUserById" resultMap="userBean" parameterType="int">
        select * from t_user where user_id = #{userID}
    </select>
</mapper>
  1. 在配置文件中注册映射文件
  • 在 mybaits-config.xml 文件中添加
<mappers>
        <!--
            注册userMapper.xml文件,
            userMapper.xml位于com.code.mapper这个包下,
            所以resource写成com/code/mapper/userMapper.xml
        -->
	<mapper resource="com/code/mapper/userMapper.xml"/>
</mappers>
  1. 新建一个 DBUtil.java 工具类,位于 com.code.util 包下
package com.code.util;

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 java.io.IOException;
import java.io.InputStream;

public class DBUtil {
    private static SqlSessionFactory sqlSessionFactory;

    //初始化
    static {
        InputStream in = null;
        try {
            //加载配置文件
            in = Resources.getResourceAsStream("mybatis-config.xml");
            //得到sqlSessionFactory工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static SqlSession getSession() {
        //返回能执行映射文件中sql的sqlSession
        return sqlSessionFactory.openSession();
    }
}

  1. 编写测试代码,执行 select 操作
package com.code.test;

import com.code.bean.UserBean;
import com.code.mapper.UserMapper;
import com.code.util.DBUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class Test1 {
    @Test
    public void testGetUserById(){
        SqlSession sqlSession = DBUtil.getSession();
        UserMapper userMapper =  sqlSession.getMapper(UserMapper.class);
        UserBean userBean = userMapper.getUserById(1);
        System.out.println(userBean);
    }
}
Java 学习笔记