天天看點

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

在學習Mybatis時我們應該先知道為什麼要學習mybatis,mybatis有什麼,mybatis能做什麼?

        MyBatis 是一款優秀的持久層架構,它支援定制化 SQL、存儲過程以及進階映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設定參數以及擷取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生資訊,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。相對Hibernate和Apache OJB等“一站式”ORM解決方案而言,Mybatis 是一種“半自動化”的ORM實作。

 在此可以引出一個問題什麼是半自動化的ORM呢?

  • ORM(對象關系映射):利用對象和資料庫之間映射的資料,把Java程式中的對象持久化到資料庫中的表内。
  • MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類
  • 這裡的“半自動化”,是相對 Hibernate 等提供了全面的資料庫封裝機制的“全自動化”ORM 實作而言,“全自動”ORM 實作了 POJO 和資料庫表之間的映射,以及 SQL 的自動生成和執行。而 MyBatis 的着力點,則在于 POJO 與 SQL 之間的映射關系。也就是說,MyBatis 并不會為程式員在運作期自動生成 SQL 執行。具體的 SQL 需要程式員編寫,然後通過映射配置檔案,将 SQL 所需的參數,以及傳回的結果字段映射到指定 POJO。使用 ibatis 提供的 ORM 機制,對業務邏輯實作人員而言,面對的是純粹的 Java 對象,這一層與通過 Hibernate 實作 ORM 而言基本一緻,而對于具體的資料操作,Hibernate會自動生成 SQL 語句,而 MyBatis 則要求開發者編寫具體的 SQL 語句。相對 Hibernate 等“全自動”ORM 機制而言,ibatis 以 SQL 開發的工作量和資料庫移植性上的讓步,為系統設計提供了更大的自由空間。作為“全自動”ORM 實作的一種有益補充,MyBatis 的出現顯得别具意義。
  • ------------------------以上文字部分來自其他路徑 https://www.w3cschool.cn/mybatis 有需要可自行查詢--------------------------------
  • 我們可以再說一下mybatis的優缺點:
  •  優點:1.簡單易學
  •             2.消除了大量的JDBC過多的代碼
  •             3.良好的性能
  •             3.友好的Spring內建支援
  •             4.友好的第三方緩存類庫內建支援
  • 缺點:1、編寫SQL語句時工作量很大,尤其是字段多、關聯表多時,更是如此。
  •             2、SQL語句依賴于資料庫,導緻資料庫移植性差,不能更換資料庫。
  •             3、緩存機制不佳

    -------mybatis連接配接資料庫進行操作資料-------

        mybatis的核心概念中含有:核心對象、核心配置檔案、sql映射檔案。

一、導入jar包

以下是項目的結構

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

如果使用myeclipse等工具注意jar包放在lib檔案裡

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

要下載下傳的jar包(官方):

mysql驅動 jar包:https://dev.mysql.com/downloads/connector/j/

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

junit測試 jar包:https://junit.org/junit4/

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

mybatis jar包:https://github.com/mybatis

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

log4j日志檔案 jar包:http://logging.apache.org/log4j/2.x/download.html

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類
<dependencies>
        <dependency>
            <!--日志檔案所用的jar包-->
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <!--mysql驅動包-->
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.28</version>
        </dependency>
        <dependency>
            <!--mybatisjar包-->
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <!--測試所用的jar包-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>
           
log4j所用代碼可以從官網找到
           
log4j.rootLogger=DEBUG,CONSOLE,file  
log4j.logger.cn.smbms.dao=debug  
log4j.logger.com.ibatis=debug  
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug  
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug  
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug  
log4j.logger.java.sql.Connection=debug  
log4j.logger.java.sql.Statement=debug  
log4j.logger.java.sql.PreparedStatement=debug  
log4j.logger.java.sql.ResultSet=debug  
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug  
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
log4j.appender.Threshold=error  
log4j.appender.CONSOLE.Target=System.out  
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n  
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender  
log4j.appender.file.DatePattern=yyyy-MM-dd  
log4j.appender.file.File=log.log  
log4j.appender.file.Append=true  
log4j.appender.file.Threshold=error  
log4j.appender.file.layout=org.apache.log4j.PatternLayout  
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n  
log4j.logger.com.opensymphony.xwork2=error
           

建立database.properties檔案

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

二、

以下是我項目的結構

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類

如果使用myeclipse等工具注意jar包放在lib檔案裡

對應資料表建立一個pojo實體對象

MyBatis如何連接配接資料庫    -------mybatis連接配接資料庫進行操作資料-------一、導入jar包二、對應資料表建立一個pojo實體對象三、建立mybatis的配置檔案mybatis-config.xml四、建立上面的TuserMapper.xml(Sql映射wenj)        測試類
public class Tuser {
    private Integer id;
    private String userName,password,nickName;

