• (第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就 相当于你的接口实现类

  • 相关阅读:
    实现倒计时
    slidingMenu使用中侧滑回界面后,出现无焦点问题
    android eclipse 下Device无设备问题解决
    android cordova java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up问题的解决和想法
    Android Cordova 对于软键盘弹出后覆盖输入域的解决
    Extjs最后一页数据删除之后自动返回上一页
    jquery Unexpected token i
    批量删除.svn文件夹、.svn文件
    mysql创建用户权限
    mysql存储过程解决数组传参及游标CURSOR的问题解决方案
  • 原文地址:https://www.cnblogs.com/czy16/p/7625587.html
Copyright © 2020-2023  润新知