开发环境
- IntelliJ IDEA 2018.2.4 x64
- MySQL 5.7
- JAVA8
- Spring Boot v2.0.6.RELEASE
1.使用IDEA创建项目
-
打开IDEA选择Spring Initializr
-
下一步,填写项目基本信息,这里我使用Gradle来构建项目。
-
下一步,选择依赖
-
下一步,选择保存路径
2. 数据库配置
创建了一张测试用的学生表,表结构如下。
测试数据
在application.properties
配置文件中写入连接参数,这里只填写基本的连接URL、用户名、密码、数据库驱动,第一行端口不加也行。
server.port=8383
spring.datasource.url=jdbc:mysql://localhost:3306/demo20181025?useSSL=false
spring.datasource.username=root \\用户名
spring.datasource.password=admin \\密码
spring.datasource.driverClassName = com.mysql.jdbc.Driver
3. 持久层
Student实体类
public class Student {
private Integer id;
private String name;
private String sex;
private int age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
SQL映射 定制化的SQL语句还是很灵活的
@Repository
@Mapper
public interface StudentMapper {
//查找全部学生
@Select("select * from Student")
ArrayList<Student> findAll();
//通过ID查找学生
@Select("select * from Student where id=#{id}")
Student findById(int id);
//模糊查询
@Select("select * from Student where name Like '%${_parameter}%' ")
ArrayList<Student> findByLike(String keyword);
//通过ID删除学生
@Delete("delete from Student where id=#{id}")
void DeleteById(int id);
//添加学生
@Insert("insert into Student(name,sex,age) values(#{name},#{sex},#{age})")
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", before = false, resultType = Integer.class)
int insert(Student student);
//通过ID修改学生姓名
@Update("update Student set name=#{name} where id=#{id}")
void update(Student student);
}
4. 控制器
HomeController添加@RestController
注解,返回JSON方便测试。
@RestController
public class HomeController {
private StudentMapper studentMapper;
public HomeController(StudentMapper studentMapper)
{
this.studentMapper=studentMapper;
}
@GetMapping("/findAll")
public ArrayList<Student> findAll()
{
return studentMapper.findAll();
}
@GetMapping("/findById")
public Student findById(int id)
{
return studentMapper.findById(id);
}
@GetMapping("/findByLike")
public ArrayList<Student> findByLike(String keyword)
{
return studentMapper.findByLike(keyword);
}
@GetMapping("/DeleteById")
public void DeleteById(int id)
{
studentMapper.DeleteById(id);
}
@GetMapping("/Insert")
public int Insert(Student student)
{
studentMapper.insert(student);
return student.getId();
}
@GetMapping("/Update")
public void Update(Student student)
{
studentMapper.update(student);
}
}
5. 测试
-
查找全部学生
http://localhost:8383/findAll
-
通过ID查找学生
http://localhost:8383/findById?id=1
-
模糊查询
http://localhost:8383/findByLike?keyword=小
通过ID删除学生
http://localhost:8383/DeleteById?id=4
删除成功无返回值
-
添加学生,成功返回ID
http://localhost:8383/Insert?name=vaemc&sex=男&age=20
通过ID修改学生姓名
http://localhost:8383/Update?name=小花&id=2
修改成功无返回值
-
最终的项目目录
6. 一些坑
- 进行模糊查询的时候,语句中的参数得用
${_parameter}
有知道原因的大佬留个言 - 找不到studentMapper 这个提示不管也可以正常运行,但对于强迫症来说还是很难受啊
Could not autowire. No beans of 'StudentMapper' type found. less... (Ctrl+F1)
Inspection info:Checks autowiring problems in a bean class.
在谷歌上搜索说是IDEA的BUG,在映射类上添加@Repository
注解即可解决