首先我们给出一个Mapper配置文件,用于参照使用,下面给出详细介绍
emid, emname
INSERT INTO employee (
emid,
emname
) VALUES (
#{employee.emId,jdbcType=INTEGER},
#{employee.emName,jdbcType=VARCHAR}
)
INSERT INTO employee (
)VALUES
(
#{employee.emId,jdbcType=INTEGER},
#{employee.emName,jdbcType=VARCHAR}
)
UPDATE employee
emid= #{employee.emId,jdbcType=INTEGER},
emname= #{employee.emName,jdbcType=VARCHAR},
WHERE emid = #{employee.emId,jdbcType=INTEGER}
DELETE from employee
and emid= #{employee.emId,jdbcType=INTEGER}
and emname= #{employee.emName,jdbcType=VARCHAR}
统一的套路都是通过判断参数是否存在值,如果存在,则进行sql的拼接,如果不存在,则执行当前默认的sql语句,就是没有代条件的sql语句。这种写法可以有效的阻止sql注入,避免服务器奔溃,造成不必要的损失。
1、插入单个员工
INSERT INTO employee (
emid,
emname
) VALUES (
#{employee.emId,jdbcType=INTEGER},
#{employee.emName,jdbcType=VARCHAR}
)
插入单个员工和平时使用的insert语句一样的,这里我没有做太大的改变。
2、插入多个员工
INSERT INTO employee (
)VALUES
(
#{employee.emId,jdbcType=INTEGER},
#{employee.emName,jdbcType=VARCHAR}
)
批量插入员工,在values中进行foreach语句遍历,即可循环将多个员工插入,这里直接复制就可以使用的,改一下循环的条件即可。
3、根据id更新员工
UPDATE employee
emid= #{employee.emId,jdbcType=INTEGER},
emname= #{employee.emName,jdbcType=VARCHAR},
WHERE emid = #{employee.emId,jdbcType=INTEGER}
在更新中,当员工的参数不为空时,则在更新语句上拼接上更新条件,然后用逗号分隔开。
4、根据传入条件删除员工
DELETE from employee
and emid= #{employee.emId,jdbcType=INTEGER}
and emname= #{employee.emName,jdbcType=VARCHAR}
动态条件删除,当传入的任何一个值不为空时,则删除当前的员工信息,这里可以不用根据id进行删除。
5、根据传入条件找到员工(单个或者多个)
如果传入的参数不为空,则根据条件找到对应的员工信息,当条件为空时,这里不进行拼接,则等价于执行了select * from employee,查询的是所有的数据,当有一个条件存在时,查出来的数据可能是单个或者是多个,只需要判断一下返回的集合中存在几条信息,总结如下:
6、模糊查询
select id="searchEmployee" resultType="com.mybatis.Employee">
select from employee
or emid like #{employee.emId,jdbcType=INTEGER}
or emname like concat('%', #{employee.emName,jdbcType=VARCHAR}, '%')
前面的都是一样,当有参数时,才进入下一步,判断哪一个参数不为空,则拼接上参数的模糊查询,or是作为多条件查询,如果用and,那么这个模糊查询需要同时满足and两边的条件,这个根据你的需求来做。
Mybatis 动态sql语句详解到此结束!!