(第4天)Mybatis的最常用的开发方式

今天学Mybatis的第二种 最常用的开发模式

(昨天的那种开发方式算是第一钟)

那么来看看,它们之间差别在哪

先,建立新项目Mybatis02
然后把配置文件弄好先

现在mapper表映射XML 不一定放 类里那个包里,它放的位置不固定。 现在我将它放在config文件夹里的一个新建文件夹mappers里 。

Mapper表映射XML文件:

···

···

每写完一个小的配置文件(既 mapper表映射XML) 都要到 mybatis配置文件XML 中 设置好路径
笔记 只要bulid Path 过的 文件夹 ,那么在写路径的时候就可以直接省去打 已build path过的文件夹名

接着补充上 mybatis配置文件XML

mybatis配置文件:

<?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"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/hkgoods"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mappers/mybatis-conf.xml"/>
  </mappers>
</configuration>

现在进入今天主题-- 学习第二种mybatis开发方式

先新建一个接口

然后使mapper表映射XML 关联到 这个接口

具体操作:
把mapper映射文件XML 里的namespace 换为接口的全路径名称 ,我这里接口的全路径名称是:com.chen.dao.GoodsDao
而且select 标签中的id 一定要和接口里的方法名字相同,不然会报错。很重要

现在,开始新建个主入口类Mybatis_start

然后再将官网的相关那几行代码复制粘贴过去,再自行修改

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
public class Mybatis_start {

	public static void main(String[] args) {
		//创建一个sqlSession
		
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//true表示自动提交。否则需要使用commit方法才会提交。默认是false
		SqlSession session = sqlSessionFactory.openSession(true);
		//-----至此 sqlsesson对象创建完毕-------
		
		//这里开始 ,用法不一样了。以前一个实体类对应一个映射文件XML就完事了。而现在改用接口了
		// 原来的mybatis配置文件 注册方式没变,变的是使用方式
		//---------------------------------
		
		//创建接口对象。这个是session对象通过动态代理自动帮我们创建的;一定要有实现接口的类,不然这个接口方法没意义
		  //获得映射   ,下面参数里 需要你传入一个反射对象。 下面传入当前接口的反射对象;下面类型返回的是一个接口对象,然引用赋给左边
		GoodsDao gd =  session.getMapper(GoodsDao.class);
		System.out.println(gd);
		
	}

}

到这里我 调试运行时发什么一个错误 ,一直说找不到souce,为此我找了很久bug。
Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource /mappers/GoodsInfoMapper.xml
问题在于:

要把那个mappers文件夹 右键 build path ---include 。这样 它系统才能识别到里面的东西

···
package 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 com.chen.GoodsInfo;
import com.chen.dao.GoodsDao;

public class Mybatis_start {

public static void main(String[] args) {
	//创建一个sqlSession
	
	String resource = "mybatis-conf.xml";
	
	try {
		InputStream  inputStream = Resources.getResourceAsStream(resource);
	
	//创建SqlSessionFactory
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	//true表示自动提交。否则需要使用commit方法才会提交。默认是false
	SqlSession session = sqlSessionFactory.openSession(true);
	//-----至此 sqlsesson对象创建完毕-------
	
	//这里开始 ,用法不一样了。以前一个实体类对应一个映射文件XML就完事了。而现在改用接口了
	// 原来的mybatis配置文件 注册方式没变,变的是使用方式
	//---------------------------------
	
	//创建接口对象。这个是session对象通过动态代理自动帮我们创建的;一定要有实现接口的类,不然这个接口方法没意义
	  //获得映射   ,下面参数里 需要你传入一个反射对象。 下面传入当前接口的反射对象;下面类型返回的是一个接口对象,然引用赋给左边
	//Proxy 是代理的意思
	GoodsDao gd =  session.getMapper(GoodsDao.class);
	//System.out.println(gd);   在这里为了检测下gd里存的是什么东西
	//这里控制台输出的是: org.apache.ibatis.binding.MapperProxy@2ff4f00f
	
	//使用创建好的接口对象来调用方法  ( gd.selOne("2")这返回的是个对象 )
	GoodsInfo  goods= gd.selOne("2");
	System.out.println(goods.getName());
	
	List<GoodsInfo> list =gd.selAll();
	System.out.println(list.size());
	
	}
	catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

}

···
运行结果

总结

接口替代了dao层
表映射文件XML就 相当于你的接口实现类

原文地址:https://www.cnblogs.com/czy16/p/7625587.html