首页 > 代码库 > batis的一些细节问题(传参数方面)

batis的一些细节问题(传参数方面)

一、相关配置
    三个配置文件(前两个文件的名称是任意起的)
    1)环境配置文件conf.xml
        在环境配置文件中有<typeAliases>标签,该标签内部可以定义<package>标签来统一定义mapping.xml文件所在的包,这样在mapping.xml文件中即可仅定义
    
    2)映射文件mapping.xml
    3)日志配置文件log4j.xml
    
二、util工具类,获取静态SessionFactory
        public static SqlSessionFactory getSqlSessionFactory() throws IOException{
        Reader r = Resources.getResourceAsReader("conf.xml");
        return new SqlSessionFactoryBuilder().build(r);
        }
    Mybatis提供的Resources类上获取配置文件信息的方法有很多    此处使用类上的静态方法getResourceAsReader来获取配置文件的属性(作为一个字符输入流读入内存
    
三、实现映射
    1、纯XML文件
        1)数据库连接信息配置在conf.xml文件中
        2)对象与表之间的映射配置在mapper.xml文件中
        3)配置完成,获取SessionFactory,启动session执行对数据库的操作
        
    2、接口+XML文件
        接口与XML文件相关联需要遵守Mybatis的约定:
            ①mapper.xml文件中的namepace要写为接口的全名
            ②定义的操作(insert/delete/update/select)标签的id(即定义的sql语句的名称)要和接口中的方法名相同
            ③根据约定配置后,Mybatis将自动实现接口来进行数据库操作
            
    3、接口+注解
        接口与上面相同
        相应的注解:@Select("") @Update("") @Insert("") @Delete("")
        注解中的字符串为sql语句,具体写法与XML文件中配置相同
        
四、传参
    1)常规传参方式
        创建一个JavaBean,对象属性为要传的参数
            映射文件中SQL语句的paramType属性为该JavaBean,语句中属性为#{属性名}
    2)其他方式
        方法:mthod(参数1,参数2,参数3·········)
            
            ①将方法中的参数放在一个Map集合中,方法的参数改为这个Map集合
                在映射文件的SQL语句中参数获取使用#{key}来获取
            ②将方法中的参数索引作为参照(索引从0开始计数)
                方法中:参数1,参数2,参数3······
                映射中:#{0} ,#{1} ,#{2}
            ③使用Mybatis给我们提供的注解@Param
                在接口中的方法定义时,参数前加入@Param注解  注解内容为映射文件中属性的名称
                @Param("参数1")在映射文件中调用时#{参数1}
五、表中字段名称和实体类JavaBean中对象的属性名称不一致时
            
            1)插入数据时     影响不大,在SQL语句定义中传值时将占位符的参数设置为对象属性名即可
            2)查询数据时
            方法1、通过SQL查询语句中设置字段名别名为对象属性名即可
            方法2(麻烦)、将resultType设置为map,返回数据存在map中 map的键为字段名值为字段数据,然后将map数据存为对应的对象属性
            方法3(重要)、通过定义标签resultMap,使用其中的id/result等标签来定义对象属性和数据库表字段名的映射,然后在查询语句定义标签中原来的resultType改为resultMap,值为定义好的resultMap标签的id,即可将数据库中的字段和对象中的属性建立映射关系。
    
六、配置文件中的占位符
        #{}  与  ${} 的区别?
        #{}生成的SQL语句有占位符 ? ,数据来自实体类对象的属性
        ${}生成的SQL语句没有占位符?,数据优先来自属性文件db.properties
            ${}可能涉及sql注入,会有危险,但是当需要传的参数为表名时,因为#{}传入的是占位符,自带有字符串符号‘‘ 所以会报错,这时必须使用${}进行sql注入
            同时,如果需要从属性文件***.properties读取信息时,需要使用${}
     关于两者区别与联系参考

   http://blog.csdn.net/pfnie/article/details/53230994
    
    
    
   

batis的一些细节问题(传参数方面)