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 "删除失败";
}