准备

IntelliJ IDEA :2017.2.5

JDK:1.8.+

MyBatis:org.mybatis 3.4.5

mysql : 5.1.38

步骤

▶数据库准备

  1. 创建一个数据库 mybatis,并连接上 mybatis 数据库。

  2. 在 mybatis 数据库新建数据表 users

    CREATE TABLE users
    (
      id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID' ,
      userName VARCHAR(32) COMMENT '用户名',
      nickName VARCHAR(32) COMMENT '昵称',
      node VARCHAR(128) COMMENT '备注'
    );
    
  3. 往 users 表中插入测试数据

    INSERT INTO users (userName, nickName, node) VALUES ('zhangsan','张三','永远的张三');
    INSERT INTO users (userName, nickName, node) VALUES ('lisi','李四','永远的李四');
    INSERT INTO users (userName, nickName, node) VALUES ('wangwu','王五','永远的王五');
    INSERT INTO users (userName, nickName, node) VALUES ('laowang','老王','隔壁家的');
    

▶搭建一个Maven工程MyBatisDemo

▶POM.xml文件导入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lin</groupId>
    <artifactId>MyBatisDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--mysql数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

</project>

▶编写 JavaBean 类

public class User {
    private Integer id;
    private String userName;
    private String nickName;
    private String node;

    public User(Integer id, String userName, String nickName, String node) {
        this.id = id;
        this.userName = userName;
        this.nickName = nickName;
        this.node = node;
    }

    public User() {
    }

    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 getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getNode() {
        return node;
    }

    public void setNode(String node) {
        this.node = node;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                ", node='" + node + '\'' +
                '}';
    }
}

▶编写接口类 UserMapper

public interface UserMapper {
    /**
     * 根据ID 查找用户
     * @param id 
     * @return
     */
    User findUserById(Integer id);
}

▶编写接口映射文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lin.mapper.UserMapper">

    <select id="findUserById" resultType="com.lin.bean.User">
        SELECT
            id,
            userName,
            nickName,
            node
        FROM users
        WHERE id = #{id}
    </select>
</mapper>

▶配置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>
    <environments default="mysql">
        <!--数据库连接驱动配置-->
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false"/>
                <property name="username" value="scott"/>
                <property name="password" value="tiger"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--注册 映射配置文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

注意:该文件中主要是连接数据库的信息,驱动,url,用户名,密码以及映射文件,将我们写好的sql映射文件(UserMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 。

▶配置log4j.properties 日志打印

log4j.rootLogger=DEBUG ,stdout
log4j.logger.com.queen = DEBUG
log4j.logger.org.mybatis=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{HH:mm:ss} [%t] [%F]-[%p] %m%n

提示:主要记录MyBatis运行过程中产生的一些日志信息。MyBatis 会自动加载 log4j.properties 日志配置。

▶最后编写测试类

package com.lin.test;

import com.lin.bean.User;
import com.lin.mapper.UserMapper;
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;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisTest {

    @Test
    public void testFindUserById() throws IOException{
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = factory.openSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.findUserById(3);
        System.out.println(user);
        session.commit();
        session.commit();
    }
}

▶测试运行一下,查找ID是3的数据,日志详细过程完美的打印在控制台

21:41:36 [main] [LogFactory.java]-[DEBUG] Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
21:41:37 [main] [JdbcTransaction.java]-[DEBUG] Opening JDBC Connection
21:41:37 [main] [JdbcTransaction.java]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@20bd8be5]
21:41:37 [main] [BaseJdbcLogger.java]-[DEBUG] ==>  Preparing: SELECT id, userName, nickName, node FROM users WHERE id = ? 
21:41:37 [main] [BaseJdbcLogger.java]-[DEBUG] ==> Parameters: 3(Integer)
21:41:37 [main] [BaseJdbcLogger.java]-[DEBUG] <==      Total: 1
User{id=3, userName='lisi', nickName='李四', node='永远的李四'}

我们会很明显的发现这是一个完整的JDBC执行过程,打开连接,创建连接,将事务设置成false,准备SQL,SQL赋参数,执行SQL,事务提交,关闭连接,返回连接。其实MyBatis就是将这些动作封装,对于开发人员只需要关注SQL。

总结

MyBatis整个调用过程:

  1. 根据全局配置文件,SqlSessionFactoryBuilder得到SqlSessionFactory

    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//指定全局配置文件路径
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//加载配置文件实例化SqlSessionFactory
    
  2. 使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查

    SqlSession session = factory.openSession();//获取一次会话
    
  3. 使用sql的唯一标志来告诉MyBatis执行哪个sql,sql都是保存在sql映射文件中的。

    UserMapper mapper = session.getMapper(UserMapper.class);//获取指定的映射文件
    User user = mapper.findUserById(3);//执行指定的 sql
    System.out.println(user);
    
  4. 一个sqlSession就是代表和数据库的一次会话,用完关闭

    session.commit();//提交会话
    session.commit();//结束会话(一次连接,一次会话,用完即关)
    

至此,关于MyBatis教程之简单的入门介绍完毕。只做了简单的查询动作。

results matching ""

    No results matching ""