MyBatis學(xué)習(xí)筆記(1)

框架

它是軟件開發(fā)中的一套解決方案衅金,框架封裝了很多細(xì)節(jié)氮唯,使開發(fā)者可以用極簡的方式實現(xiàn)功能姨伟,大大提高開發(fā)效率。

三層架構(gòu)圖

1565664044(1).jpg
  • 表現(xiàn)層:用于展示數(shù)據(jù)
  • 業(yè)務(wù)層:處理業(yè)務(wù)需求
  • 持久層:和數(shù)據(jù)庫交互

持久層技術(shù)的解決方案

  • JDBC技術(shù):Connection瞒渠、PreparedStatement技扼、ResultSet對象
  • Spring的JdbcTemplate:Spring中對JDBC技術(shù)的簡單封裝
  • Apache的DBUtils:很像JdbcTemplate淮摔,也是對JDBC的簡單封裝
    以上都不是框架,JDBC是規(guī)范,JdbcTemplate和DBUtils只是工具類造垛。
    由于傳統(tǒng)jdbc連接數(shù)據(jù)庫很繁瑣晰搀,所以mybatis應(yīng)運而生。

MyBatis框架介紹

  • mybatis框架是一個優(yōu)秀的基于java的持久層框架杆逗,它內(nèi)部封裝了jdbc鳞疲,使開發(fā)者只需要關(guān)注sql語句本身而不需要花費精力去處理加載驅(qū)動、創(chuàng)建連接悔橄、創(chuàng)建statement等繁雜的過程腺毫。
  • mybatis通過xml或者注解的方式將要執(zhí)行的各種statement配置起來,并通過java對象和statement中sql的動態(tài)參數(shù)進(jìn)行映射生成最終執(zhí)行的sql語句睛挚,最后由mybatis框架執(zhí)行sql并將結(jié)果映射為java對象并返回急黎。
  • ORM:Object Relational Mapping 對象關(guān)系映射。簡單的說就是把數(shù)據(jù)庫表和實體類以及實體類的屬性對應(yīng)起來委乌,讓我們操作實體類就可以實現(xiàn)操作數(shù)據(jù)庫表荣回。

MyBatis入門

  • 環(huán)境搭建
  1. 創(chuàng)建maven工程并導(dǎo)入坐標(biāo)
  2. 創(chuàng)建實體類和dao接口
  3. 創(chuàng)建mybatis的主配置文件 SqlMapConfig.xml
  4. 創(chuàng)建映射配置文件 IUserDao.xml
  • 環(huán)境搭建過程中的注意事項
  1. 創(chuàng)建IUserDao.xml和IUserDao.java時心软,名稱是為了和我們之前的知識保持一致壕吹。在mybatis中它把持久層的操作接口名稱和映射文件也叫做:Mapper删铃,所以IUserDao和IUserMapper是一樣的猎唁。
  2. 在idea中創(chuàng)建目錄的時候,它和包是不一樣的。包在創(chuàng)建的時候:com.baosight.dao是三級結(jié)構(gòu)帐偎,目錄在創(chuàng)建的時候:com.baosight.dao是一級目錄蛔屹。
  3. mybatis的映射配置文件位置必須和dao接口的包結(jié)構(gòu)相同。
  4. 映射配置文件的mapper標(biāo)簽namespace屬性的取值必須是dao接口的全限定類名漫贞。
  5. 映射配置文件的操作配置育叁,id屬性的取值必須是dao接口的方法名。
    當(dāng)我們遵從了第三仪际、四昵骤、五點之后肯适,我們在開發(fā)中就無須再寫dao的實現(xiàn)類框舔。
    附上代碼
    IUserDao.java
/**
 * Created by Charles on 2019/8/13
 * 用戶的持久層接口
 */
public interface IUserDao {
    /**
     * 查詢所有操作
     * @return
     */
    List<User> findAll();
}

User.java

/**
 * Created by Charles on 2019/8/13
 */
public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

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">
<!--mybatis的主配置文件-->
<configuration>
    <!--配置環(huán)境-->
    <environments default="mysql">
        <!--配置mysql的環(huán)境-->
        <environment id="mysql">
            <!--配置事務(wù)類型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置數(shù)據(jù)源(連接池)-->
            <dataSource type="POOLED">
                <!--配置連接數(shù)據(jù)庫的4個基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/springboot"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置樱溉,映射配置文件指的是每個dao獨立的配置文件-->
    <mappers>
        <mapper resource="com/baosight/dao/IUserDao.xml"/>
    </mappers>
</configuration>

IUserDao.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="com.baosight.dao.IUserDao">
    <!--配置查詢所有-->
    <select id="findAll" resultType="com.baosight.domain.User">
        select * from user
    </select>
</mapper>

測試文件MybatisTest.java

/**
 * Created by Charles on 2019/8/13
 * mybatis入門案例
 */
public class MybatisTest {

    public static void main(String[] args) throws Exception{
        //1.讀取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.創(chuàng)建SqlSessionFactory工廠
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工廠生產(chǎn)SqlSession對象
        SqlSession session = factory.openSession();
        //4.使用SqlSession創(chuàng)建Dao接口的代理對象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理對象執(zhí)行方法
        List<User> users = userDao.findAll();
        for (User user : users){
            System.out.println(user);
        }
        //6.釋放資源
        session.close();
        in.close();
    }
}

pom.xml

<?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.baosight</groupId>
    <artifactId>day01_01mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>

</project>

貼上navicat中user表里的截圖


image.png

附上項目運行的結(jié)果

User{id=20, username='陳奕迅', birthday=Mon Feb 07 17:33:33 CST 2011, sex='M', address='上海市楊浦區(qū)1234號'}
User{id=40, username='老王', birthday=Wed Feb 07 17:33:33 CST 2018, sex='M', address='上海市浦東新區(qū)1234號'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末停士,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恋技,更是在濱河造成了極大的恐慌,老刑警劉巖骄崩,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁赖,死亡現(xiàn)場離奇詭異,居然都是意外死亡宇弛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舅踪,“玉大人,你說我怎么就攤上這事悍赢』踽悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵赏迟,是天一觀的道長蠢棱。 經(jīng)常有香客問我,道長糕再,這世上最難降的妖魔是什么玉转? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蒿柳,結(jié)果婚禮上漩蟆,老公的妹妹穿的比我還像新娘。我一直安慰自己圾叼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布构挤。 她就那樣靜靜地躺著惕鼓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箱歧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天洒沦,我揣著相機與錄音价淌,去河邊找鬼申眼。 笑死蝉衣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姻氨。 我是一名探鬼主播剪验,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼功戚,長吁一口氣:“原來是場噩夢啊……” “哼似嗤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烁落,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伤塌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后每聪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體齿风,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡绑洛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年救斑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片真屯。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡脸候,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绑蔫,到底是詐尸還是另有隱情纪他,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布晾匠,位于F島的核電站茶袒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凉馆。R本人自食惡果不足惜薪寓,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一澜共、第九天 我趴在偏房一處隱蔽的房頂上張望向叉。 院中可真熱鬧,春花似錦嗦董、人聲如沸母谎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奇唤。三九已至,卻和暖如春匹摇,著一層夾襖步出監(jiān)牢的瞬間咬扇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工廊勃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留懈贺,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓坡垫,卻偏偏與公主長得像梭灿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冰悠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355