Mybatis總結之一

今日內容:Mybatis數據持久層的一種表現,在必定程度上,取代了jdbc。前端

MyBatis開發的大致步驟java

1.建maven......在pom.xml中進行配置添加Mybatis,junit測試jar包,添加鏈接mysql的數據庫包mysql

2.在resources中配置SqlMapperConfig.xml文件,它的做用是配置數據庫鏈接相關信息主要用於數據庫中不變的信息,另外裏面有個mappers標籤,再裏面有個userMapper.xml,裏面能夠有多個表sql

3.userMapper.xml主要用於一些變化的信息,主要是操做信息如增刪改查數據庫

4.建庫建表。apache

5.建一個bean包,依據數據庫中的表的字段來定義對應屬性的類(實體類、即數據存儲的模型),用於存儲數據庫中的內容,和數據庫的表對應,在必定程度上也和前端頁面對應。session

6.建一個dao包,定義個接口UserDao,裏面定義了一些抽象方法,主要是增刪改查等。mybatis

package cn.sjl.dao;
/**在UserDao接口中定義方法*/
import java.util.List;

import cn.sjl.bean.User;

public interface UserDao{
void insertUser(User user);
void updateUser(User user);
void deleteUserById(Integer id); //刪除對象 依據id
User selectUserById(Integer id); //查詢對象 依據id; 返回值爲User類數據類型
List<User> selectAll(); //查詢全部集合對象記錄裏全部的數據
}

 

7.同時在dao包中,定義一個實現UserDaoImpl類,裏面主要是實現類,實現接口中的抽象方法,如app

public class UserDaoImpl implements UserDao{

public void insertUser(User user) {

       //sqlSession(有點相似Connection)
SqlSession session=SqlSessionUtil.getSession(); //去工廠拿?再看看書關於SqlSession
session.insert("userDao.addUser",user); //找到固定節點並插入值(記錄對象)     ??看看書,並看看代碼底層方法
session.commit(); //手動提交
session.close(); //結束session會話
}
}

 

8.其中的共有的,不變的部分抽出來了,並用static修飾,即當類被加載時就能夠執行。框架

//語法結構等價於DBUtils

package cn.sjl.util;

import java.io.InputStream;

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

import cn.sjl.dao.UserDaoImpl;

public class SqlSessionUtil {
private static SqlSessionFactory ssf;
static {
//讀配置文件
InputStream in=UserDaoImpl.class.getClassLoader().getResourceAsStream("SqlMapperConfig.xml");
//SqlSessionFactory
ssf=new SqlSessionFactoryBuilder().build(in);//??10:52
}

//返回sqlSession對象
public static SqlSession getSession() {
    return ssf.openSession();
}

}

//看一下舊書和厚書;

 

 

9.編寫映射文件,以下面這個插入操做:

 <mapper namespace="userDao">
    <!-- 插入user對象 -->
    <!-- void insertUser(User user)  -->
    <!-- 1.insert表示定義insert語句的節點
         2.id表節點的名稱,值惟一
         3.parameterType表示定義的是參數的類型
         4.#{name}表示從user對象中取出name屬性值,
           給username字段賦值
     -->
    <insert id="insertUser" 
            parameterType="cn.sjl.bean.User">
        insert into t_user(
            username,password,phone,email
        ) values (
            #{name},#{password},#{phone},#{email}
        )

    </insert>

 

------------------------------------------------------------------------------------------------------

package test;

import org.junit.Test;

import cn.sjl.bean.User;
import cn.sjl.dao.UserDao;
import cn.sjl.dao.UserDaoImpl;

public class TestUser {

@Test
public void testInsert() {
UserDao userDao=new UserDaoImpl();
User user=new User();
user.setUsername("張三");
user.setPassword("146557");
user.setEmail("zhangsan@sjl.cn");
user.setPhone("153646646");
userDao.insertUser(user);
}

}

 

//單元測試,寫一點測試一點,不建議全部的都到最後再測試。
//多練習

//另外還有一種方法不用寫實現類,mybatis框架自動添加

##10.測試類中

public void testInsert(){
SqlSession session = 
SqlSessionUitl.getSession();

//經過getMapper獲取AddressDao的實現類對象
AddressDao addressDao = session.getMapper(AddressDao.class);
//namespace.id
Address address = new Address();
address.setProvince("北京市");
address.setCity("市轄區");
address.setArea("海淀區");
address.setUserAddress("中鼎大廈7層");
addressDao.insert(address);
//提交事務
session.commit();
//關閉session
session.close();
}

 
相關文章
相關標籤/搜索