一、前言
之前写过 [增删改查] SpringBoot + MyBatis (配置版)
,但是 SpringBoot 是建议我们尽量使用注解,注解式也是未来的潮流
下面使用 注解式的 SpringBoot + MyBatis ,写 Dao 层,有使用 SpringData + JPA 写 Dao 层的感觉
——基本用法都注释在代码里边了,很简单的
二、代码
阅读代码,首先应是熟悉各个文件的位置以及相互的联系
1、实体
package com.cun.entity;
/**
* User 实体
* @author linhongcun
*
*/
public class User {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2、dao 接口+实现
package com.cun.dao;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Qualifier;
import com.cun.entity.User;
/**
* User 的 dao层
* ①注意和 SSM 中不同的是dao接口要 @Mapper
* ②阿里巴巴建议接口不要写 public,保持简洁
* @author linhongcun
*
*/
@Mapper
public interface UserDao {
/**
* 1、获取所有数据
* @return
*/
@Select("select * from user")
List<User> findAll();
/**
* 2、根据id查询一条记录
* @param id
* @return
*/
@Select("select * from user where id=#{id}")
User getUserById(Integer id);
/**
* 3、增加一条记录
* @param user
*/
@Insert("insert into user(userName,password) values(#{userName},#{password}) ")
void insertUser(User user);
/**
* 4、更新一条记录
* @param user
*/
@Update("update user set userName=#{userName},password=#{password} where id=#{id}")
void updateUser(User user);
/**
* 5、删除一条记录
* @param id
*/
@Delete("delete from user where id=#{id}")
void deleteUser(Integer id);
}
4、Service 接口
package com.cun.serevice;
import java.util.List;
import com.cun.entity.User;
/**
* User 事务层接口
* ①阿里巴巴建议接口不要写 public,保持简洁
* @author linhongcun
*
*/
public interface UserService {
/**
* 1、获取所有用户
* @return
*/
List<User> findAll();
/**
* 2、根据 id 查询一条记录
* @param id
* @return
*/
User getUserById(Integer id);
/**
* 3、增加一条记录
* @param user
*/
void insertUser(User user);
/**
* 4、更新一条记录
* @param user
*/
void updateUser(User user);
/**
* 5、删除一条记录
* @param id
*/
void deleteUser(Integer id);
}
5、Service 实现
package com.cun.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cun.dao.UserDao;
import com.cun.entity.User;
import com.cun.serevice.UserService;
/**
* User 事务实现类
* @author linhongcun
*
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findAll() {
return userDao.findAll();
}
@Override
public User getUserById(Integer id) {
return userDao.getUserById(id);
}
@Override
public void insertUser(User user) {
userDao.insertUser(user);
}
@Override
public void updateUser(User user) {
userDao.updateUser(user);
}
@Override
public void deleteUser(Integer id) {
userDao.deleteUser(id);
}
}
6、Controller
package com.cun.controllser;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cun.entity.User;
import com.cun.serevice.UserService;
/**
* User 控制层
* @author linhongcun
*
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 1、查询所有 URl:http://localhost:8080/user/findAll
* @return
*/
@RequestMapping("/findAll")
public List<User> findAll() {
return userService.findAll();
}
/**
* 2、查询一条记录 URl:http://localhost:8080/user/getUserById?id=39
* @param id
* @return
*/
@RequestMapping("/getUserById")
public User getUserById(Integer id) {
return userService.getUserById(id);
}
/**
* 3、增加一条记录 URl:http://localhost:8080/user/insertUser?userName=linhongcun&password=123
* @param user
*/
@RequestMapping("/insertUser")
public void insertUser(User user) {
userService.insertUser(user);
}
/**
* 4、更新一条记录 URl:http://localhost:8080/user/updateUser?id=43&userName=linhongcun&password=123
* @param user
*/
@RequestMapping("/updateUser")
public void updateUser(User user) {
userService.updateUser(user);
}
/**
* 5、删除一条记录 URl:http://localhost:8080/user/deleteUser?id=43
* @param id
*/
@RequestMapping("/deleteUser")
public void deleteUser(Integer id) {
userService.deleteUser(id);
}
}
7、SpringBoot 配置
#MySQL
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 123
三、小结
1、为了测试简单,这里就不使用 REST 风格了,否则得写一些前端的 ajax(当然也可以使用 postman/swagger)
2、以上的接口都经过测试,完全没有问题
3、使用dao有效:
①可以使用@Mapper注解。
② 配置@MapperScan在扫描路径在application类中。
四、其他 20180529
@MapperScan("com.cun.dao") //可有可无
@SpringBootApplication
public class SpringBootMyBatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMyBatisApplication .class, args);
}
}