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

时间: 2024-10-09 08:32:46

batis的一些细节问题(传参数方面)的相关文章

js 传参数

引用js实现传参数,然后在js文件里面动态加载东西,比如传递参数然后动态加载皮肤颜色,而我为了实现多语言,一般人家传递参数是为了区分版本用的还有清除js缓存问. <script src="/js/jquery-1.9.1.min.js? LanguageKey=en" type="text/javascript"></script> (function(e,t){  var scriptss = document.scripts;//默认语言

setTimeOut传参数

最近,因项目需要,需要实现setTimeOut传参数的功能,搜索了很多的资源.终于找到一个比较好的方法了,记录下来,与大家分享. 无论是window.setTimeOut还是window.setInterval,在使用函数名作为调用句柄是都不能带参数. 先看一段简单的javascript代码: 1 function show() 2 { 3 alert("Hello World"); 4 } 5 setTimeout(show,1000); 代码结果是:1秒中之后输出Hello Wor

传参数应该用哪种形式&mdash;&mdash;值、引用、指针?

类型:C++ & Qt4,创建时间:十二月 30, 2011, 7:43 p.m. 标题无"转载"即原创文章,版权所有.转载请注明来源:http://hgoldfish.com/blogs/article/19/. 最近写C++程序经常郁闷传参数的时候应该传值.传引用还是传指针. 传值 :int func(User u); 传指针: int func(User* u); 传引用: int func(User& u); 传值是传参数最常见的方法,相当简单,是C++的基础传

C# 如何执行bat文件 传参数

C# 如何执行bat文件 传参数 分类: C# basic 2011-04-25 18:55 3972人阅读 评论(0) 收藏 举报 c#stringpathoutput [c-sharp] view plaincopy Process p = new Process(); string path = ...;//bat路径 ProcessStartInfo  pi= new ProcessStartInfo(path, ...);//第二个参数为传入的参数,string类型以空格分隔各个参数

thinkphp 3.2.3 入门示例2(URL传参数的几种方式)

原文:thinkphp中URL传参数的几种方式 在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数 单个参数这种比较简单,例如 想像edit操作里面传递一个id值,如下写法__URL__/edit/id/1 http://localhost/index.php/user/edit/id/1 id和其值1要分别位于/后面 后台获取id通过    $id=$_GET['id']   即可获取其具体值. 2.传多个参数 传多个参

android选择图片或拍照图片上传到服务器(包括上传参数)

From:http://blog.csdn.net/springsky_/article/details/8213898具体上传代码: 1.选择图片和上传界面,包括上传完成和异常的回调监听 [java] view plaincopy package com.spring.sky.image.upload; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.app.

Spring 构造注入 传参数

1.        提供对应的构造方法 //构造器注入 public class Bean6 { private String name; private Integer age; // 服务于构造器注入使用 public Bean6(String name, Integer age) { super(); this.name = name; this.age = age; } public void show() { System.out.println("bean6:" + nam

关于在java中向带有IN的SQL语句中传参数的问题

今天遇到俩个问题: 1.在使用表格模型的时候,从数据库查询出来的数据赋值到Jtable的时候永远只显示最后一天记录,前面的都被覆盖了.一直在究其原因,未果,遂择其道而行之(第二个问题). 2.为了解决上面的问题,我将SQL语句的条件换成IN,目的想把所有参数一并传过去,查询所有记录后在一并显示到Jtable上,实验证明我的做法是对的.但是,一直没有搞懂IN(?)这个问号应该如何传值. SQL : String sql = " select sxh,grbm,xm,yybm,fyze,qzfbf,

C#,往线程里传参数的方法总结

C#,往线程里传参数的方法总结 Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托.   Thread (ThreadStart) 初始化 Thread 类的新实例.  由 .NET Compact Framework 支持.  Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