先在数据库可视化界面中写sql语句进行调试后,再写映射文件
创建映射文件,在映射文件中配置sql语句
映射文件命名规则:Mapper代理开发的映射文件名为XxxxMapper.xml(原始ibatis命名方式为Xxxx.xml)。
映射文件的约束文件:
<?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">
nameSpace命名空间:对sql进行分类化管理,理解sql隔离。
Mybatis中namespace用于绑定dao接口,dao接口的方法对应mapper中的sql语句中id。
映射文件编写完成之后,如果未配置自动扫描,需要在SqlMapConfig中加载对应的映射文件。
1.查询
id:标识映射文件中的sql,将sql语句封装到mappedStatement,作为statement的ID。
#{}:表示一个占位符号,接收输入参数。参数类型可以是简单类型,dto,hashMap。
如果接收dto对象,则使用OGNL对象导航图读取对象中的属性值。即对于包装的dto,采用属性.属性.属性名的方式取数据。
${}:拼接字符串,类型可以是简单类型,dto和hashMap。
此时MyBatis 不会修改或转义字符串,传入的为指定字符串,会存在潜在的sql注入攻击。
parameterMap:parameterMap为早期版本
parameterType:指定输入映射的java类型,int时指定为int,String时指定为java.lang.String。
resultType:表示输出结果类型,指定sql输出结果所映射的java对象类型,表示将单条记录映射成的java对象(注意输出映射和数据库表字段的对应)。即无论返回单个dto还是list,resultType的值都是表示单条记录的类型。
<1>根据id查询单条记录
<select id="getAgreement" resultType="dto位置" parameterType="java.lang.String">
SELECT *
FROM
T_RES_AGR TRA
WHERE
TRA.NO = #{no, jdbcType=VARCHAR}
</select>
2.插入
配置添加用户的statement,返回主键(主键返回,作为子表的外键)。
2.1 mysql自增主键:执行insert提交之前,自动生成一个自增主键。
在insert之后,通过mysql的函数,获取到刚插入记录的自增主键。
LAST-INSERT-ID
添加用户,并将插入数据的主键返回,到user对象中。只适用于自增主键。
keyProperty:将查询到的主键值设置到parameterType指定的属性值中去,即keyProperty的值。
order:相对于insert语句来说,SELECT LAST-INSERT-ID()语句的执行顺序。
resultType:指定返回结果的类型。
<insert id="doCreateAgreement" parameterType="com.ceair.acm.reservation.dto.AgreementDTO">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST-INSERT-ID()
</selectKey>
INSERT INTO T_RES_AGREEMENT TRA(
STATUS
) VALUES (
#{insertDTO.status, jdbcType=VARCHAR}
)
</insert>
2.2非自增主键的返回——使用uuid()
使用mysql的uuid()函数生成主键,需要修改表中id字段类型为String,长度设置为35位。
执行思路:先根据uuid()查询出主键,再根据主键执行sql语句。
执行顺序:相对于insert语句,为 之前。
执行过程:首先通过uuid得到主键,将主键值设置到dto的id属性中;在insert执行时,从dto对象中取出id属性值。
<insert id="doCreateAgreement" parameterType="com.ceair.acm.reservation.dto.AgreementDTO">
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey>
INSERT INTO TRA(
STATUS
) VALUES (
#{id},
#{insertDTO.status, jdbcType=VARCHAR}
)
</insert>
2.3通过oracle的序列生成主键
SELECT Xxx序列名.nextVal()
<insert id="doCreateAgreement" parameterType="com.ceair.acm.reservation.dto.AgreementDTO">
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT Xxx序列名.nextVal()
</selectKey>
INSERT INTO TRA(
STATUS
) VALUES (
#{id},
#{insertDTO.status, jdbcType=VARCHAR}
)
</insert>
3.删除
<delete id="deleteKey" parameterType="java.math.BigDecimal" >
delete from user
where id = #{Id,jdbcType=DECIMAL}
</delete>
4.更新
id为必需参数
<update id="update" parameterType="com.AgreementDTO">
UPDATE USER
SET
STATUS = #{status, jdbcType=VARCHAR}
WHERE
USER.ID = #{id, jdbcType=VARCHAR}
</update>

931

被折叠的 条评论
为什么被折叠?



