zoukankan      html  css  js  c++  java
  • 实训-mybatis-经验总结

    	只要文件在有符号的src包下 ,就不必写src 这节目录
    	//	假如我将mybatis-config.xml放到comm.icss.control包下,那么我就得
    	//	String config = "com/icss/control/mybatis-config.xml"; (省略src)
    		
    		String config = "mybatis-config.xml";
    		//官网模板String resource = "org/mybatis/example/mybatis-config.xml";
    		
    		InputStream inputStream = null;
    		try {
    			inputStream = Resources.getResourceAsStream(config);
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    		
    		SqlSession openSession = sqlSessionFactory.openSession();
    		 Object oneUser = openSession.selectOne("getUserById", 1);
    		 System.out.println(oneUser);
    

    2. 执行xml哪个SQL语句 并先知道它的id

    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    		
    		SqlSession openSession = sqlSessionFactory.openSession();
    		 Object oneUser = openSession.selectOne("getUserById", 1);
                 // Object oneUser = openSession.selectOne("com.icss.mapping.user.getUserById", 1);   这样就更加精准了,更唯一了,因为如果只写"getUserById",可能还有一个XML里的SQL id也叫这个getUserById
    		 System.out.println(oneUser);
    

    3. XML 里SQL的 标签 #{} 等于JDBC的占位符 ?

    //resultType->查询后返回的结果是什么类型   , parameterType表示查询是传入的参数是什么类型, 
    <select id="getUserById"  resultType="com.icss.entity.User"  parameterType="int">
         select  *  from user where id=#{id}
       </select>  
    
    //parameterType表示传入占位符#{}的是User类型。   切记,#{pwd2}  , #{user2} 和实体类user的成员变量名字要相同,框架会帮你自动准确填入,不然你传的user.id,user.pwd不知填到哪个占位符里
        <update id="updateByUser" parameterType="com.icss.entity.User">
        	UPDATE  user set user=#{user2},pwd=#{pwd2} where user=#{user2}
        </update>
        
        <insert id="insertByUser"  parameterType="com.icss.entity.User" >
        	insert into user values(#{id},#{user2},#{pwd2},#{status},#{role})
        </insert>
        
        <delete id="deleteByid" parameterType="int">
     		delete from user where id =#{id}
        </delete>
    
    

    4.查询返回的结果是集合的 情况

    <!-- 因为要传入两个参数,但 parameterType只能写一个东西的,所以写map-->
      
        <select id="listByPage" resultMap="userlist" parameterType="map">
      //注意:这个占位符#{}是有讲究的,#{index}, #{pagesize} 意味着,方法调用那边也要起这个名字,框架才能准确对应起来  。具体请看下面图片
        	select * from user limit #{index},#{pagesize}
        </select>
    
    //上面查询语句有一个id,下面集合也要有一个id,各自有名字才能对应起来 。上面的resultMap填的就是下面的集合的id 名字
    
    //type代表集合的成员类型
    
    <resultMap  id="userlist" type="com.icss.entity.User">
    // column对应的是mysql数据库的那个列名
    //property对应的是实体类User 里的成员属性名
    
        	<result column="id"  property="id"/>
        	<result column="user" property="user2"/>
        	<result column="pwd" property="pwd2"/>
        	<result column="status" property="status"/>
        	<result column="role" property="role" />
        
        </resultMap>
    

    工具类

    package com.icss.util;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class SQLSessionUtil {
    	
    	  private static SqlSessionFactory  factory=null;
          // static
    	  static Reader read=null;
    	  
    	  static{
    		   String config="mybatis-config.xml";
    		   try {
    			 read= Resources.getResourceAsReader(config);
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    	  }
    	  
    	  /**
    	   * 
    	   * @return
    	   * 单例设计模式,只得到一个工厂对象
    	   */
    	  private static  SqlSessionFactory  getSqlSessionFacory(){
    		   if(factory==null){
    			   factory =new SqlSessionFactoryBuilder().build(read);
    		   }
    		    return factory;
    	  }
    	  
    	  
    	  /***
    	   *  封装一个得到 SqlSession的对象
    	   *  
    	   */
    	  
    	  public  static  SqlSession getSqlSession(){
    		  return getSqlSessionFacory().openSession();
    	  }
    	
    	
    }
    
    

    整 体原理

  • 相关阅读:
    FPGA 在线调试方法概述
    Quartus II& Nios II 出错解决办法
    Verilog HDL--VGA显示
    常用电平转换方案
    Verilog HDL SPI通信——读
    Verilog HDL SPI通信——写
    Verilog HDL串口发送程序
    verilog HDL 串口接受程序
    关于AFNetworking中header的bug问题
    iOS项目的本地化处理(多国语言)
  • 原文地址:https://www.cnblogs.com/czy16/p/9270171.html
Copyright © 2011-2022 走看看