學(xué)習(xí)了3種使用方式
案例鏈接(包含jar包): https://pan.baidu.com/s/1hykf9d2IEFoEPl8XlMWaqQ 提取碼: m342
方式三:
方式三就和前面兩個方式有點區(qū)別了,個人感覺方式三最方便快捷。
步驟1:新建com.hello.mapper包,mapper是映射器的意思,然后在這個包下新建一個xml文件CarMapper.xlm,具體內(nèi)容和前面基本一樣,但是還是有些地方不同的
<?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">
? <!-- namespace 需要與 mapper 接口相對應(yīng),需要填寫接口的權(quán)限名 -->
? <mapper namespace="com.hello.mapper.CarMapper">
? <!-- 查詢?nèi)啃畔?-->
? <!-- 在 MyBatis 中,返回值類型默認(rèn)是會自動轉(zhuǎn)成集合形式的。 -->
? <select id="selectAllCar" parameterType="java.lang.Integer" resultType="com.hello.pojo.Car">
? select * from car
? </select>
? <!-- 按照id查找 -->
? <select id="findCarById" parameterType="java.lang.Integer" resultType="com.hello.pojo.Car">
? select * from car where id = #{id}
? </select>
? <!-- 添加 -->
? <insert id="addCar" parameterType="com.hello.pojo.Car">
? insert into car(name, price) value(#{name}, #{price})
? </insert>
? <!-- 按照id刪除 -->
? <delete id="deleteById" parameterType="java.lang.Integer">
? delete from car where id = #{id}
? </delete>
? <!-- 更新 -->
? <update id="updateCar" parameterType="com.hello.pojo.Car">
? update car set name = #{name}, price = #{price} where id = #{id}
? </update>
? </mapper>
還需要新建一個相關(guān)的接口,名字一定要和xml名字一樣也就是CarMapper,并在xml文件中把它們關(guān)聯(lián)起來,也就是上面的<mappernamespace="com.hello.mapper.CarMapper"> ,這個接口里面的方法也是要和CarMapper.xml中的方法名字一樣,測試的時候就可以通過調(diào)接口里面的方法去調(diào)用xml文件里面對應(yīng)的方法了;然后還要把這個CarMapper.xml文件放到(反射)核心配置文件中也就是SqlMapConfig.xml文件;我們在后面的步驟一一實現(xiàn)。
步驟2:在com.hello.mapper包下新建一個接口,名字為CarMapper,接口里面的方法要和CarMapper.xml中的方法名一樣
package com.hello.mapper;
import java.util.List;
import com.hello.pojo.Car;
public interface CarMapper {
//查詢?nèi)?/p>
public List<Car> selectAllCar();
//按照id查找
public Car findCarById(Integer id);
//添加
public int addCar(Car car);
//按照id刪除
public int deleteById(Integer id);
//更新
public int updateCar(Car car);
}
步驟3:配置SqlMapConfig.xml文件,
<?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">
? <!-- 事務(wù)管理器 -->
? <transactionManager type="JDBC"></transactionManager>
? <!-- 數(shù)據(jù)源 -->
? <dataSource type="POOLED">
? <property name="driver" value="com.mysql.jdbc.Driver"/>
? <property name="url" value="jdbc:mysql://localhost:3306/cz"/>
? <property name="username" value="root"/>
? <property name="password" value="123456"/>
? </dataSource>
? </environment>
? </environments>
? <!-- 對象映射-->
? <mappers>
?<!--?這個地方映射的不是一個文件了而是一個包,包里面的相關(guān)的xml文件(mapper?)都會反射到這里,所以所有映射文件都放到同一個mapper包里面,這樣就不用我們一個個文件映射了,直接映射一個包,它會自己去找 (大概是這個意思吧 ~)-->
? <package name="com.hello.mapper"/>? ?
? </mappers>
? </configuration>
步驟4:上面的都寫好了就可以進行測試了,一樣新建一個TestClass測試類,
package com.hello.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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.mapper.CarMapper;
import com.hello.pojo.Car;
public class TestClass {
private SqlSessionFactory factory;
@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 run(){
獲取 SqlSession
SqlSession session = factory.openSession();
CarMapper mapper = session.getMapper(CarMapper.class);
//查詢?nèi)?/p>
/*List<Car> list = mapper.selectAllCar();
System.out.println(list);*/
//按照id查找
/*Car car = mapper.findCarById(2);
System.out.println(car);*/
//添加
/*Car car=new Car("垃圾車",10.0);
int i = mapper.addCar(car);
session.commit();//重要!提交數(shù)據(jù)!!
System.out.println(i);*/
//按照id刪除
/*int i = mapper.deleteById(8);
session.commit();
System.out.println(i);*/
//更新
/*Car car=new Car(6,"糞車",110.0);
int i = mapper.updateCar(car);
session.commit();
System.out.println(i);*/
}
}
上面的CarMapper mapper =session.getMapper(CarMapper.class);中的CarMapper.class指的就是我們建的接口,所以我們就可以通過mapper 調(diào)用接口中存在的方法,雖然說接口中的方法是沒有實現(xiàn)的,但是xml文件,已經(jīng)和這個接口關(guān)聯(lián)起來了,所以通過調(diào)用接中的方法就可以調(diào)用到xml文件中名字一樣的方法。就能完成我們的增刪改查了。
然后再增加一個小的知識點,就是我們在Car.xml或者是CarMapper.xml中有一個參數(shù)類型parameterType和返回值類型resultType,當(dāng)類型是類類型的時候,我們每次使用的時候需要把類權(quán)限路徑放上去,比如上面的parameterType="com.hello.pojo.Car",這樣子很麻煩,所以文明就可以在SqlMapConfig.xml中配置別名,如下

別名配置好之后我們就可以在后面使用的時候直接使用別名Car了,如parameterType="Car"