上篇项目的基础上,可以直接在Mapper接口中通过注记的方式写SQL,无需再编写对应的XxxMapper.xml,可通过@Select,@Delete,@Update ,@Insert,@ResultMap,@Results,@Result等注解完成SQL编写。
其中UserMapper.java代码如下:
package com.me.mybaitis.mapper;
@Repository
public interface UserMapper {
User getUserById(Integer id);
/**
* 新增注解方式
* @Results各个属性的含义,id为当前结果集声明唯一标识,value值为结果集映射关系,
* @Result代表一个字段的映射关系,column指定数据库字段的名称,property指定实体类属性的名称,jdbcType数据库字段类型,
* @Result里的id值为true表明主键,默认false;
* @Results注解必须与@Select查询同方法在一起,不可以单独定义@Results注解,会不被识别的。定义后,在其他方法处,便可以使用该@Results定义的resultMap了
*/
@Select("select * from user where id = #{id}")
@Results(
id="UserResult",
value = {
@Result(column = "id",property = "id",id = true),
@Result(column = "name",property = "name",jdbcType = JdbcType.VARCHAR,javaType = String.class),
@Result(column = "age",property = "age",jdbcType = JdbcType.INTEGER,javaType = Integer.class),
@Result(column = "email",property = "email",jdbcType = JdbcType.VARCHAR,javaType = String.class),
@Result(column = "create_time",property = "createTime",jdbcType = JdbcType.DATE,javaType = Date.class),
@Result(column = "update_time",property = "updateTime",jdbcType = JdbcType.DATE,javaType = Date.class),
}
)
User selectUserById(Integer id);
/**
* 使用@ResultMap来引用映射结果集,其中value可省略。上面定义的ResultMap可复用
*/
@Select("select * from user where name = #{name}")
@ResultMap(value = "UserResult")
List<User> getUserByName(String name);
}
UserSevice同步修改:
package com.me.mybaitis.service;
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public User getUserById(Integer id) {
return userMapper.getUserById(id);
}
public User selectUserById(Integer id) {
return userMapper.selectUserById(id);
}
public List<User> getUserByName(String name) {
return userMapper.getUserByName(name);
}
}
UserController:
package com.me.mybaitis.controller;
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getuser/{id}")
public String getUser(@PathVariable Integer id) {
String s = userService.getUserById(id).toString();
return s;
}
@GetMapping("/seluser/{id}")
public String selectUser(@PathVariable Integer id) {
return userService.selectUserById(id).toString();
}
@GetMapping(value = "/getuserbyname/{name}")
public List<User> getUsersByName(@PathVariable String name) {
List<User> userList = userService.getUserByName(name);
userList.forEach(System.out::println);
return userList;
}
}