Spring boot 整合 Mybatis 连接 Mysql
第三篇博客,长话短说,用注解的方式使用Mybatis而不用配置Xml文件。
我用的是Spring boot 2.1.7
首先要导入两个Jar:
1.spring-boot-starter-web,这个一般Spring boot web项目都有,没有的可自行使用Maven下载。
附上Maven:
提一下,不需要指定版本,因为 Spring boot 有约定各个Jar版本,我们无需再指定版本。
在Spring boot中: “ 约定优于配置 ” 。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.mysql-connector-java,这个是mysql连接驱动Jar。同样不需要指定版本。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.properties 中配置如下:
mybatis.type-aliases-package=com.example.demo.UserSexEnum
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/student_test?serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = 123456
账号密码数据库地址和数据库名称根据实际的填。
mybatis.type-aliases-package=与数据库交互的实体类
是不是很抽象?
看下我的数据库结构:
看下实体类:
下面写 Dao 层:
接口名:Mybatis(test嘛,随便取的)
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* 根据id查询
*
* @param idnum 需要查询的id
* @return UserSexEnum实体
*/
@Select("SELECT * FROM student01 WHERE id =#{idnum}")
@Results({
@Result(property = "id", column = "id", javaType = Integer.class),
@Result(property = "name", column = "stu_name"),
@Result(property = "idnum", column = "stu_idnum"),
@Result(property = "age", column = "stu_age"),
@Result(property = "height", column = "stu_height")
})
UserSexEnum getUser(Integer idnum);
/**
* 查询整张表
*
* @return 所有条数据
*/
@Select("SELECT * FROM student01")
@Results({
@Result(property = "id", column = "id", javaType = Integer.class),
@Result(property = "name", column = "stu_name"),
@Result(property = "idnum", column = "stu_idnum"),
@Result(property = "age", column = "stu_age"),
@Result(property = "height", column = "stu_height")
})
List<UserSexEnum> getAll();
/**
* 插入数据
*
* @param user 入参实体,我这边设置的是id自增不用传,#{} 取的是实体类对应字段
* @return 受影响行数
*/
@Insert("INSERT INTO student01(stu_name,stu_idnum,stu_age,stu_height) VALUES(#{name}, #{idnum}, #{age}, #{height})")
Integer insertV(UserSexEnum user);
/**
* 更新数据
*
* @param productCategory 根据 实体类的id 更新对应的字段,我这边示例更新的是height
* @return 受影响行数
*/
@Update("update student01 set stu_height = #{height} where id = #{id}")
Integer updateByObject(UserSexEnum productCategory);
/**
* @param productCategory 根据 实体类的id 删除对应的行
* @return 受影响行数
*/
@Delete("delete from student01 where id = #{id}")
Integer deleteByCategoryType(UserSexEnum productCategory);
Controller:
@Autowired
private Mybatis mybatis;
@GetMapping("/test/{id}")
public String test(@PathVariable("id") int idnum) {
UserSexEnum sexEnum = mybatis.getUser(idnum);
return sexEnum.toString();
}
@GetMapping("/test/all")
public String testall() {
List<UserSexEnum> sexEnum = mybatis.getAll();
StringBuilder stringBuffer = new StringBuilder();
for (UserSexEnum user : sexEnum
) {
stringBuffer.append(user);
}
return stringBuffer.toString();
}
@PostMapping("/test/insert")
public String insert(@RequestBody UserSexEnum sexEnum) {
return "受影响的行数:" + mybatis.insertV(sexEnum);
}
@PostMapping("/test/delete")
public String delete(@RequestBody UserSexEnum sexEnum) {
return "受影响的行数:" + mybatis.deleteByCategoryType(sexEnum);
}
@PostMapping("/test/updata")
public String updata(@RequestBody UserSexEnum sexEnum) {
return "受影响的行数:" + mybatis.updateByObject(sexEnum);
}
再提一点:
@Autowired 接口会有一个警告,不影响运行。
可以自行关闭这个警告。
欢迎大家留言~