    @Override
    public String toString() {
        return "Tuser{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }

    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 String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
}
           

三、建立mybatis的配置檔案mybatis-config.xml

<configuration>
    <!--調用database.properties檔案-->
    <properties resource="database.properties"></properties>
    <!--選擇log4j日志存儲檔案-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--類型别名-->
    <typeAliases>
        <typeAlias alias="Tuser" type="cn.jdbc.entity.Tuser"></typeAlias>
    </typeAliases>
   <environments default="dvr">
       <environment id="dvr">
           <!--事務管理器  選擇jdbc擷取事務-->
           <transactionManager type="JDBC"></transactionManager>
           <!--資料源有POOLED 和UNPOLED可選擇是否使用資料源-->
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"></property>
               <property name="url" value="${jdbc.url}"></property>
               <property name="username" value="${jdbc.username}"></property>
               <property name="password" value="${jdbc.password}"></property>
           </dataSource>
       </environment>
   </environments>
    <mappers>
        <!--mappers是映射器,把mapper檔案加入到配置檔案中-->
        <mapper resource="cn/jdbc/dao/TuserMapper.xml"></mapper>
    </mappers>
</configuration>
           

四、建立上面的TuserMapper.xml(Sql映射wenj)

<mapper namespace="cn.jdbc.dao.TuserMapper">
    <!--避免因為資料庫與程式中變量出現不同名,會出現差誤。是以使用resultMap-->
    <resultMap id="userMap" type="Tuser">
        <id property="id" column="id"></id>
        <result property="userName" column="user_name"></result>
        <result property="password" column="password"></result>
        <result property="nickName"  column="nick_name"></result>
    </resultMap>
           

        測試類

@Test
    public void QueryCount() {
        String source="mybatis-config.xml";
        int count=0;
        SqlSession sqlSession=null;

        try {
            //1 擷取mybatis-config.xml的輸入流
            InputStream is = Resources.getResourceAsStream(source);
            //2 建立一個工廠,完成對配置檔案的讀取
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
            //3 建立sqlSession,開啟工廠
            sqlSession=sqlSessionFactory.openSession();
            //4 根據放入工廠的sql語句執行不同的方法
            count=sqlSession.selectOne("com.bdqn.dao.TUserMapper.queryCount");
           
        System.out.println(count);
           

} catch (IOException e) { e.printStackTrace(); }finally { sqlSession.close(); } }}

@Test
        public void queryALLTest(){
            SqlSession sqlSession=null;

            try {
           
             //1 擷取mybatis-config.xml的輸入流
            InputStream is = Resources.getResourceAsStream(source);
            //2 建立一個工廠,完成對配置檔案的讀取
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
            //3 建立sqlSession,開啟工廠
            sqlSession=sqlSessionFactory.openSession();
            //4 根據放入工廠的sql語句執行不同的方法
           

以上測試類的方法有很多的備援代碼,我們可以抽取備援的代碼建一個工具類:

          注意: 導的包要注意

package cn.jdbc.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;

    static {
        try {
            InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession createSqlSession(){
        return sqlSessionFactory.openSession();
    }

    public static void closeSqlSession(SqlSession sqlSession){
        if(sqlSession!=null){
            sqlSession.close();
        }
    }
}
           

首先建立一個TuserMapper接口,注意要和TuserMapper.xml同名

public interface TuserMapper {  
    //查詢全部使用者資訊  
    List<Name> queryAll();  
  
    //模糊查詢,查詢通過使用者名查詢使用者資訊  
    List<Name> getUserListByUserName(String name);  
           
//修改資料  
    public Integer updateTuser(Name name);  
           
//删除使用者資料  
    Integer deleteTuserByid(Integer id);  
  
    //插入資料  
    Integer addTuser(Name name);  
}  
           

        測試類

//擷取全部使用者資訊  
       public void queryAll(){  
               SqlSession sqlSession=null; 
               sqlSession=MybatisUtil.createSqlSession();  
               //第一種方法  通過全限定名擷取資訊  
             //  List<Tuser> n=sqlSession.selectList("cn.jdbc.dao.TuserTest.queryAll");  
               //第二種方法  通過接口傳回資訊引入映射檔案中  
               List<Name> n=sqlSession.getMapper(TuserMapper.class).queryAll();  
               if(n!=null){  
                   for (Name tuser : n) {  
                       System.out.println(tuser);  
                   }  
               }  
   }  
           
//添加  
   public void addTuser(){  
       SqlSession sqlSession=null;  
       Tuser user=new Tuser();
       user.setUserName("admin");
           
       user.setPassword("121212");
           
       user.setNickName("mingming");
       int rows=0;  
  
       sqlSession = MybatisUtil.createSqlSession();  
       rows=sqlSession.getMapper(TuserMapper.class).addTuser(name);  
       sqlSession.commit();  
       if(rows>0){  
           System.out.println("添加成功");  
       }else{  
           System.out.println("添加失敗");  
       }  
       MybatisUtil.closeSqlSession(sqlSession);  
   }  
           
//修改  
  public void testUpdateTuser(){  
      SqlSession sqlSession=null; 

           
       Tuser user=new Tuser();
       user.setUserName("admin33");
           
       user.setPassword("00000");
           
       user.setId(002);  
           
     user.setNickName("ming");
           
//删除  
   public void testDeletTuserByid(){  
       SqlSession sqlSession=null;  
       int delete=0;  
       sqlSession = MybatisUtil.createSqlSession();  
       delete=sqlSession.getMapper(TuserMapper.class).deleteTuserByid(1);  
       sqlSession.commit();  
       if(delete>0){  
           System.out.println("删除成功");  
       }else{  
           System.out.println("删除失敗");  
       }  
       MybatisUtil.closeSqlSession(sqlSession);  
   }  
           

    此文是筆者初學乍練,準備不足之作,如有錯誤,歡迎向筆者提出,以避免筆者誤導其他讀者。

繼續閱讀