1. 程式人生 > >mybatis學習筆記之——連線SQL server資料庫(IDEA)

mybatis學習筆記之——連線SQL server資料庫(IDEA)

我們新建一個普通的專案,File --> New --> Project -->Java --> Java EE。然後新建專案即可。

專案完成後我們新建一個conf資料夾,用來存放配置資訊,新建一個lib資料夾,用來存放jar包。

我們將mybatis的jar包,連線SQL server資料庫的sqljdbc的jar包,列印日誌的log4j的jar包以及測試相關的junit的jar包複製到lib資料夾下,然後將lib資料夾下的jar包加入到專案中。

將log4j的配置檔案放到conf資料夾下:

log4j.properties:

### 設定###
log4j.rootLogger = debug,stdout,D,E

### 輸出資訊到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 輸出DEBUG 級別以上的日誌到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 輸出ERROR 級別以上的日誌到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

在conf資料夾下增加mybatis的配置資訊檔案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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=mybatis"/>
                <property name="username" value="sa"/>
                <property name="password" value="sa123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 將我們寫好的sql對映檔案註冊到全域性配置檔案中 -->
    <mappers>
        <mapper resource="EmployeeMapper.xml"/>
    </mappers>
</configuration>

這個配置檔案中指定了我們要連線的資料庫為SQL server資料庫,還指定了我們要連線的資料庫名,使用者名稱,密碼。sql對映檔案是要在後面寫到這裡的,這裡已經寫出,後面再描述。

我們在資料庫中新建表tbl_employee,表結構如下:

然後我們在表中插入一條資料,這裡插入的是:

INSERT INTO tbl_employee VALUES(2,0,4);

然後我們編寫相關程式碼:

首先建立實體類Employee.java:

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String 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 + '\'' +
                '}';
    }
}

這裡的lastName和資料庫中的last_name是不相同的,會導致最後查詢出的last_name為空。

然後編寫相關介面EmployeeMapper:

public interface EmployeeMapper {
    public Employee getEmpById(Integer id);
}

然後我們在conf下增加一個配置檔案,用來進行sql對映EmployeeMapper.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:名稱空間;指定為介面的全類名
    id:唯一標識
    resultType:返回值型別
    #{id}:從傳遞過來的引數中取出id值
    -->
    <mapper namespace="com.test.mybatis.dao.EmployeeMapper">
    <select id="getEmpById" resultType="com.test.mybatis.bean.Employee">
        select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    </select>
</mapper>

這裡我們為last_name取別名為lastName,這樣我們就可以取到last_name的值了,並且在上面,我們已經將這個sql對映EmployeeMapper.xml檔案註冊到了全域性配置mybatis-config.xml檔案中。

最後我們編寫一下測試類MyBatisTest.java:

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物件
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        //2.獲取sqlSession物件
        SqlSession openSession = sqlSessionFactory.openSession();

        try{
            //3.獲取介面的實現類物件
            //會為介面自動建立一個代理物件,代理物件去執行增刪改查方法
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);

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

        }finally {
            openSession.close();
        }
    }
}
工程結構如下圖所示: 

 測試結果如下圖:

 我們通過控制檯輸出的類名,可以看出這裡會為介面自動建立一個代理物件,代理物件去執行增刪改查方法。

最後總結一下:

1.介面式程式設計。
     原生       Dao        ===》   DaoImpl
     mybatis  Mapper   ===》  xxMapper.xml

2.sqlSession代表和資料庫的一次會話,完成後需要將資源釋放。

3.sqlSession和connection一樣,都是非執行緒安全的。每次使用都應該去獲取新的物件,不要設定為成員變數。

4.mapper介面沒有實現類,但是mybatis會為這個介面生成一個代理物件(將介面和xml檔案繫結)。

5.兩個重要的配置檔案:
   mybatis的全域性配置檔案:包含資料庫連線池資訊,事務管理資訊等。系統執行環境資訊。
   SQL對映檔案:儲存了每一個SQL的語句對映資訊。通過此對映檔案將sql抽取出來。

 

注:此文章為【尚矽谷_MyBatis_入門到進階】學習筆記。原視訊中是Java程式碼,連線的資料庫是Mysql,開發工具為eclipse。因個人學習需求,此文章為Java程式碼,但是資料庫是SQL server,開發工具用的是IDEA。