首页 > 代码库 > MyBatis复习

MyBatis复习

 

一、helloworld

首先MyBatis的核心是SqlSessionFactory,MyBatis的一切操作都是基于SqlSessionFactory的,于是我的第一个目标就是创建SqlSessionFactory

SqlSessionFactory通过SqlSessionFactoryBuilder构建

SqlSessionFactoryBuilder有两种方式构建SqlSessionFactory

①、通过XML配置文件

  a.配置文件好放在类路径下。

  b.配置文件包含了MyBatis系统的核心设置,包括获取数据库连接实例的数据源、事务管理器以及事务的范围。

  流程:

    1、创建java project。

    2、导入jar包(主要是MyBatis核心包mybatis-3.2.3.jar 还有 mysql驱动)

    3、类路径下创建conf.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>
    <!-- 配置环境信息,default表示当前使用的环境 -->
    <environments default="development">
    <!-- 配置环境信息,id是唯一标识  这里只是配置了核心信息  environment元素体中包含对事务管理和连接池的环境配置 -->
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql:///mybatis" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <!-- 暂时没配置 mappers 元素是包含所有 mapper (映射器)的列表,这些 mapper的 XML 文件包含 SQL 代码和映射定义信息 -->
    <mappers>
    <!-- 映射文件的路径 -->
        <mapper resource="denzel/study/mybatis/model/userMapper.xml" />
    </mappers>
</configuration>

 

    4、数据库建表(听说mybatis有个插件可以自己建表,但是还没发现先这个整吧)

CREATE TABLE users(
    id INT(10) NOT NULL AUTO_INCREMENT,
    username VARCHAR(6),
    nickname VARCHAR(6),
    age INT(3),
    PRIMARY KEY(id) 
);

INSERT INTO users VALUES(NULL,sunwukong,孙悟空,20);

 

    5、创建于表对应的类

package denzel.study.mybatis.model;

public class User {
    private int id;
    private String name;
    private String nickname;
    private int age;

    public User() {
    }

    public User(String name, String nickname, int age) {
        super();
        this.name = name;
        this.nickname = nickname;
        this.age = age;
    }

    public User(int id, String name, String nickname, int age) {
        super();
        this.id = id;
        this.name = name;
        this.nickname = nickname;
        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 String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", nickname=" + nickname
                + ", age=" + age + "]";
    }

}

    6、创建类的映射文件和实体类放在一个包下边

<?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="denzel.study.mybatis.model.UserMapper">

<!-- parameterType 参数类型,resultTyoe 返回值类型,select标签中写的是sql语句 和jdbc相同只不过占位符换成#{id} -->
    <select id="getUserById" parameterType="int" resultType="denzel.study.mybatis.model.User">
        select * from users where id = #{id}
    </select>
</mapper>

 

    7、编写测试类

package denzel.study.mybatis.test;

import java.io.IOException;
import java.io.Reader;

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 denzel.study.mybatis.model.User;

public class TestMyBatisHelloWorld {

    @Test
    public void testSelect() throws IOException {
        //配置文件名字
        String resource = "conf.xml";
        //通过名字获得Reader对象
        Reader reader = Resources.getResourceAsReader(resource);
        //通过Reader构建SqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //获得session
        SqlSession session = sessionFactory.openSession();
        
        try{
            //selectOne 查询数据 第一个参数 是调用的方法名 映射文件的 namespace+方法的id,第二个参数为 查询条件
            User user = session.selectOne("denzel.study.mybatis.model.UserMapper.getUserById", 1);
            //输出结果 User [id=1, name=null, nickname=孙悟空, age=20]
            System.out.println(user);
        }finally{
            session.close();
        }
    }

}

 

ok这就是一个最简单的helloworld