写在前面
Mybatis一个基于Java的持久层框架,它通过XML或注解的方式,将SQL语句和Java方法进行映射,使得开发者可以轻松地进行数据库操作。下面我会演示mybatis的配置与使用并实现数据库的增删改查。
1.准备测试数据
使用mybatis实现对数据库的增删改查之前,我们先创建一个数据库,,然后在数据库中新建一张表。我准备的数据(person表)如下(SQL Server):
2.创建SpringBoot项目
使用IDEA新建一个springboot项目:
在创建项目时导入依赖,也可以在项目创建后手动导入:
3.导入mybatis依赖
如果在创建项目时已导入依赖可以跳过这一步。
在pom.xml
文件中导入mybatis依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
导入sql server
的依赖:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
如果想要使用其他版本的mybatis依赖,请前往https://mvnrepository.com/
4.如何使用mybatis
4.1 配置mybatis
4.1.1 配置数据源
在application.properties
中配置数据库:
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:1433;database=数据库名称
spring.datasource.username=sa
spring.security.user.password=123456
也可以在application.yaml
或application.yml
文件中配置数据库:
spring:
datasource:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost:1433;database=数据库名称
username: sa
password: 123456
4.1.2 相关配置
#配置映射文件路径(使用xml配置文件映射SQL语句时设置),此处的mapper是自己在resources目录下创建的子目录
mybatis.mapper-locations=classpath:/mapper/*.xml
4,2 使用mybatis
4.2.1 创建实体类(entity)
在启动类的所在目录下创建实体类:
在Person
类中:
@Data
public class Person {
//Person类中的字段要与数据库对应
private int id;
private String name;
private int age;
private String gender;
}
4.2.2 创建mapper
在启动类的所在目录下创建mapper:
创建PersonMapper
对应的xml
文件,使用MybatisX
插件创建xml文件,这个插件可以在idea的plugins
中下载。
在PersonMapper
文件中将光标放在接口名上按下alt + enter
后选择[MybatisX] Generate mapper of xml
后如下图选择路径:
PersonMapper.xml
中情况:
4.2.3 定义查询方法并编写SQL语句
在PersonMapper
中定义查询所有Person信息的方法:
① xml形式
在方法名处按下alt + enter
后选择Generate statement
,在xml文件中自动生成对应的映射语句:
在<select>
标签中编写SQL语句:
select * from person
② 注解形式
直接在方法的上面使用@Select
注解:
@Select("select * from person")
4.2.4 创建controller并调用mapper
在启动类的所在目录下创建controller:
在PersonController
中:
@RestController
public class PersonController {
@Autowired
PersonMapper personMapper;
@GetMapping("/allPerson")
public List<Person> getAllPerson() {
return personMapper.getAllPerson();
}
}
4.2.5 在启动类中添加@MapperScan注解
在启动类添加@MapperScan注解可以使容器扫描到mapper:
@MapperScan(basePackages = "com.example.demo.mapper")
4.2.5 启动项目并使用controller
结果如下:
5.实现数据库的增删改查
5.1 查询
上面演示了获取全部person数据,这里举例通过id查询数据
,我们可以模仿这个例子实现其他方式的查询。
定义查询方法并编写SQL语句
//使用@Param("id")接收前端传来的参数
@Select("select * from person where id = #{id}")
Person getPersonById(@Param("id") int id);
调用:
@GetMapping("/byId/{id}")
public Person getPersonById(@PathVariable("id") int id) {
return personMapper.getPersonById(id);
}
结果:
5.2 新增
定义新增方法并编写SQL语句:
//由于id设置了自增,所以这里不需要传入id
@Insert("insert into person values (#{name},#{age},#{gender})")
void addPerson(Person person);
调用:
@GetMapping("/add")
public void addPerson(@RequestParam("name") String name,
@RequestParam("age") int age,
@RequestParam("gender") String gender) {
Person person = new Person();
person.setName(name);
person.setAge(age);
person.setGender(gender);
personMapper.addPerson(person);
}
使用:
查询所有person:
5.3 修改
这里我通过id修改person的信息,我们可以模仿这个例子通过名字来修改person信息,也可以修改person一个或多个字段信息。
定义修改方法并编写SQL语句:
//通过id修改person信息
@Update("update person set name = #{name}, age = #{age}, gender = #{gender} where id = #{id}")
void updatePerson(Person person);
调用:
@GetMapping("/update")
void updatePerson(@RequestParam("id") int id,
@RequestParam("name") String name,
@RequestParam("age") int age,
@RequestParam("gender") String gender) {
Person person = new Person();
person.setId(id);
person.setName(name);
person.setAge(age);
person.setGender(gender);
personMapper.updatePerson(person);
}
使用:
修改前:
修改后:
5.4 删除
这里我通过姓名删除person信息,我们也可以通过其他字段删除person信息
定义删除方法并编写SQL语句:
@Delete("delete from person where name = #{name}")
void deletePersonByName(@Param("name") String name);
调用:
@GetMapping("/del")
void deletePerson(@RequestParam("name") String name) {
personMapper.deletePersonByName(name);
}
使用:
删除前:
删除后:
写在后面
通过springboot整合mybatis,我们不仅可以进行简单的增删改查操作,还可以进行一些更高级的信息查询操作。通过接收前端传回来的信息对数据库进行相应的操作,可以让我们查询数据库更加方便快捷。