赞
踩
使用mybatis框架在xml文件中编写相应的SQL,正规操作有一个mapper就需要对应一个xml文件,累积下来就有很多文件,处理起来贼繁琐,直接在对应方法上使用注解编写SQL,一定程度上可以减少开发时间,但是有一个很不好的地方,判断语句或者批量操作是需要手动添加<script></script>,这个无法自动生成,需要对这个比较熟悉才能上手
引入类
import org.apache.ibatis.annotations.*;
注意:在mapper接口上需要加上两个注解
@Mapper
@Repository
/**
* 查询单个对象
*
* @param name 名称
* @return 具体对象
*/
@Select(" select name,age,sex,class_name,nick_name as nickName from table_name where name=#{name}")
@Result(property = "className", column = "class_name")
Student queryOne(@Param("name") String name);
如果表中字段定义的是下划线 _ 格式,而java Bean又是驼峰
① 使用@Result( )注解来进行映射
② 或使用as在字段后面重命名(as可省略)
/**
* 查询对象列表
*
* @return 对象列表
*/
@Select(" select * from table_name ")
@Results({
@Result(property = "className", column = "class_name"),
@Result(property = "nickName", column = "nick_name")
})
List<Student> queryList();
@Results() 可省略
/**
* 根据编号查询列表
*
* @param grade 年级
* @param numList 编号列表
* @return 列表对象
*/
@Select("<script>"
+ "select * from table_name where grade=#{grade} and num in "
+ "<foreach item = 'num' index = 'index' collection = 'numList' open='(' separator=',' close=')'>"
+ "#{num}"
+ "</foreach>"
+ "</script>")
List<Student> getListByNum(@Param("grade") String grade, @Param("numList") List<String> numList);
上面程序内只创建了一个SQL,通过 in 编号列表去循环匹配,千万不要用去套用整个SQL,那样每一个编号就会创建一个SQL,效率很低,造成没有必要的数据库压力
@Select("<script>" +
"select num from table_name " +
"<when test='grade != null'>" +
"where grade = #{grade} " +
"</when>" +
"</script>")
Set<String> getAllNums(@Param("grade") String grade);
int pageNow = 1;
int pageSize = 50;
List list = studentMapper.queryListByPage((pageNow - 1) * pageSize, pageSize);
@Select("select * from table_name limit #{pageNow}, #{pageSize}")
List<Student> QueryListByPage(@Param("pageNow") int pageNow, @Param("pageSize") int pageSize);
@Select(" select * from table_name where age = '18' and (name like '%${match}%' or nickName like '%${match}%' ) ")
List<Student> match(String match);
@Insert("insert into table_name (num,grade,name,age,sex)"
+ "values(#{num},#{grade},#{name},#{age},#{sex}")
void insert(Student student);
@Insert("insert ignore into table_name (num,grade,name,age,sex)"
+ "values(#{num},#{grade},#{name},#{age},#{sex}")
void insert(Student student);
依据:主键冲突或者唯一索引冲突(类型:unique)。
出现以上两种异常,会自动忽略当前的插入操作,不会报错。
@Insert("insert into table_name (num,grade,name,age,sex,insert_time,update_time) "
+ "values(#{num},#{grade},#{name},#{age},#{sex},now(),now() "
+ "ON DUPLICATE KEY UPDATE update_time=now()")
void insert(Student student);
这里是如果表中不存在该数据那么正常插入;如果存在,那么就更新时间
@Insert("<script>" +
"insert into table_name (num,grade,name,age,sex) values " +
" <foreach collection='list' item='item' separator=',' > " +
" (#{item.num}, #{item.grade}, #{item.name}, #{item.age}, #{item.sex})" +
" </foreach> " +
"</script>")
void batchInsert(@Param("list") List<Student> list);
@Update(" update table_name set grade=#{grade}, name=#{name}, age=#{age}, sex=#{sex}" +
" where num=#{num}")
int updateStudent(Student student);
@Update("<script> " +
" update table_name set grade = #{grade} where 1=1 and num in " +
" <foreach collection='list' index='index' item='item' separator=',' open=\"(\" close= \")\" > " +
" #{item}" +
" </foreach> " +
"</script>")
void batchUpdate(@Param("list")List<String> list, @Param("grade") String grade);
@Update("<script> update table_name set grade='三年级' " +
" <if test=\"name != null and name != '' \"> , name = #{name} </if> " +
" <if test=\"age != null \"> , age = #{age}</if>" +
" <if test=\"sex != null \"> , sex = #{sex}</if>" +
" where num = #{num}</script>")
void update(Student student);
@Delete(" DELETE FROM table_name ")
void deleteAll();
public class Student { /** * 自增主键 */ private Integer id; // 编号 private String num; // 年级 private String grade; private String name; // 班级名称 private String className; // 绰号 private String nickName; // 年龄 private Integer age; // 性别 private Boolean sex; // 插入时间 private date insertTime; // 更新时间 private date updateTime; }
这里只展示了我自己常用的方法,更多的标签用法同学们可以去官网或者百度寻找
^ _ ^
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。