qaq
+预编译sql语句
+#{...}
+-
+
- 执行时会将#{...}替换为?,自动设置参数值 +
- 参数传递都使用 +
- 可以防止sql注入 +
@Mapper
+public interface EmpMapper {
+@Delete("delete from emp where id = #{id}")
+ public void delete(Integer id);
+ }
${...}
+-
+
- 直接将参数拼接在sql语句中,会存在注入问题 +
- 如果对表名、列表进行动态设置时使用 +
@Delete("delete from emp where id = ${id}")
插入
+@Mapper
+public interface EmpMapper {
+@insert("insert into emp(username, name, gender,image,job,entrydate,dept_id,create_time,update_time) values ('Tom','汤姆',1,'1.jpg',1,'2005-01-01',1,now(),now())")
+ public void insert();
+ }
采用类封装,注意传的参数是类的属性,需要驼峰命名
+@Mapper
+public interface EmpMapper {
+@insert("insert into emp(username, name, gender,image,job,entrydate,dept_id,create_time,update_time) values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptID},#{createTime},#{updateTime}")
+ public void insert(Emp emp);
+ }
获取主键
+会自动将生成的主键值,赋值给emp对象的id属性
+@Options(keyProperty="id",useGeneratedKeys=true)
+@insert("insert into emp(username, name, gender,image,job,entrydate,dept_id,create_time,update_time) values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptID},#{createTime},#{updateTime}")
+public void insert(Emp emp);
更新
+@Update("update emp set username = #{username}, name = #{name}, gender = #{gender}, image = #{image}, job = #{job}, entrydate = #{entrydate}, dept_id = #{deptId}, update_time = #{updateTime} where id = #{id}")
+public void update(Emp emp);
查询
+通过主键
+-
+
- 给变量取别名,将下划线命名法映射为驼峰命名 +
@Select("select id, username, password, name, gender, image, job, entrydate, dept_id deptId, create_time createTime, update_time updateTime, from emp where id = #{id}")
+public Emp getById(Integer id);
-
+
- 通过@Results, @Result注解手动映射封装 +
@Results({
+@Result(column = "dept_id", property = "deptId"),
+ @Result(column = "create_time", property = "createTime"),
+ @Result(column = "update_time", property = "updateTime")
+ })
+@Select("select * from emp where id = #{id}")
+public Emp getById(Integer id);
-
+
- 开启mybatis的驼峰命名自动映射开关, a_column -> aColumn +
//在application.properties中
+.configuration.map-underscore-to-camel-case=true mybatis
条件查询
+-
+
- name作模糊匹配需要用$而不是# +
- 会有注入问题 +
@Select("select * from emp where name like '%${name}%' and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc")
+public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
-
+
- 可以使用concat函数解决 +
@Select("select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc")
+public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
XML映射文件
+-
+
- XML文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
+
-
+
- XML文件在resources文件夹下面,和Mapper接口的路径相仿 +
+ - XML文件的namespace属性为Mapper接口全限定名一致 +
- XML文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致 +
Mapper接口:
+@Mapper
+public interface EmpMapper {
+public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
+ }
XML映射文件:
+mapper namespace="com.itheima.mapper.EmpMapper">
+ <select id="list" resultType="com.itheima.pojo.Emp">
+ <
+ select * from where name like concat('%', #{name}, '%') and gender=#{gender} and entrydate between #{begin} and #{end} order by update_time descselect>
+ </mapper> </
动态sql
+-
+
<if>
用于判断条件是否成立
+- 如果条件为true,则拼接sql +
<if test="name != null">...</if>
+<where>
用于动态生成where关键字
+- 如果里面条件都不成立就不生成 +
- 可以自动处理里面条件里多余的
and
+ <set>
+动态地在行首插入set关键字,删掉额外的逗号
+
select id="list" resultType="com.itheima.pojo.Emp">
+ <
+ select *
+ from empwhere>
+ <if test="name != null">
+ <
+ name like concat('%', #{name}, '%')if>
+ </if test="gender != null">
+ <
+ and gender = #{gender}if>
+ </if test="begin != null and end != null">
+ <
+ and entrydate between #{begin} and #{end}if>
+ </where>
+ </
+ order by update_time descselect> </
foreach遍历
+-
+
- collection:遍历的集合 +
- item:遍历出来的元素 +
- separator:分隔符 +
- open:遍历开始前拼接的sql片段 +
- close:遍历结束后拼接的sql片段 +
SQL语句:
+delete from emp where id in (1,2,3);
接口方法:
+//批量删除
+public void deleteByIds(List<Integer> ids);
XML映射文件
+delete id="deleteByIds">
+ <
+ delete from emp where id inforeach collection="ids" item="id" separator="," open="(" close=")">
+ <
+ #{id}foreach>
+ </delete> </
sql标签
+sql id="01">
+ <<!-- sql语句 -->
+ ...sql>
+ </
+ ...
+include refid="01"/><!-- 语句引用 --> <