1. 程式人生 > >MyBatis原理簡介和小試牛刀

MyBatis原理簡介和小試牛刀

batis dao 讀取 區別 ons 目的 ktr als config

在我看來mybatis的原理與hibernate在某些方面是一致的,先回顧一下Hibernate原理(原理主要上是要掌握並理解下列六個對象:

Hibernate中重要的六個對象:

Configuration:讀取配置文件(主要指hibernate-config.xml)和啟動hibernate

SessionFactory:負責初始化Hibernate

Session接口:負責持久化對象的CRUD的操作

Transaction:負責事務(opensession或getCurrentSession)

補充說明:

opensession和getCurrentSession的主要區別是:openSession 每一次獲得的是一個全新的session對象,而getCurrentSession獲得的是與當前線程綁定的session對象

Query接口和Criteria接口:負責執行各種數據庫查詢

MyBatis和Hibernate的共同點都是通過SqlSessionFactory創建Session,以此達到Session操作數據庫的目的。

MyBatis小試牛刀步驟:

一、導包

導包:
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar


其中
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
這兩個是必須的缺一不可

二、寫主配置文件:

<?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"/>
<!--數據源 但是在整合中不再需要這樣寫了,具體可參照ssm整合和ajax這篇文章--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/crm"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <mappers> <!-- 主要讀取sql映射文件 --> <mapper resource="com/blog/entity/Mapper.xml"/> </mappers> </configuration>

三、建立實體類

package com.blog.entity;

public class User {
   
    private Integer Id;
    private String userName;
    private String password;
    public Integer getId() {
        return Id;
    }
    public void setId(Integer id) {
        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;
    }
    
}

四、寫Dao

package com.blog.dao;

import java.io.FileNotFoundException;
import java.io.FileReader;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class BaseDao {
     //BaseDao的目的在於實現類通過繼承該類而達到操作數據庫的目的
    public static SqlSessionFactory getSSF(){
        String resource="D:\\eclipse_maven\\workspace\\MyBatis\\src\\mybatis.conf.xml";
        FileReader fr;
        try {
            fr = new FileReader(resource);

            SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(fr);
            
            return ssf;
        
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        
            return null;
        }
        
        
    }
  //查的方面可以通過BaseDao調用它,增刪改對數據庫中的數據庫有改動則不能使用它,
//即便使用了,也達不到相應的效果
public static SqlSession getSqlSession(){ return getSSF().openSession(); } //增刪改需要它,凡是對數據庫有改動的都需要提交事務,提交事務要將opensession設置為true,true為提交事務,
、 //opensession通常默認是false
public static SqlSession getSqlSession(boolean autoCommit){ return getSSF().openSession(autoCommit); } }

五、寫映射文件

<?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="Mapper">
//namespace:命名空間
//parameterType:參數類型
//resultMap:返回值類型
<select id="selectById" parameterType="Integer" resultType="com.blog.entity.User"> select * from `user1` where Id=#{Id} </select>

</mapper>

六、寫接口

package com.blog.dao;

import com.blog.entity.User;

public interface UserDao {
	//查詢
	User selectById(Integer Id);
	
	
	
}

七、寫接口的實現類

package com.blog.dao.impl;

import com.blog.dao.BaseDao;
import com.blog.dao.UserDao;
import com.blog.entity.User;

public class UserDaoImpl extends BaseDao implements UserDao {
         
	@Override
	public User selectById(Integer Id) {
		/**
          通過getSqlSession()調用增insert()、delete()、update()、selectOne()、
           selectList()等方法,它們都有共同的兩個參數,一個對應Mappper.xml文件中的nam
          espace和id,一定要對應,否則會報錯。
                  */ return BaseDao.getSqlSession().selectOne("Mapper.selectById",Id); } public static void main(String[] args) { User user=new UserDaoImpl().selectById(1); System.out.println(user); } }

八、運行實現類中的main方法(測試)

MyBatis原理簡介和小試牛刀