mybatis学习笔记(一)

参考书籍

原著:Java Persistence with MyBatis 3. 作者:K.Siva Prasad Reddy.
译著:Java持久化之Mybatis3. 作者:娄娈.

mybatisDemo:基于myeclipse10,mysql,jdk1.7,mybatis3.2.2

项目结构

mybatis学习笔记(一)_第1张图片
项目结构

程序源码

v1.0

步骤:

  • 新建表 STUDENTS,插入样本数据
  • 新建一个 Java 项目,将 MyBatis-3.2.2.jar 添加到 classpath 中
  • 新建建 MyBatisSqlSessionFactory 单例模式类
  • 新建映射器 StudentMapper 接口和 StudentService 类
  • 新建一个 JUnit 测试类来测试 StudentService

1.新建表 STUDENTS,插入样本数据

使用以下 SQL 脚本往 MySQL 数据库中创建 STUDENTS 表插入样本数据:

CREATE TABLE STUDENTS
(
  stud_id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  email varchar(50) NOT NULL,
  dob date DEFAULT NULL,
  PRIMARY KEY (stud_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
/*Sample Data for the students table */
  insert into students(stud_id,name,email,dob)
 values (1,'Student1','[email protected]','1983-06-25');
  insert into students(stud_id,name,email,dob)
 values (2,'Student2','[email protected]','1983-06-25');

2.新建一个 Java Maven项目,修改pom.xml文件为:


    4.0.0
    look
    mybatisDemo
    0.0.1-SNAPSHOT
    
        
            org.mybatis
            mybatis
            3.2.2
        
        
            mysql
            mysql-connector-java
            5.1.22
            runtime
        
        
            org.slf4j
            slf4j-api
            1.7.5
        
        
            org.slf4j
            slf4j-log4j12
            1.7.5
            runtime
        
        
            log4j
            log4j
            1.2.17
            runtime
        
        
            junit
            junit
            4.11
            test
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.7
                    1.7
                
            
        
    

3. 新建 log4j.properties 文件,添加到 classpath 中

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n

4.新建 mybatis-config.xml 和映射器 StudentMapper.xml 配置文件

    1. 创建 MyBatis 的主要配置文件 mybatis-config.xml,其中包括数据库连接信息,类型别名等等,然后将其加到 classpath 中;



    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
    

    1. 创建 SQL 映射器 XML 配置文件 StudentMapper.xml 并且将它放在 com.look.mapper 包中



    
        
        
        
        
    
    
    
    
        INSERT INTO
        STUDENTS(STUD_ID,NAME,EMAIL,DOB)
        VALUES(#{studId
        },#{name},#{email},#{dob})
    

上述的 StudentMapper,xml 文件包含的映射的 SQL 语句可以通过 ID 加上名空间调用。

5.新建 MyBatisSqlSessionFactory 单例类

新建 MyBatisSqlSessionFactory.java 类文件,实例化它,使其持有一个 SqlSessionFactory 单例对象:

package com.look.util;

import java.io.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;

public class MyBatisSqlSessionFactory {
    private static SqlSessionFactory sqlSessionFactory;

    public static SqlSessionFactory getSqlSessionFactory() {
        if (sqlSessionFactory == null) {
            InputStream inputStream;
            try {
                inputStream = Resources
                        .getResourceAsStream("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder()
                        .build(inputStream);
            } catch (IOException e) {
                throw new RuntimeException(e.getCause());
            }
        }
        return sqlSessionFactory;
    }

    public static SqlSession openSession() {
        return getSqlSessionFactory().openSession();
    }
}

上述的代码段中,我们创建了一个 SqlSessionFactory 对象,我们将使用它来获得 SqlSession 对象和执行映射的SQL 语句。

6.新建 StudentMapper 接口和 StudentService 类

创建一个 StudentMapper 接口,其定义的方法名和在 Mapper XML 配置文件定义的 SQL 映射语句名称相同;
在创建一个 StudentService.java 类,包含了一些业务操作的实现。

  • 首先, 创建 JavaBean Student.java

  • 创建映射器 Mapper 接口 StudentMapper.java 其方法签名和 StudentMapper.xml 中定义的 SQL 映射定义名相同

  • 现在创建 StudentService.java 实现对表 STUDENTS 的数据库操作

  • 你也可以通过不通过 Mapper 接口执行映射的 SQL 语句。

Student student = (Student)sqlSession.
selectOne("com.look.mapper.StudentMapper.findStudentById",
studId);

然而,使用 Mapper 接口是最佳实践,我们可以以类型安全的方式调用映射的 SQL 语句。

7.新建一个 JUnit 测试类来测试 StudentService27

新建一个 JUnit 测试类测试 StudentSerivce.java 中定义的方法

8. 它是怎么工作的

首先,我们配置了 MyBatis 最主要的配置文件-mybatis-config.xml,里面包含了 JDBC 连接参数;配置了映射器Mapper XML 配置文件文件,里面包含了 SQL 语句的映射。

我们使用 mybatis-config.xml 内的信息创建了 SqlSessionFactory 对象。每个数据库环境应该就一个
SqlSessionFactory 对象实例,所以我们使用了单例模式只创建一个 SqlSessionFactory 实例。

我们创建了一个映射器 Mapper 接口-StudentMapper,其定义的方法签名和在 StudentMapper.xml 中定义的完全一样(即映射器 Mapper 接口中的方法名跟 StudentMapper.xml 中的 id 的值相同)。注意 StudentMapper.xml 中namespace 的值被设置成 com.mybatis3.mappers.StudentMapper,是 StudentMapper 接口的完全限定名。这使我们可以使用接口来调用映射的 SQL 语句。

在 StudentService.java 中,我们在每一个方法中创建了一个新的 SqlSession,并在方法功能完成后关闭
SqlSession。每一个线程应该有它自己的 SqlSession 实例。 SqlSession 对象实例不是线程安全的,并且不被共享。所以 SqlSession 的作用域最好就是其所在方法的作用域。从 Web 应用程序角度上看,SqlSession 应该存在于 request 级别作用域上。

你可能感兴趣的:(mybatis学习笔记(一))