mybatis和springmybatis整理

Mybatis

MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。由於MyBatis 能夠對配置和原生Map使用簡單的 XML 或註解來對參數進行設置。java

這裏先用一個小的例子來過一邊mybatis的流程。mysql

基本必須的目錄結構以下: spring

mybatisMapper.xml算是用來自定義SQL語句,這也是Mybatis的相比於相似於解耦的操做。

更多的映射語句在www.w3cschool.cn/mybatis/f4u…中可自行查詢使用。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="main.java.user">
    <select id="user" resultType="user">select * from user</select>
</mapper>
複製代碼

在Mybatis.xml中配置Servlet映射和mapper數據庫

<?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">
            <!--環境的配置,在這裏選擇了JDBC-->
            <transactionManager type="JDBC"/>
            <!--數據庫鏈接池,配置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/user?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="username"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置映射的文件-->
    <mappers>
        <mapper resource="mapper/mybatisMapper.xml"/>
    </mappers>
</configuration>
複製代碼

實體類的編寫,以用戶爲例apache

import java.sql.Struct;
import java.util.HashMap;
import java.util.List;

public class user {

    private int uid;
    private int source;
    private List<user> list;

    public List<user> getList() {
        return list;
    }

    public void setSource(int source) {
        this.source = source;
    }

    public void setList(List<user> list) {
        this.list = list;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    @Override//在這裏重寫tostring不是必要的
    public String toString() {
        return "user{" +
                "uid=" + uid +
                ", source=" + source +
                '}';
    }
}

複製代碼

測試類,這裏用select語句查詢表中已提早存放入的信息bash

import com.mysql.cj.Session;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDome {
    @Test
    public void testDome1() throws IOException {
        // 初始化mybatis的配置環境
        String source="mybatis.xml";
        InputStream in= Resources.getResourceAsStream(source);
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
        //打開和數據庫之間的會話
        SqlSession session=factory.openSession();
        List<user> re=session.selectList("user");
        //存放結果
        for(user user: re){
            System.out.println(user);
        }

       session.close();//關閉會話
    }
}

複製代碼

Springmybatis

最關鍵的是採用了固有的類的org.mybatis.spring.support.SqlSessionDaoSupport的提供SqlSession,代碼以下:session

public  class BaseDao extends SqlSessionDaoSupport {
    //使用該父類方法中的sqlSessionFactory
    @Autowired   //自動裝配
    private SqlSessionFactory sqlSessionFactory;      
    @Autowired   
    //重寫含參構造方法(沒必要須)
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory)    
    {        
        super.setSqlSessionFactory(sqlSessionFactory);    
    }    
     //執行insert   
    public int insert(String statement, Object parameter) {    
        return getSqlSession().insert(statement, parameter);  
    }    
    //執行更新
    public int update(String statement) {    
        return getSqlSession().update(statement);  
    }  
    //執行刪除
    public int delete(String statement) {    
        return getSqlSession().delete(statement);  
    }    
    //獲取到connection對象,方便以後用的其餘操做
    public Connection getConnection() {    
        return getSqlSession().getConnection();  
    }
複製代碼

其次是用依賴注入的方法來將數據庫的連接的配置注入到類中(相關的配置信息是存放在datsource中的,也能夠經過xml來配置或者經過 ANNOTION來實現),以下:mybatis

<property name="dataSource" ref="dataSource" />
<property name="configLocation"  value="classpath:sqlMapConfig.xml"/>
複製代碼

二者的差異

1)SqlSessionFactory類在二者中都存在app

2)前者用SqlSessionFactoryBean生成SqlSessionFactory,後者則使用 SqlSessionFactoryBuilder

3)前者使用SqlSessionTemplate,後者使用SqlSession,實際上這二者差異不大,只是子類中的方法和父類中的方法的差異,也就是像不一樣名字的對象中的方法,其實是一致的

相關文章
相關標籤/搜索