这里我们首先分析的是对于类与数据库之间的映射配置文件,不是总配置文件。
看下列配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
<select id="selectById" parameterType="int" resultType="com.wf.model.User">
<!-- select * from User where id = #{id} -->
<!-- select * from User where id = #{value} -->
select * from User where id = #{hehe}
</select>
<select id="selectByName" parameterType="java.lang.String" resultType="com.wf.model.User">
select * from User where username like '%${value}%'
</select>
<insert id="insertUser" parameterType="com.wf.model.User">
<!-- insert into user value (#{id},#{username},#{birthday},#{sex},#{address}) -->
insert into user value (null,#{username},#{birthday},#{sex},#{address})
<!-- 字段必须全部写完,即使是自增的也要写上,或者利用null代替 -->
</insert>
<insert id="insertUserAndCheckID" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<insert id="insertUserAndCheckIDFree" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select uuid()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<delete id="deleteuserwithid" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
<update id="updateuserwithid" parameterType="com.wf.model.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},
address=#{address} where id=#{id}
</update>
</mapper>
NameSpace属性
namespace的作用,首先在没有利用Mapper代理开发的时候,他的作用仅仅是用来进行模块化划分,对SQL进行分类化管理,隔离SQL,但是我们如果使用了Mapper代理进行开发的时候,我们就是根据我们的namespace的类全名称进行我们的接口与配置文件之间的映射,用来指定映射的接口。
增删改查标签
INSERT,DELETE,UPDATE,SELECT ,标签用来标识此时的SQL语句的操作。
ID属性
id属性标识映射文件的sql,用来唯一标示此SQL语句的身份特质,一般在代码的Dao层会进行SQL语句的执行,此时就是根据这个NameSpace和ID用来唯一标示要执行的SQL语句。
parameterType属性
指定输入参数的类型,可以是基本类型,也可以是封装类型,一般情况在在传递一个参数时,我们只需要进行单个参数的类型入int,String等设定即可,但是,对于多参数的传递,我们都会将其封装成一个对象,然后将这个对象传递到我们的SQL语句中。
resultType属性
resultType,指定SQL输出结果的所映射的java对象类型,也就是这个属性,将我们数据库中的一条记录对应成我们的一个Java对象,如果查询的结果是一个List列表的形式,我们利用此属性只需要指定List集合中的对象属性即可。
井{ }和${ }
在一般的属性传值中,我们的 #{} 表示一个占位符号,而${} 表示不加任何修饰的拼接SQL串。
井{id} id 表示接收输入值的参数,参数名称是id,如果输入参数是简单类型,#{}中的参数名称可以是任意的。可以是value或者其他。而如果传入的参数不为简单类型,那么括号里面的属性必须为value。
${ } 表示不加任何修饰的拼接SQL串,将传入的参数直接拼接到我们的SQL语句中,利用的是拼接而不是占位符
<!--简单类型 任意-->
<select id="selectById" parameterType="int" resultType="com.wf.model.User">
<!-- select * from User where id = #{id} -->
<!-- select * from User where id = #{value} -->
select * from User where id = #{hehe}
</select>
<!--复杂类型 value -->
<select id="selectByName" parameterType="java.lang.String" resultType="com.wf.model.User">
select * from User where username like '%${value}%'
</select>
selectKey标签—主键的返回
selectKey子标签,对于在插入的同时获取插入的id值,用于外键的插入
<insert id="insertUserAndCheckID" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<insert id="insertUserAndCheckIDFree" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select uuid()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
上面的代码,第一句是自增主键的主键获取,而对于第二个,则是在进行插入时生成的非自增的uuid的字符串的主键。注意order的属性值。
keyProperty属性:selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
order 属性: 指定语句执行顺序,相当于INSERT语句来说的执行顺序
resultType: 指定返回的对象类型