2019-08-01MyBatis操作數(shù)據(jù)庫(kù)(使用XML文件方式區(qū)別于JDBC方式)

本次環(huán)境MySQL5.7.20+MyBatis3.4.1+JDK9.0罗洗,用到的插件有:


image

1.創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)mybatis和表格tbl_employee:

CREATE DATABASE mybatis DEFAULT CHARSET utf8; 

USE mybatis;
CREATE TABLE tbl_employee1(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(255),
gender CHAR(1),
email VARCHAR(255)
);

2.創(chuàng)建一個(gè)MyBatis java工程,編寫與數(shù)據(jù)庫(kù)中對(duì)應(yīng)字段的Employee類:

package com.atguigu.mybatis.bean;

import org.apache.ibatis.type.Alias;

@Alias("emp")
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    
    
    
    public Employee() {
        super();
    }
    
    
    public Employee(Integer id, String lastName, String email, String gender) {
        super();
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }


    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
    }
    

}

3.創(chuàng)建EmployeeMapper接口,添加增刪改查方法钢猛,此接口中的方法可以與映射到xml文件

package com.atguigu.mybatis.dao;

import com.atguigu.mybatis.bean.Employee;

public interface EmployeeMapper {
    //查詢
    public Employee getEmpById(Integer id);
    //插入
    public Long addEmp(Employee employee);
    //修改
    public boolean updateEmp(Employee employee);
    //刪除
    public void deleteEmpById(Integer id);

}

4.創(chuàng)建dbconfig.properties文件,存放的是JDBC信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://10.0.0.40:3306/mybatis
jdbc.username=chendan
jdbc.password=123456

5.創(chuàng)建mybatis-config.xml主配置文件伙菜,定義了數(shù)據(jù)庫(kù)相關(guān)信息

<?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="dbconfig.properties"></properties>   
    
    <settings>
    
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    
    </settings>
    
    <typeAliases> 
            <!--  typeAlias type="com.atguigu.mybatis.bean.Employee"  alias="emp"/>-->
            <package name="com.atguigu.mybatis.bean"/>
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="test" />
            <dataSource type="POOLED">
                <property name="driver" value="${orcl.driver}" />
                <property name="url" value="${orcl.url}" />
                <property name="username" value="${orcl.username}" />
                <property name="password" value="${orcl.password}" />
            </dataSource>
        </environment>
    </environments>
    
    <databaseIdProvider type="DB_VENDOR">
        <property name="MySQL" value="mysql"/>
        <property name="SQL Server" value="sql server"/>
    </databaseIdProvider>
    
    
    <!-- 將我們寫好的sql映射文件(EmployeeMapper.xml)一定要注冊(cè)到全局配置文件(mybatis-config.xml)中 -->
    <mappers>
        <!-- <mapper resource="EmployeeMapper2.xml" /> -->
        <package name="com.atguigu.mybatis.dao"/>
    </mappers>
</configuration>

6.創(chuàng)建EmployeeMapper.xml映射文件,存放的主要是SQL語(yǔ)句:

<?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.atguigu.mybatis.dao.EmployeeMapper">

    <!--public Employee getEmpById(Integer id); 查詢操作 -->
    <select id="getEmpById"
        resultType="com.atguigu.mybatis.bean.Employee" databaseId="mysql">
        select * from tbl_employee1 where id = #{id}
    </select>
    <select id="getEmpById"
        resultType="com.atguigu.mybatis.bean.Employee" databaseId="oracle">
        select
        EMPLOYEE_ID id,LAST_NAME lastName,EMAIL email from employees where
        EMPLOYEE_ID = #{id}
    </select>
    <!-- 插入操作 public void addEmp(Employee employee);-->
    <insert id="addEmp" parameterType="com.atguigu.mybatis.bean.Employee">
        insert into tbl_employee1(last_name,email,gender) 
        values(#{lastName},#{email},#{gender})
    </insert>
    <!-- 更新操作 public void updateEmp(Employee employee); -->
    <update id="updateEmp">
        update tbl_employee1
        set last_name=#{lastName},email=#{email},gender=#{gender}
        where id=#{id}
    </update> 
    <!-- 刪除操作   public void deleteEmpById(Integer id);-->
    <delete id="deleteEmpById">
       delete from tbl_employee1 where id=#{id}
    </delete> 
</mapper>

7.創(chuàng)建測(cè)試類命迈,主要用于JUnit測(cè)試使用

package com.atguigu.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.lang.reflect.Field;

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 com.atguigu.mybatis.bean.Employee;
import com.atguigu.mybatis.dao.EmployeeMapper;



public class MyBatisTest {

    
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

    
     
    @Test
    public void test01() throws IOException {
        // 1贩绕、獲取sqlSessionFactory對(duì)象
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        // 2、獲取sqlSession對(duì)象
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            // 3壶愤、獲取接口的實(shí)現(xiàn)類對(duì)象
            // 會(huì)為接口自動(dòng)的創(chuàng)建一個(gè)代理對(duì)象淑倾,代理對(duì)象去執(zhí)行增刪改查方法
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmpById(1);

            System.out.println(mapper.getClass());
            System.out.println(employee);
        } finally {
            openSession.close();
        }

    }

    @Test
    public void test02() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            Employee employee = new Employee(null,"Jack","Jack@atguigu.com","0");
            mapper.addEmp(employee);
//          Employee employee = new Employee(5,"Jack","Jack@atguigu.com","1");
//          boolean isupdate = mapper.updateEmp(employee);
//          System.out.println(isupdate);
//          mapper.deleteEmpById(4);
            openSession.commit(); 

        } finally {
            openSession.close();
        }

    }

}

