Mybatis入門

目的:入門,熟悉mybatis是什么,怎么用。

1. 初識Mybatis

1.1 Mybatis介紹

MyBatis是一個支持普通SQL查詢,存儲過程高級映射的優(yōu)秀基于Java的持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄。
與hibernate相比:
特點:
1.開源持久層框架
2.靈活--sql語句與代碼分離,面向配置的編程
3.良好支持復(fù)雜數(shù)據(jù)映射,動態(tài)sql
4.學(xué)習(xí)成本低


2. Mybatis快速入門

2.0 Jar包下載

mybatis官網(wǎng)下載
mybaits里面jar包分為兩類,一類是mybatis本身 jar,另一類是依賴的ajr.
mybatis文檔查看
mybatis-spring

2.1開發(fā)環(huán)境搭建

1.創(chuàng)建測試項目:

工程結(jié)構(gòu)

2.添加相應(yīng)的包:

Mybatis包--ehcache可以不要

3.創(chuàng)建數(shù)據(jù)庫和表

 CREATE database mybatis;
  USE  mybatis;
  CREATE TABLE users (
  id int(11) NOT NULL AUTO_INCREMENT,
  NAME varchar(20) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
INSERT INTO users(NAME, age) VALUES('Demo', 27);
INSERT INTO users(NAME, age) VALUES('Collin', 28);

??:此數(shù)據(jù)表中編碼為latin1,默認(rèn)編碼---未做修改,一般設(shè)置為utf-8;

2.2 使用MyBatis查詢表中的數(shù)據(jù)

0.mybatis工作流程

1.讀取配置文件
2.生成sqlSessionFactory
3.建立sqlSession
4.調(diào)用mybatis提供的API
5.查詢mapper配置文件
6.返回結(jié)果
7.關(guān)閉sqlSession

1.添加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">
<!-- 設(shè)置 -->
<configuration>
    <!-- 和spring整合之后environments配置將廢除 -->
    <!--配置環(huán)境 -->
    <environments default="development">
        <!-- 環(huán)境變量 -->
        <environment id="development">
            <!-- 事務(wù)管理 -->
            <transactionManager type="JDBC" />
            <!--配置數(shù)據(jù)庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- 注冊userMapper.xml文件, userMapper.xml位于cn.it.my.mapping這個包下,
    所以resource寫成cn/it/my/mapping/userMapper.xml -->
    <mappers>
        <!-- 映射器 -->
        <mapper resource="cn/it/my/mapping/userMapper.xml" />
    </mappers>
</configuration>

2.定義表所對應(yīng)的實體類

Users.java

package cn.it.my.domain;

public class User {

    private int id;
    private String name;
    private int age;

    public User() {
        super();
    }

    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 int getAge() {
        return age;
    }

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

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

3.定義操作users表的sql映射文件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,namespace的值習(xí)慣上設(shè)置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的
    例如namespace="cn.it.my.mapping.userMapper"就是cn.it.my.mapping(包名)+userMapper(userMapper.xml文件去除后綴)
 -->
<mapper namespace="cn.it.my.mapping.userMapper">
    <!-- 在select標(biāo)簽中編寫查詢的SQL語句, 設(shè)置select標(biāo)簽的id屬性為findUserById,id屬性值必須是唯一的,不能夠重復(fù)
        使用parameterType屬性指明查詢時使用的參數(shù)類型,resultType屬性指明查詢返回的結(jié)果集類型
         resultType="cn.it.my.domain.User"就表示將查詢結(jié)果封裝成一個User類的對象返回
         
        User類就是users表所對應(yīng)的實體類
    -->
    <!-- 根據(jù)id查詢得到一個user對象-->
    <select id="findUserById" parameterType="int" 
        resultType="cn.it.my.domain.User">
        select * from users where id=#{id}
    </select>
</mapper>

4.在config.xml文件中注冊userMapper.xml文件

<!-- 注冊userMapper.xml文件, userMapper.xml位于cn.it.my.mapping這個包下,
    所以resource寫成cn/it/my/mapping/userMapper.xml -->
<mappers>
    <!-- 映射器 -->
    <mapper resource="cn/it/my/mapping/userMapper.xml" />
</mappers>

5.測試代碼:

public class Test {
    public static void main(String[] args) throws Exception {
        // 第一步:根據(jù)mytais的配置創(chuàng)建SqlSessionFactory------加載mybatis的配置文件
        String resource = "mybatis.xml";
        // 使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)
        // InputStream is =
        // Test.class.getClassLoader().getResourceAsStream(resource);
        InputStream is = Resources.getResourceAsStream(resource);
        // 根據(jù),mybatis配置創(chuàng)建sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)
        // Reader reader = Resources.getResourceAsReader(resource);
        // 構(gòu)建sqlSession的工廠
        // SqlSessionFactory sessionFactory = new
        // SqlSessionFactoryBuilder().build(reader);
        // 第二步:根據(jù)SqlSessionFactory創(chuàng)建能執(zhí)行映射文件中sql的sqlSession
        SqlSession sqlSession = sessionFactory.openSession();
        // 第三步:通過SqlSession操作數(shù)據(jù)庫(根據(jù)用戶id查詢一條記錄)
        /**
         * 通過sqlSession查詢用戶信息(發(fā)起數(shù)據(jù)庫操作)
         * 第一個參數(shù)statement:指定mapper映射文件中statement的id,指定時需要前邊加上statement所屬的命名空間
         * 第二個參數(shù)parameter。指定輸入?yún)?shù)
         * selectOne返回時單條記錄,如果色了傳統(tǒng)返回多條記錄(list集合),使用selectOne會報錯
         * 根據(jù)映射文件中的resultType指定輸出類型
         * 
         * 映射sql的標(biāo)識字符串,
         * cn.it.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,
         * findUserById是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL
         */
        // 映射sql的標(biāo)識字符串
        // String statement = "cn.it.my.mapping.userMapper.getUser";
        // 執(zhí)行查詢返回一個唯一user對象的sql
        // User user = sqlSession.selectOne(statement, 1);
        User user = sqlSession.selectOne("cn.it.my.mapping.userMapper.findUserById", 3);
        // 第四步:遍歷查詢結(jié)果
        System.out.println(user);
        /*
         * selectlist,查詢集合
         * 查詢用戶列表
         * selectList表示查詢一個結(jié)果集(可以是多條。也可以是一條)
         */
        List<User> list= sqlSession.selectList("test.findUserList","張");
        // 第五步:
        sqlSession.close();
    }
}

mybatis核心組件:
1.SqlSessionFactoryBuilder:構(gòu)造器,根據(jù)配置信息或者代碼來生成
2 SqlSessionFactory(工廠接口)
3.SqlSessionFactory:依賴工廠來生成SqlSession(會話)
4.SqlSession:既可以返送sql去執(zhí)行并返回結(jié)果,又可以獲取Mapper的接口
5.SqlMapper:由Java接口和XML文件共同構(gòu)成,需要給出對應(yīng)的sql和映射規(guī)則,負(fù)責(zé)發(fā)送sql去執(zhí)行并返回結(jié)果
開發(fā)規(guī)范:
1.在mapper.xml中namespace等于mapper接口地址
2.mapper.java接口中的方法名和mapper.xml中statement的id一致
3.mapper.java接口中的方法輸入?yún)?shù)類型和mapper.xml中statement的parameterType指定的類型一致
4.mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型一致
??作用:
????定義參數(shù)類型
????描述緩存
????描述SQL語句
????定義查詢結(jié)果和POJO的映射關(guān)系

6.執(zhí)行結(jié)果:

執(zhí)行結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,241評論 0 4
  • 由于之前我們已經(jīng)有了hibernate的基礎(chǔ),所以這里很多細(xì)節(jié)就不再提及。 一、基本架構(gòu) 這里從網(wǎng)絡(luò)上找了幾張my...
    yjaal閱讀 1,623評論 0 7
  • Java數(shù)據(jù)持久化之mybatis 一. mybatis簡介 1.1 原始的JDBC操作: Java 通過 Jav...
    小Q逛逛閱讀 5,408評論 0 16
  • MyBatis是一個可以自定義SQL、存儲過程和高級映射的持久層框架。MyBatis 摒除了大部分的JDBC代碼、...
    七寸知架構(gòu)閱讀 6,824評論 6 56
  • 2017年10月24日,如是家人李建英,第70天種種子日志 發(fā)心:我今不是為了我個人而聞思修行,而是為了六道輪回一...
    若嘉閱讀 141評論 0 2

友情鏈接更多精彩內(nèi)容