目前我本人正在学习MyBatis框架,在原先了解并且懵懵懂懂使用的基础上,开始系统正式的学习。阐述了MVC架构模式和三层架构,明晰了在Web项目中的普遍编码层次,回顾了JDBC连接数据库,建立了使用MyBatis和MySQL的Maven项目,解释了STDOUT_LOGGING日志和手动提交事务,记录了MyBatis中#占位符的使用方法,回顾了MyBatis执行SQL语句的过程和使用到的一些重要类和接口,记录了将固定化的代码整合到一个工具类MyBatisUtil中,以减少代码量。记录了dao层接口的实现以及为什么要实现它。记录了MyBatis动态代理和使用动态代理的要求以及使用了动态代理生成的实现类,记录了parameterType属性和它的使用。记录了MyBatis框架下执行SQL语句传递简单类型参数的方法。本篇博客记录mapper.xml文件传参时,使用javaType属性和jdbcType属性。
上一篇博文记录的是给SQL语句传递实体类对象参数的方法,感兴趣的读者可以查阅,链接如下:
javaType属性和jdbcType属性应用在mapper.xml文件的标签内,传参的时候 #{ } 内部。这里我直接给出示例:
- <select id="selectByQueryParam2" resultType="com.bjpowernode.domain.Student">
- select * from student where
- name=#{p1,javaType=java.long.String,jdbcType=VARCHAR} or
- age=#{p2,javaType=java.long.Integer,jdbcType=INTEGER}
- select>
可以从名字中看出来:javaType就是指定传过来的参数的所属java类型,javaType属性值是类型的全限定路径名称,当然也可以是别名。这个在MyBatis官方文档手册中有,与resultType属性值有点类似。jdbcType就是标识指定出对应的数据库中字段的类型。jdbcType属性值在MyBatis官方文档手册中是有的。这里我粘贴一下java中的类型和数据库中的类型之间的对应,如下所示:
- JDBC Type Java Type
- CHAR String
- VARCHAR String
- LONGVARCHAR String
- NUMERIC java.math.BigDecimal
- DECIMAL java.math.BigDecimal
- BIT boolean
- BOOLEAN boolean
- TINYINT byte
- SMALLINT short
- INTEGER INTEGER
- BIGINT long
- REAL float
- FLOAT double
- DOUBLE double
- BINARY byte[]
- VARBINARY byte[]
- LONGVARBINARY byte[]
- DATE java.sql.Date
- TIME java.sql.Time
- TIMESTAMP java.sql.Timestamp
- CLOB Clob
- BLOB Blob
- ARRAY Array
- DISTINCT mapping of underlying type
- STRUCT Struct
- REF Ref
- DATALINK java.net.URL
其实在一般写项目的时候,这两个属性是不写的,就像是parameterType一样,是可有可无的。
但是,当写一个 代码生成器的时候,这个就需要必须加上去,为了自动生成代码的准确性。能写代码生成器程序的,我目前认为肯定也是经验很丰富的程序员了!!