1. 程式人生 > 其它 >使用mybatis連線資料庫--針對小白

使用mybatis連線資料庫--針對小白

實現mybatis連線資料庫的步驟:

1.建表

2.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.cqust</groupId>
  <artifactId>ch02-動態代理</artifactId>
  <version>1.0-SNAPSHOT</version>

 


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>



    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
  </dependencies>

  <build>

    <resources>
      <resource>
        <!--指定去哪拷貝-->
        <directory>src/main/java</directory>
        <includes>
          <!--指定拷貝什麼檔案-->
          <include>**/*.xml</include>
            <include>**/*.properties</include>
        </includes>
      </resource>
      <!--當配置了src/main/java下的就不會拷貝resource下的檔案了所以還需要配置一下-->

    </resources>

  </build>

</project>

3.建立實體類在domain包下

package com.cqust.domain;

/**
 *實體類屬性要求和表中的名字一致,型別也一致
 */
public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;

    public Dept(Integer deptno, String dname, String loc) {
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }

    public Integer getDeptno() {
        return deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + '\'' +
                ", loc='" + loc + '\'' +
                '}';
    }
}

4.建立dao介面

package com.cqust.dao;

import com.cqust.domain.Dept;

import java.util.List;

/**
 * 定義訪問資料庫的方法,增刪改查
 */
public interface DeptDao {
    public List<Dept> selectDept();
    public int insertDept(Dept dept);
    public int deleteDept(Integer deptno);
    public int updateDept(Dept dept);




}

5.建立mybatis配置檔案
sql對映檔案,寫sql語句的,一個表一個sql對映檔案,在介面所在的目錄下
檔名和介面一致

<?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.cqust.dao.DeptDao">
    <!--sql對映檔案寫sql語句的
        namespace:介面的全限定名稱
        id:執行sql的唯一標識
        resultType:結果型別,是sql語句執行後得到resultSet,遍歷陣列得到
        每個java物件的型別
    -->


    <select id="selectDept" resultType="com.cqust.domain.Dept">
        select deptno,dname,loc from dept
    </select>
    <insert id="insertDept">
        insert into dept (deptno,dname,loc) values (#{deptno},#{dname},#{loc})
    </insert>
    <delete id="deleteDept">
        delete from dept where deptno = #{deptno}
    </delete>
    <update id="updateDept">
        update dept set dname = #{dname},loc=#{loc} where deptno = #{deptno}
    </update>




</mapper>

6.建立主配置檔案:
一個專案一個主配置檔案,提供資料庫連線資訊,和sql對映檔案的資訊

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

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <environments default="myenv"><!--default值為一個env的id-->
        <environment id="myenv">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/cqust_db2"/>
                <property name="username" value="root"/>
                <property name="password" value="hch1"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/cqust/dao/DeptDao.xml"/>
        <!--一個mapper標籤指定一個sql對映檔案
            路徑從類路徑開始classes
        -->
    </mappers>
</configuration>
<!--mybatis的主配置檔案:定義了資料庫連線資訊,sql對映檔案位置資訊。-->

7.將建立SqlSession進行了封裝

package com.cqust.util;

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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    static {
        String config = "mybatis.xml";
        InputStream in = null;
        try {
            in = Resources.getResourceAsStream(config);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
         sqlSessionFactory =  sqlSessionFactoryBuilder.build(in);
    }
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        if (sqlSessionFactory != null){
            sqlSession = sqlSessionFactory.openSession(true);
        }
        return sqlSession;

    }
}

8.測試類:

package com.cqust;

import com.cqust.dao.DeptDao;
import com.cqust.domain.Dept;
import com.cqust.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MyTest {
    @Test
    public void testSelectDept(){
        SqlSession sqlSession =  MyBatisUtil.getSqlSession();
        DeptDao deptDao =  sqlSession.getMapper(DeptDao.class);
        System.out.println("==="+deptDao);//org.apache.ibatis.binding.MapperProxy@a86356
        List<Dept> deptList =  deptDao.selectDept();
        for (Dept dept : deptList) {
            System.out.println(dept);
        }
        sqlSession.close();

    }

9.查詢結果:

工程結構:

總結:整個專案需要注意的小知識點!!!

(1).如果xml檔案在執行時沒有或者找不到,看是不是沒有配置外掛

<resource>
  <!--指定去哪拷貝-->
  <directory>src/main/java</directory>
  <includes>
    <!--指定拷貝什麼檔案-->
    <include>**/*.xml</include>
      <include>**/*.properties</include>
  </includes>
</resource>
<!--當配置了src/main/java下的就不會拷貝resource下的檔案了所以還需要配置一下-->

如果沒有配置可能會存在找不到xml,可以先在target目錄中找一下,如果很多方法都試過還是不行

直接暴力複製貼上就行。把工程下的xml檔案複製到target目錄下的指定位置。

(2).有兩個xml檔案一個在classes下,一個在,dao下,這是比較容易出錯的地方。

(3).DeptDao deptDao = sqlSession.getMapper(DeptDao.class);

這裡我們直接獲取到代理物件來執行方法,介面的實現類交給mybatis來做,這裡直接使用就可以了,不用關心底層原理。