Mybatis的注解应用之映射声明
2016-07-03 15:49
295 查看
MyBatis提供了多种的注解映射,如SELECT、UPDATE、INSERT和DELETE。让我主详细来看一下这些映射的应用。
在insertStudent()方法中,我们注解了@Insert,这个将会返回受影响的行数通过insert的声明。
在前面我们使用xml的文件时,我们声明了自动生成主键的语句。这注解的方法中,我们同样可能用@Options的方法来注解声明生成主键,这个方法中包含useGeneratedKeys和keyProperty的参数。这两个参数就是要让数据可以形成auto_increment的列值,其值是已经的列中某个对象的列作为值。
这里的STUD_ID的列将会通过MYSQL的数据库自动生成,和它值将和studId的值是一样的。
有的数据库,如Oracle不能提供AUTO_INCREMENT列和我们需要使用SEQUENCE去形成主键。我们可以使用@Selectkey的注解去指定任何SQL的声明,而且可以作为主键的值。
@Insert("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,ADDR_ID, PHONE)
VALUES(#{studId},#{name},#{email},#{address.addrId},#{phone})")
@SelectKey(statement="SELECT STUD_ID_SEQ.NEXTVAL FROM DUAL",
keyProperty="studId", resultType=int.class, before=true)
int insertStudent(Student student);
这里我们应用@SelectKey来生成主键的值,并且储蓄在Student的studId的属性中。因为我们定义了before=true,所以在插入时,就已经生成好了主键了。
如果你使用SEQUENCE的触发器来生成主键,我们可以从sequence_name.currval中获取主键,之后执行插入语句。
在updateStudent()的方法中,我们使用了@Update的注解,并且会返回受影响的行。
deleteStudent()的方法将会返回受影响的行。
为了匹配上Student对象的实例,我们使用studId作为stud_id的别名。如何返回有多个行的值,那么将会报TooManyResultException的错。
1. @Insert
我们可以使用@Insert注解来声明一个INSERT的映射。package com.owen.mybatis.mappers; public interface StudentMapper { @Insert("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,ADDR_ID, PHONE) VALUES(#{studId},#{name},#{email},#{address.addrId},#{phone})") int insertStudent(Student student); }
在insertStudent()方法中,我们注解了@Insert,这个将会返回受影响的行数通过insert的声明。
在前面我们使用xml的文件时,我们声明了自动生成主键的语句。这注解的方法中,我们同样可能用@Options的方法来注解声明生成主键,这个方法中包含useGeneratedKeys和keyProperty的参数。这两个参数就是要让数据可以形成auto_increment的列值,其值是已经的列中某个对象的列作为值。
@Insert("INSERT INTO STUDENTS(NAME,EMAIL,ADDR_ID, PHONE) VALUES(#{name},#{email},#{address.addrId},#{phone})") @Options(useGeneratedKeys=true, keyProperty="studId") int insertStudent(Student student);
这里的STUD_ID的列将会通过MYSQL的数据库自动生成,和它值将和studId的值是一样的。
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); mapper.insertStudent(student); int studentId = student.getStudId();
有的数据库,如Oracle不能提供AUTO_INCREMENT列和我们需要使用SEQUENCE去形成主键。我们可以使用@Selectkey的注解去指定任何SQL的声明,而且可以作为主键的值。
@Insert("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,ADDR_ID, PHONE)
VALUES(#{studId},#{name},#{email},#{address.addrId},#{phone})")
@SelectKey(statement="SELECT STUD_ID_SEQ.NEXTVAL FROM DUAL",
keyProperty="studId", resultType=int.class, before=true)
int insertStudent(Student student);
这里我们应用@SelectKey来生成主键的值,并且储蓄在Student的studId的属性中。因为我们定义了before=true,所以在插入时,就已经生成好了主键了。
如果你使用SEQUENCE的触发器来生成主键,我们可以从sequence_name.currval中获取主键,之后执行插入语句。
@Insert("INSERT INTO STUDENTS(NAME,EMAIL,ADDR_ID, PHONE) VALUES(#{name},#{email},#{address.addrId},#{phone})") @SelectKey(statement="SELECT STUD_ID_SEQ.CURRVAL FROM DUAL", keyProperty="studId", resultType=int.class, before=false) int insertStudent(Student student);
2. @Update
我们可以使用@Update注解来声明UPDATE。@Update("UPDATE STUDENTS SET NAME=#{name}, EMAIL=#{email}, PHONE=#{phone} WHERE STUD_ID=#{studId}") int updateStudent(Student student);
在updateStudent()的方法中,我们使用了@Update的注解,并且会返回受影响的行。
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); int noOfRowsUpdated = mapper.updateStudent(student);
3. @Delete
我们可以用@Delete来实现DELETE的声明。@Delete("DELETE FROM STUDENTS WHERE STUD_ID=#{studId}") int deleteStudent(int studId);
deleteStudent()的方法将会返回受影响的行。
4. @Select
我们可以使用@Select注解来实现SELECT的映射 。package com.owen.mybatis.mappers; public interface StudentMapper { @Select("SELECT STUD_ID AS STUDID, NAME, EMAIL, PHONE FROM STUDENTS WHERE STUD_ID=#{studId}") Student findStudentById(Integer studId); }
为了匹配上Student对象的实例,我们使用studId作为stud_id的别名。如何返回有多个行的值,那么将会报TooManyResultException的错。
相关文章推荐
- 快速排序
- 解决ubuntu系统中文拼音输入法输入错误的问题
- HTML5+规范:gallery(管理系统相册)
- 无责任共享 Coursera、Udacity 等课程视频【百度云】
- 小米范工具系列之九:小米范子域名收集工具
- codeforces_679C. Bear and Square Grid(滑块)
- redis列表操作
- Jsoup
- 选择器
- php 部署到heroku上
- AJAX入门
- Android中编辑打电话
- LRU设计
- 从浅入深剖析angular表单验证
- python切片的使用
- 03、函数
- 数据库基础知识汇总
- iOS程序的生命周期
- (转)Ubuntu中使用dpkg安装deb文件提示依赖关系问题,仍未被配置
- php HEREDOC相关介绍与使用