1、@Select 注解
@Select,主要在查询的时候使用,查询类的注解,一般简单的查询可以使用这个注解。
@Select({
"select",
"id, company_id, username, password, nickname, age, sex, job, face_image, province, ",
"city, district, address, auth_salt, last_login_ip, last_login_time, is_delete, ",
"regist_time",
亚马逊测评 www.yisuping.com
"from sys_user",
"where id = #{id,jdbcType=VARCHAR}"
})
@Results({
@Result(column="id", property="id", jdbcType=JdbcType.VARCHAR, id=true),
@Result(column="company_id", property="companyId", jdbcType=JdbcType.VARCHAR),
@Result(column="face_image", property="faceImage", jdbcType=JdbcType.VARCHAR),
@Result(column="auth_salt", property="authSalt", jdbcType=JdbcType.VARCHAR),
@Result(column="last_login_ip", property="lastLoginIp", jdbcType=JdbcType.VARCHAR),
@Result(column="last_login_time", property="lastLoginTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="is_delete", property="isDelete", jdbcType=JdbcType.INTEGER),
@Result(column="regist_time", property="registTime", jdbcType=JdbcType.TIMESTAMP)
})
User selectByPrimaryKey(String id);
注意:如果是多个参数,需要将 #后面的参数和传入的变量名保持一致。
2、@Insert 注解
@Insert,插入数据时使用,直接传入数据实体类,mybatis 会属性自动解析到对应的参数。所以需要将 #后面的参数和实体类属性保持一致。
@Insert({
"insert into sys_user (id, company_id, ",
"username, password, ",
"nickname, age, sex, ",
"job, face_image, ",
"province, city, ",
"district, address, ",
"auth_salt, last_login_ip, ",
"last_login_time, is_delete, ",
"regist_time)",
"values (#{id,jdbcType=VARCHAR}, #{companyId,jdbcType=VARCHAR}, ",
"#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, ",
"#{nickname,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, #{sex,jdbcType=INTEGER}, ",
"#{job,jdbcType=INTEGER}, #{faceImage,jdbcType=VARCHAR}, ",
"#{province,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, ",
"#{district,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, ",
"#{authSalt,jdbcType=VARCHAR}, #{lastLoginIp,jdbcType=VARCHAR}, ",
"#{lastLoginTime,jdbcType=TIMESTAMP}, #{isDelete,jdbcType=INTEGER}, ",
"#{registTime,jdbcType=TIMESTAMP})" })
intinsert(User record);
注意:需要将 #后面的参数和实体类属性保持一致。
3、@Update 注解
@Update,一般数据更新操作可以使用 @Update注解实现。
@Update({
"update sys_user",
"set company_id = #{companyId,jdbcType=VARCHAR},",
"username = #{username,jdbcType=VARCHAR},",
"password = #{password,jdbcType=VARCHAR},",
"nickname = #{nickname,jdbcType=VARCHAR},",
"age = #{age,jdbcType=INTEGER},",
"sex = #{sex,jdbcType=INTEGER},",
"job = #{job,jdbcType=INTEGER},",
"face_image = #{faceImage,jdbcType=VARCHAR},",
"province = #{province,jdbcType=VARCHAR},",
"city = #{city,jdbcType=VARCHAR},",
"district = #{district,jdbcType=VARCHAR},",
"address = #{address,jdbcType=VARCHAR},",
"auth_salt = #{authSalt,jdbcType=VARCHAR},",
"last_login_ip = #{lastLoginIp,jdbcType=VARCHAR},",
"last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},",
"is_delete = #{isDelete,jdbcType=INTEGER},",
"regist_time = #{registTime,jdbcType=TIMESTAMP}",
"where id = #{id,jdbcType=VARCHAR}" })
intupdateByPrimaryKey(User record);
4、@Delete 注解
@Delete 数据删除的注解
@Delete({
"delete from sys_user",
"where id = #{id,jdbcType=VARCHAR}" })
intdeleteByPrimaryKey(String id);
5、@Results和@Result注解
@Results 和 @Result 主要作用是,当有一些特殊的场景需要处理,查询的返回结果与期望的数据格式不一致时,可以将将数据库中查询到的数值自动转化为具体的属性或类型,,修饰返回的结果集。比如查询的对象返回值属性名和字段名不一致,或者对象的属性中使用了枚举等。如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
正在上传... 取消
@Select({ "select", "id, company_id, username, password, nickname, age, sex, job, face_image, province, ", "city, district, address, auth_salt, last_login_ip, last_login_time, is_delete, ", "regist_time", "from sys_user", "where id = #{id,jdbcType=VARCHAR}"})@Results({ @Result(column="id", property="id", jdbcType=JdbcType.VARCHAR, id=true), @Result(column="company_id", property="companyId", jdbcType=JdbcType.VARCHAR), @Result(column="face_image", property="faceImage", jdbcType=JdbcType.VARCHAR), @Result(column="auth_salt", property="authSalt", jdbcType=JdbcType.VARCHAR), @Result(column="last_login_ip", property="lastLoginIp", jdbcType=JdbcType.VARCHAR), @Result(column="last_login_time", property="lastLoginTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="is_delete", property="isDelete", jdbcType=JdbcType.INTEGER), @Result(column="regist_time", property="registTime", jdbcType=JdbcType.TIMESTAMP)
})
User selectByPrimaryKey(String id);
正在上传... 取消
上面的例子可以看到,数据库中的company_id 字段和实体类中定义的 companyId 属性的名称不一致,需要Result 转换。
以上就是项目中常用的增、删、改、查的操作, 其实这些在基本的方法不需要手动写,用前面讲过的mybatis generator 自动生成即可。讲这些主要是熟悉这些常用的注解。
传参方式
上面介绍了mybatis 常用的注解,如何实现增删改查的操作,相信很多人会有疑问了: mybatis 是如何将参数传递到 SQL 中的呢,都有哪几种传参方式呢? 下面就来一一介绍mybatis 注解版的传参方式。
1、直接传参
对于单个参数的方法,可直接使用 #{id} 的方式接收同名的变量参数。
1
2
@Delete("delete from sys_user where id = #{id,jdbcType=VARCHAR}")
int deleteByPrimaryKey(String id);
2、使用@Param 注解
@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。如果你的方法有多个参数,@Param 注解 会在方法的参数上就能为它们取自定义名字,参数则先以 "param" 作前缀,再加上它们的参数位置作为参数别名。例如, #{param1}、 #{param2},这个是默认值。如果注解是 @Param("person"),那么参数就会被命名为 #{person}。
正在上传... 取消
@Select("SELECT * FROM sys_user WHERE username = #{username} and password = #{password}")
List getListByUserSex(@Param("username") String userName, @Param("password") String password);// 不自定义param 时,默认使用 param + 参数序号 或者 0,1,值就是参数的值。@Select("SELECT * FROM sys_user WHERE username = #{param1} and password = #{param2}")
List getListByUserSex(String userName, String password);
正在上传... 取消
3、Map 传值
需要传送多个参数时,也可以考虑使用Map的形式。
@Select("SELECT * FROM sys_user WHERE username=#{username} AND password = #{password}")
List getListByNameAndSex(Map map);
调用时将参数依次加入到 Map 中即可。
Map param=new HashMap();
param.put("username","admin");
param.put("password","123456");
List users = userMapper.getListByNameAndSex(param)
4、使用pojo对象
使用pojo对象传参是比较常用的传参方式。像上面的insert、update 等方法。都是直接传入user对象。
正在上传... 取消
@Update({
"update sys_user",
"set company_id = #{companyId,jdbcType=VARCHAR},",
"username = #{username,jdbcType=VARCHAR},",
"password = #{password,jdbcType=VARCHAR},",
"nickname = #{nickname,jdbcType=VARCHAR},",
"age = #{age,jdbcType=INTEGER},",
"sex = #{sex,jdbcType=INTEGER},",
"job = #{job,jdbcType=INTEGER},",
"face_image = #{faceImage,jdbcType=VARCHAR},",
"province = #{province,jdbcType=VARCHAR},",
"city = #{city,jdbcType=VARCHAR},",
"district = #{district,jdbcType=VARCHAR},",
"address = #{address,jdbcType=VARCHAR},",
"auth_salt = #{authSalt,jdbcType=VARCHAR},",
"last_login_ip = #{lastLoginIp,jdbcType=VARCHAR},",
"last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},",
"is_delete = #{isDelete,jdbcType=INTEGER},",
"regist_time = #{registTime,jdbcType=TIMESTAMP}",
"where id = #{id,jdbcType=VARCHAR}"})intupdateByPrimaryKey(User record);
正在上传... 取消
以上,就是Mybatis 传参的四种方式。根据方法的参数选择合适的传值方式。