初識 java MyBatis 框架

十年河東,十年河西,莫欺少年窮

學無止境,精益求精

MyBatis工作原理如下

0、現在MySQl數據庫 搞個庫並增加一張表,如下:

create database mybatis
go
use mybatis
go
CREATE TABLE users ( uid INT PRIMARY KEY, uname VARCHAR ( 20 ), uage INT NOT NULL )
go
insert into users(uid,uname,uage) values(1,'jack',22)
go
insert into users(uid,uname,uage) values(2,'msis',22)
go

1、新建java maven項目

 

 2、編輯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>com.one5a</groupId>
    <artifactId>Test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
View Code

添加了三個依賴,分別爲MySQL、myBatis核心庫,junit單元測試

3、resources中新增數據庫屬性文件db.properties及myBatis配置文件mybatis-config.xml

 

 db.properties 主要用於存儲數據庫配置信息,如下:

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username = root
password = chen1234

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>
    <!--引入外部配置文件        -->
    <properties resource="db.properties"/>
    <settings>
        <!--開啓全局緩存 默認true-->
        <setting name="cacheEnabled" value="true"/>
        <!--開啓全局懶加載 默認false-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--開啓關聯屬性懶加載 默認false-->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!--全局開啓駝峯映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 註冊UserMapper.xml  -->
    <mappers>
        <mapper resource="Mapper/UserMapper.xml"/>
    </mappers>
</configuration>
View Code

由於mybatis-config.xml 中引入了用戶配置文件 Mapper/UserMapper.xml,需要創建UserMapper.xml

resources中新增目錄Mapper,Mapper目錄下創建UserMapper.xml

 

 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">

<!--namespace=綁定一個指定的Dao/Mapper接口-->

<mapper namespace="com.one5a.model.User">
    <select id="getUserList" resultType="com.one5a.model.User">
    select * from users
  </select>
    <select id="getUserbyId" resultType="com.one5a.model.User" parameterType="int">
    select * from users where uid=#{id}
  </select>
</mapper>
View Code

 4、在main/java新建包 com.one5a.model並新增User類

package com.one5a.model;

public class User {
    private int uid;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    private String uname;

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    private  int uage;

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                '}';
    }
}
View Code

注意包名稱及Java類應該和UserMapper.XML中定義的一致,分別爲: com.one5a.model  、User

package com.one5a.model;

public class User {
    private int uid;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    private String uname;

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    private  int uage;

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                '}';
    }
}
View Code

5、書寫測試類

創建測試類  UnityTest

package com.one5a.test;

import com.one5a.model.User;
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;
import java.util.List;

public class UnityTest {
    @Test
    public  void  getUserList() throws IOException {
        String resource = "mybatis-config.xml";
        //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
        //InputStream is = Resources.getResourceAsStream(resource);
        //InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);

        InputStream is = Resources.getResourceAsStream(resource);
        //構建sqlSession的工廠  線程安全  建議使用單列模式
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //絕對不能將它作爲靜態對象使用,不可共享
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的標識字符串,
         * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值,
         * getUser是select標籤的id屬性值,通過select標籤的id屬性值就可以找到要執行的SQL
         */
        String statement = "com.one5a.model.User.getUserList";//映射sql的標識字符串
        //執行查詢返回一個唯一user對象的sql
        List<User> user = session.selectList(statement);
        for (int i = 0; i < user.size(); i++) {
            System.out.println(user.toString());
        }

    }

    @Test
    public  void  getUserbyId() throws IOException {
        String resource = "mybatis-config.xml";
        //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
        //InputStream is = Resources.getResourceAsStream(resource);
        //InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);

        InputStream is =Resources.getResourceAsStream(resource);
        //構建sqlSession的工廠  線程安全  建議使用單列模式
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //絕對不能將它作爲靜態對象使用,不可共享
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的標識字符串,
         * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值,
         * getUser是select標籤的id屬性值,通過select標籤的id屬性值就可以找到要執行的SQL
         */
        String statement = "com.one5a.model.User.getUserbyId";//映射sql的標識字符串
        //執行查詢返回一個唯一user對象的sql
        User user = session.selectOne(statement,1);
        System.out.println(user);

    }
}
View Code

6、測試結果

 入門程序,不看也罷

@天才臥龍的博科人

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