MyBatis的javaType和ofType的区别】的更多相关文章

JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型.pojo类: publicclass User {    privateint id;    privateString username;    privateString mobile;    privateList<Post>posts;} user.xml: <resultMap type="User&q…
javaType和ofType都是用来指定对象类型,保证了类型安全.反向用select是必须要用ofType.javaType是指POJO类中的属性类型,比如下面的id,text,url,parent ofType是值映射到list集合中的类型,比如上面的children.当collection进行list集合映射是需要用ofType,也就是一对多的时候使用…
都是指定对象的类型 不同的是当使用反向查询select从另一个maper文件中取出数据时必须用ofType 都可以为collection和association是指定对象的类型, 都不是必须写的, 只有反向select时需要ofType; 一般在collection中默认就是List所以不用指定, 如果指定了注意参数必须要是集合类型的javaType="java.util.ArrayList", 否则会报错, 参数不匹配; association中javaType="com.…
Mybatis JdbcType与Oracle.MySql数据类型对应列表  Mybatis JdbcType Oracle MySql JdbcType ARRAY     JdbcType BIGINT   BIGINT JdbcType BINARY     JdbcType BIT   BIT JdbcType BLOB BLOB BLOB JdbcType BOOLEAN     JdbcType CHAR CHAR CHAR JdbcType CLOB CLOB CLOB–>修改为T…
1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号,  2.#号写是可以防止sql注入,比较安全 select * from user where username=#{username} and password=#{password}  变成 ...where username=‘张三’ and password=‘123’ ${}  2.没有加单引号  2.${}写法无法防止sql注入(模湖查询时用‘%${username…
一.概述MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在.在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值.①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resu…
resultType和resultMap功能类似  ,都是返回对象信息  ,但是resultMap要更强大一些 ,可自定义.因为resultMap要配置一下,表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来,但是,resultType就比较鸡肋了,必须字段名一样,比如说 cId和c_id 这种的都不能映射 .下面介绍几个常用的映射关系: 单表查询: resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.x…
PS:每次写概念性的总结,都是各种复制,各种粘,然后各种理解各种猜.但是这一步的总结,决定了我能够再这条路上走的远近和是否开心.是否创造!so,开启Ctrl A+Ctrl C的模式吧. 接触到这个概念的时候,很熟悉的感觉又回来了.想起了那时候研究.NET的Entity Framework的时候,那时候,是我第一次接触到Hibernate和Mybatis,iBatis等等.因为当时将ORM框架的实现,分为了.NET和Java体系.我说过,我会回来的,将近一年,我终于能够去用上这个传说中的Mybat…
最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如  select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是 select * from table where name = ‘小李’,就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如…
文章出处:Jdbc,Mybatis,Hibernate各自优缺点及区别 先比较下jdbc编程和hibernate编程各自的优缺点. 1.JDBC 我们平时使用jdbc进行编程,大致需要下面几个步骤:   1.使用jdbc编程需要连接数据库,注册驱动和数据库信息:   2.操作Connection,打开Statement对象:   3.通过Statement对象执行SQL,返回结果到ResultSet对象:   4.使用ResultSet读取数据,然后通过代码转化为具体的POJO对象:   5.关…
原文地址:https://www.cnblogs.com/zqr99/p/8094234.html 最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是 select * from table where name = ‘…
最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是 select * from table where name = ‘小李',就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果…
pojo:不按mvc分层,只是java bean有一些属性,还有get set方法domain:不按mvc分层,只是java bean有一些属性,还有get set方法po:用在持久层,还可以再增加或者修改的时候,从页面直接传入action中,它里面的java bean 类名等于表名, 属性名等于表的字段名,还有对应的get set方法vo: view object表现层对象,主要用于在高级查询中从页面接收传过来的各种参数.好处是扩展性强bo: 用在servie层,现在企业基本不用.这些po,v…
JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动和数据库信息 2,操作Connection,打开Statement对象 3,通过Statement对象执行SQL,返回结果到ResultSet对象 4,使用ResultSet读取数据,然后通过代码转化为具体的POJO对象 5,关闭数据库相关的资源 jdbc的缺点: 一:工作量比较大,需要连接,然后处理jdbc底层事务,处理数据类型,还需要操作Connection,Statement对象和…
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe…
Mybatis配置中,取出map入参的数据一般有两种方式#{key}和${key},下面是这两种取值的区别: 以同样的语句做对比: <select id="geUserByParam1" resultType="Map" parameterType="Map"> select * from t_user t where t.name=#{name} and t.password=#{password} </select>…
积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿 相关内容: https://www.cnblogs.com/h-c-g/p/10252121.html 引 言 接触SpringBoot 后,发现和之前ssm 框架中 对mybatis , 在使用层面上存在不同(又或是 ssm 框架中大多采用的是xml 配置形式的开发,但在springBoot 中多用注解方式的开发) 这就造成了之前在配置文件上,还是使用上面存在了一些区别 问题一: ssm 框架之前,为什么不使用之前注解,都是spring…
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord…
也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hibernate中,操作数据库实际上时通过对象状态的改变来改变数据中对应表的值,此时就是通过hql来操作数据库的,就不在通过sql来直接操作我们的数据库. 我认为,最能体现Hibernate的面向对象的方法来操作数据库的一点,就是:在新创建一个对象后,在调用Hibernate的save方法时,此时HI…
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMapresultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用但是resultType跟resultMap不能同时存在.在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值.当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultT…
之前的笔记:#{}相当于JDBC的? ${}是字符串连接符,如果入参为普通类型{}中只写value 在项目中要实现所有业务批量提交的功能,实现方式,把表名,表主键字段当做参数传递,在xml文件中全部使用的#{},导致解析的时候出现问题. 1 #是将传入的值当做字符串的形式, eg:select id,name,age from student where id=#{id},当前端把 id 值 1,传入到后台的时候,就相当于 select id,name,age from studentwhere…
MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用. 1.resultType 返回单个实例 <select id="selectUser" parameterType="int" resu…
$与#的区别 select * from T_PRINT_LAYOUT where D_RECID = ${recId} 最后生成的SQL为: select * from T_PRINT_LAYOUT where D_RECID = 1 即:直接将参数值替换到了原来${recId}的位置,相当于硬拼SQL select * from T_PRINT_LAYOUT where D_RECID = #{recid,jdbcType=DECIMAL} 最后生成的SQL为: select * from…
JDBC Type           Java Type CHAR                  String VARCHAR            String LONGVARCHAR    String NUMERIC             java.math.BigDecimal DECIMAL             java.math.BigDecimal BIT               boolean BOOLEAN            boolean TINYINT …
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 int BIGINT long REAL float FLOAT double DOUBLE double BINARY b…
public class A{ private B b1; private List<B> b2;} 在映射b1属性时用association标签,(一对一的关系) 映射b2时用collection标签(一对多的关系)…
${}中的变量什么值,就会简单的替代变量,不会做处理 比如delete * from tb_label where name=${labelname} 如果labelname的值是 something' or 'x'='x 替换后的结果就是delete * from tb_label where name='something' and 'x'='x' 这样就不能防止注入攻击 #{}可以防止注入攻击,以为传入的参数会处理一下,自动给传入变量的值加上单引号,并且有的字符会做转译处理 同样上面的情况…
public class A{ private B b1; private List<B> b2;} 在映射b1属性时用association标签,(一对一的关系) 映射b2时用collection标签(一对多的关系)…
正常情况下,我们设置表的主键自增,然后: @Insert("insert into miaosha_order (user_id, goods_id, order_id)values(#{userId}, #{goodsId}, #{orderId})") public int insertMiaoshaOrder(MiaoshaOrder miaoshaOrder); 可以直接插入,秒杀订单标的id字段用的是数据库自增长策略 但是,如何获在插入后,获取id的值呢,如果通过查询获取id…
association是多对一的关系 collection是一个一对多的关系…