學(xué)習(xí)了3種使用方式
案例鏈接(包含jar包): https://pan.baidu.com/s/1hykf9d2IEFoEPl8XlMWaqQ 提取碼: m342
方式二:
通過dao層去調(diào)用xml中的方法,跟方式一類似
步驟1:配置SqlMapConfig.xml和Car.xml文件身冬,和方式一完全一樣狸页,還有在com.hello.pojo下新建Car類
步驟2:新建com.hello.dao包并在里面新建一個(gè)CarDao接口和實(shí)現(xiàn)類CarDaoImpl
CarDao接口中有一些需要用到的增刪改查的未實(shí)現(xiàn)方法眷茁,比如
package com.hello.dao;
import java.util.List;
import com.hello.pojo.Car;
public interface CarDao {
// 根據(jù) id 查車
public Car findCarById(Integer id);
// 根據(jù) name 模糊查詢
public List<Car> findCarByName(String name);
}
實(shí)現(xiàn)類CarDaoImpl中上面那些方法的實(shí)現(xiàn)悦即,說是實(shí)現(xiàn)其實(shí)并不需要我們?nèi)プ鲈鰟h改查的操作斤斧,因?yàn)槲覀円呀?jīng)在Car.xml里面做好了這些操作厚宰,所以在CarDaoImpl中我們只需要調(diào)用Car.xml中的方法即可到踏。
package com.hello.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.hello.dao.CarDao;
import com.hello.pojo.Car;
public class CarDaoImpl implements CarDao {
private SqlSessionFactory factory;
public CarDaoImpl() {
super();
}
public CarDaoImpl(SqlSessionFactory factory) {
super();
this.factory = factory;
}
@Override
public Car findCarById(Integer id) {
// 獲取 SqlSession
SqlSession session = factory.openSession();
return session.selectOne("aa.findCarById", id);
}
@Override
public List<Car> findCarByName(String name) {
// 獲取 SqlSession
SqlSession session = factory.openSession();
return session.selectList("aa.findCarByName", name);
}
}
其中,里面的factory對(duì)象需要我們?cè)跍y(cè)試類那邊調(diào)用構(gòu)造方法傳過來昵济,具體測(cè)試類怎么實(shí)現(xiàn)智绸,看下面
步驟3:創(chuàng)建測(cè)試類CarTest
package com.hello.test;
import java.io.IOException;
import java.io.InputStream;
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.Before;
import org.junit.Test;
import com.hello.dao.CarDaoImpl;
import com.hello.pojo.Car;
public class CarTest {
private SqlSessionFactory factory;
// @Before 注解野揪,會(huì)在 @Test 注解之前執(zhí)行
@Before
public void getFactory() throws IOException {
// 1. 加載核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2. 獲取 SqlSessionFactory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(is);
}
@Test
public void findCarById() throws Exception {
CarDaoImpl cdao = new CarDaoImpl(factory);
Car car = cdao.findCarById(1);
System.out.println("我找到的車:" + car);
}
}
執(zhí)行測(cè)試方法findCarById(),因?yàn)?getFactory() 前加了注解@Before瞧栗,所以會(huì)在執(zhí)行findCarById()方法之前執(zhí)行斯稳,也就得到了factory對(duì)象,通過new CarDaoImpl(factory)把factory對(duì)象傳過去沼溜,CarDaoImpl類中也就得到了factory對(duì)象平挑。