Mybatis的使用
使用MyBatis
MyBatis,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。其使用方式和jdbcTemplate基本是一致的
基本使用方法
- 添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
- 创建Mapper接口
public interface CustomerMapper {
@Select("select id,name,address from customer")
public List<Customer> getCustomers();
@Delete("delete from customer where id =#{id}")
public Integer updateCustomer(Customer customer);
@Update("update customer set name = #{name},address=#{address} where id =#{id}")
public Integer updateCustomer(Customer customer);
@Insert("insert into customer(id,name,address) values(#{id},#{name},#{address})")
public Integer saveCustomer(Customer customer);
}
这里是通过全注解的方式来写SQL,不写XML文件,当然也可以使用xml文件配置sql信息(可以使用IDE的插件完成,但要注意配置xml放置的位置),@Select、@Insert、@Update以及@Delete四个注解分别对应XML中的select、insert、update以及delete标签,@Results注解类似于XML中的ResultMap映射文件,另外使用@SelectKey注解可以实现主键回填的功能,即当数据插入成功后,插入成功的数据id会赋值到对象的id属性上
- 配置mapper扫描
直接在Mapper上面添加@Mapper注解 在启动类上添加Mapper扫描@MapperScan(basePackages = "com.kayak.springboot.mybatis.mapper"),通常我们会把Mapper都放到一起
- 使用
@RestController @RequestMapping("/customer")
public class CustomerController {
Logger logger = LoggerFactory.getLogger(CustomerController.class);
/** * 客户信息Mapper */ @Autowired
CustomerMapper customerMapper;
/**
* 查询所有的客户信息
*
* @return
*/
@RequestMapping(value = { "/", "" })
public List<Customer> allCuetomers() {
return customerMapper.getCustomers();
}
/**
* 根据id查询客户信息
*
* @param id
* @return
*/
@GetMapping("/{id}")
public Customer getCustomer(@PathVariable Long id) {
return customerMapper.getCustomerById(id);
}
/**
* 保存客户信息
*
* @param customer
* @return
*/
@PostMapping("/")
public Customer saveCustomer(@RequestBody Customer customer) {
int result = customerMapper.saveCustomer(customer);
return result == 1 ? customer : null;
}
/**
* 修改客户信息
*
* @param id
* @param name
* @param address
* @return
*/
@PutMapping("/{id}/{name}/{address}")
public Customer putCustomer(@PathVariable Long id, @PathVariable String name, @PathVariable String address) {
Customer customer = new Customer();
customer.setAddress(address);
customer.setName(name);
customer.setId(id);
int result = customerMapper.updateCustomer(customer);
if (result > 0) {
return customer;
}
return null;
}
/**
* 删除客户信息
*
* @param id
* @return
*/
@DeleteMapping(value = "/{id}")
public String deleteCustomer(@PathVariable Long id) {
int result = customerMapper.deleteCustomer(id);
if (result > 0) {
return "删除成功";
}
return "删除失败";
}