MyBatis是"半自动"的ORM框架,即SQL语句需要开发者自定义,MyBatis的关注点在POJO与SQL之间的映射关系。那么SQL语句在哪里配置自定义呢?就在Mapper.xml中配置。当然了该配置文件可以自定义文件名。文件的样式如下:
## ...具体内容...
其中,namespace用于绑定Mapper接口。不同mapper接口对应到不同的xml。
二、mapper.xmlmapper:指定唯一的namespace,一般设置成mapper类的全路径名。
insert:对应SQL中的insert插入语句。
id:为该语句的属性,通常与mapper java 文件的方法名相同。
parameterType:参入插入语句的参数类型。
useGeneratedKeys:主键使用数据库自增策略,需要数据库底层支持,并返回主键到keyProperty指定的属性名。
keyProperty:指示主键映射到实体类的属性名。
三、sql代码段insert into user values(#{id},#{username},#{birthday},#{sex},#{address})
这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化。
四、parameterType${alias}.id,${alias}.username,${alias}.password select , from some_table t1 cross join some_table t2
如果传递的是简单的参数,是简单的数据类型,参数类型可以省略,原生的类型或简单数据类型(比如整型和字符串)因为没有相关属性,它会完全用参数值来替代。
省略参数
传递对象
参数类型是个User对象,User 类型的参数对象传递到了语句中,id、username 和 password 属性将会被查找,然后将它们的值传入预处理语句的参数中。
insert into users (id, username, password) values (#{id}, #{username}, #{password})
指定参数类型
参数也可以指定一个特殊的数据类型。
#{property,javaType=int,jdbcType=NUMERIC}对于数值类型,还有一个小数保留位数的设置,来确定小数点后保留的位数。
#{height,javaType=double,jdbcType=NUMERIC,numericScale=2}
少部分特殊字符写入到 XML 文件会被 XML 语法检测报错,XML为这些字符提供了转义
在 XML 中写 SQL,用到特殊字符的可用转义字符替换。
但使用转义字符比较麻烦,不容易记住,可使用标记里面的内容不被 XML 解析器解析,保留为文本。
= 18 ]]>六、模糊查询
mapper.xml 中写模湖查询需要使用 concat 来连接
like concat('%', #{param}, '%') 或者 like '%${param}%' --推荐使用前者,可以避免sql注入。七、其他
1. ${ } 和 #{}的区别
#可以防止sql注入 而 $ 不能
2. if test的语法使用
一般在列表页面,有多个查询条件,并且不确定条件是否使用的时候可以使用 if test语法
Mapper
//这里需要注意的是,一般持久层中,查询条件多个两个的时候最好创建一PO模型 ListfindByKeywords(Map xxmaper.xml
and username like concat('%',#{username},'%) and idnumber like concat('%',#{idnumber},'%')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)