MyBatis的簡單搭建

MyBatis介紹

Mybatis是一個優秀的基本Java開發的持久層框架,通過xml和註解的方式將要執行的各種statemant配置起來實現持久化,採用ORM(對象關係映射)思想解決實體對象和數據庫映射的問題,屏蔽jdbc api 底層訪問細節,使程序員更多關注sql語句本身,而不是加載驅動、創建連接、創建 statement 等繁雜的過程。

MyBatis的簡單搭建

創建maven工程引入MyBatis座標

maven工程結構如下:
在這裏插入圖片描述
在pom.xml中引入MyBatis座標

<?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>org.mybities</groupId>
    <artifactId>MyBaties</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>
</project>

編寫user實體類

package org.mybatis.entity;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

   //....省略各個屬性的get和set方法
   
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", birthday=" + birthday
                + ", sex=" + sex + ", address="
                + address + "]";
    }
}

編寫UserMapper接口

package org.mybatis.mapper;

import org.mybatis.entity.User;

import java.util.List;

public interface UserMapper {
    List<User> findAll();
}

編輯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="org.mybatis.mapper.UserMapper">
    <!-- 配置查詢所有操作 -->
    <select id="findAll" resultType="org.mybatis.entity.User">
      select * from user
    </select>
</mapper>

編輯SqlMapConfig.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>
   <!-- 配置 mybatis 的環境 -->
   <environments default="mysql">
       <!-- 配置 mysql 的環境 -->
       <environment id="mysql">
           <!-- 配置事務的類型 -->
           <transactionManager type="JDBC"></transactionManager>
           <!-- 配置連接數據庫的信息:用的是數據源(連接池) -->
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/ee01"/>
               <property name="username" value="root"/>
               <property name="password" value="root"/>
           </dataSource>
       </environment>
   </environments>
   <!-- 告知 mybatis 映射配置的位置 -->
   <mappers>
       <mapper resource="org/mybatis/mapper/UserMapper.xml"/>
   </mappers>
</configuration>

準備數據庫再寫測試類

CREATE DATABASE ee01;
USE ee01;
CREATE TABLE user(
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL,
    birthday DATE DEFAULT NULL,
    sex VARCHAR(20) DEFAULT NULL,
    address VARCHAR(20) DEFAULT null
); 
INSERT INTO user (username,birthday, sex, address) VALUES('TOM',19980102,'woman','qqwedsa');
package org.mybatis.test;

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 org.mybatis.entity.User;
import org.mybatis.mapper.UserMapper;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {

    @Test
    public void testSelectAll() {
        InputStream in = null;
        SqlSession session = null;
        try {
            //1、讀取配置文件
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2、創建SqlSessionFactory的構建者
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //3、使用構建者創建工廠對象 SqlSessionFactory
            SqlSessionFactory factory = builder.build(in);
            //4、使用SqlSessionFactory創建SqlSession對象
            session = factory.openSession();
            //5、使用SqlSession創建dao的代理接口對象
            UserMapper mapper = session.getMapper(UserMapper.class);
            //6.使用代理對象執行查詢所有方法
            List<User> users = mapper.findAll();
            for (User user : users) {
                System.out.println(user);
            }
        } catch (IOException e) {
            System.err.println("SqlMapConfig.xml配置文件不存在");
        }finally {
            //關閉會話和流
            if(session != null){
                session.close();
            }
            if(in != null){
                try {
                    in.close();
                } catch (IOException e) {
                    System.err.println("InputStream in 流關閉異常");
                }
            }
        }
    }
}

測試運行結果如下:
在這裏插入圖片描述
運行成功,Mybatis開發環境搭建完成。

用註解方式實現持久化

MyBatis還給我們提供了用註解得的方法實現持久化,我們只需在上面例子中修改UserMapper.java和SqlMapConfig.xml就可以實現和寫UserMapper.xml配置一樣的功能了。
UserMapper.java

package org.mybatis.mapper;

import org.apache.ibatis.annotations.Select;
import org.mybatis.entity.User;
import java.util.List;

public interface UserMapper {
    @Select("select * from user")
    List<User> findAll();
}

SqlMapConfig.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>
    <!-- 配置 mybatis 的環境 -->
    <environments default="mysql">
        <!-- 配置 mysql 的環境 -->
        <environment id="mysql">
            <!-- 配置事務的類型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置連接數據庫的信息:用的是數據源(連接池) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ee01"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
        <!--
        <mapper resource="org/mybatis/mapper/UserMapper.xml"/>
        -->
        <mapper class="org.mybatis.mapper.UserMapper"/>
    </mappers>
</configuration>

在使用基於註解的 Mybatis 配置時,請先移除 xml 的映射配置(UserMapper.xml)再補充回去。
顯然註解的方式,在業務Sql比較簡單時是比較方便的,但在Sql比較複雜時候還是寫配置文件的方式好點。在實際開發中兩種都是會用到的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章