運(yùn)行結(jié)果如下:
1、執(zhí)行查詢操作,可以看到數(shù)據(jù)庫(kù)中只有一條數(shù)據(jù):

Employee employee = mapper.getEmpById(1);
System.out.println(employee);

Employee [id=1, lastName=Jack, email=Jack@atguigu.com, gender=0]

查詢成功

2征椒、執(zhí)行增加一條數(shù)據(jù)娇哆,執(zhí)行查詢結(jié)果如下:

            Employee employee = new Employee(null,"Peter","Peter@atguigu.com","1");
            mapper.addEmp(employee);
            openSession.commit(); 
            Employee employee = mapper.getEmpById(2);
            System.out.println(employee);
            

DEBUG 08-01 15:11:13,512 <==    Updates: 1  (BaseJdbcLogger.java:145) 
Employee [id=2, lastName=Peter, email=Peter@atguigu.com, gender=1]

添加成功

3.修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),執(zhí)行結(jié)果如下:

            Employee employee = new Employee(2,"Jack","Jack@atguigu.com","1");
            boolean isupdate = mapper.updateEmp(employee);
            openSession.commit(); 


            Employee employee = mapper.getEmpById(2);
            System.out.println(employee);
                
DEBUG 08-01 15:18:02,625 <==    Updates: 1  (BaseJdbcLogger.java:145) 
Employee [id=2, lastName=Jack, email=Jack@atguigu.com, gender=1]

修改成功

4.刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)勃救,執(zhí)行結(jié)果如下:

            mapper.deleteEmpById(2);
            openSession.commit(); 
            
            Employee employee = mapper.getEmpById(2);
            System.out.println(employee);
            


DEBUG 08-01 15:23:09,434 <==    Updates: 1  (BaseJdbcLogger.java:145) 
null
查詢數(shù)據(jù)刪除成功

總結(jié):MyBatis操作數(shù)據(jù)庫(kù)簡(jiǎn)單快捷碍讨,將代碼與sql語(yǔ)句分離出來,非常好蒙秒!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勃黍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晕讲,更是在濱河造成了極大的恐慌覆获,老刑警劉巖马澈,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弄息,居然都是意外死亡痊班,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門疑枯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辩块,“玉大人蛔六,你說我怎么就攤上這事荆永。” “怎么了国章?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵具钥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我液兽,道長(zhǎng)骂删,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任四啰,我火速辦了婚禮宁玫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柑晒。我一直安慰自己欧瘪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布匙赞。 她就那樣靜靜地躺著佛掖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涌庭。 梳的紋絲不亂的頭發(fā)上芥被,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音坐榆,去河邊找鬼拴魄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛席镀,可吹牛的內(nèi)容都是我干的匹中。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼愉昆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼职员!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起跛溉,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤焊切,失蹤者是張志新(化名)和其女友劉穎扮授,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體专肪,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刹勃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚎尤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荔仁。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芽死,靈堂內(nèi)的尸體忽然破棺而出乏梁,到底是詐尸還是另有隱情,我是刑警寧澤关贵,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布遇骑,位于F島的核電站,受9級(jí)特大地震影響揖曾,放射性物質(zhì)發(fā)生泄漏落萎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一炭剪、第九天 我趴在偏房一處隱蔽的房頂上張望练链。 院中可真熱鬧,春花似錦奴拦、人聲如沸媒鼓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隶糕。三九已至,卻和暖如春站玄,著一層夾襖步出監(jiān)牢的瞬間枚驻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工株旷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留再登,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓晾剖,卻偏偏與公主長(zhǎng)得像锉矢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子齿尽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 沽损? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,523評(píng)論 0 4
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)循头,會(huì)觸發(fā)此異常绵估。 O...
    我想起個(gè)好名字閱讀 5,320評(píng)論 0 9
  • MyBatis 理論篇 [TOC] 什么是MyBatis ?MyBatis是支持普通SQL查詢,存儲(chǔ)過程和高級(jí)映射...
    有_味閱讀 2,904評(píng)論 0 26
  • Mybatis介紹 MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache...
    day_Sunny閱讀 2,665評(píng)論 0 6
  • 一炎疆、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,746評(píng)論 0 10