文章目录
- Springboot数据访问(整合MyBatis)
-
- 1、Springboot基于配置使用MyBatis
- 2、Springboot基于注解使用MyBatis
Springboot数据访问(整合MyBatis)
首先,我们肯定要引入我们的依赖(场景):
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
mybatis场景帮我们把所有东西都配置好了。详细可以自己去查看他的源码,这里直接说用法。
1、完全基于配置使用MyBatis
2、完全基于注解使用MyBatis
3、混合基于配置和注解两种方式使用MyBatis(就是有些接口用注解的方式写,有些接口用配置文件的方式写)
顺便直接说下我们的最佳实战:
1、引入mybatis-starter
2、配置application.yaml,指定mapper-location位置
3、编写Mapper接口并标注@Mapper注解
4、简单方法直接用基于注解的方式
5、复杂方法编写mapper.xml进行绑定映射。
对于步骤3,给每个接口标注@Mapper注解的情况,我们也可以选择在主程序文件上通过添加注解@MapperScan扫描对应的所有存放Mapper接口的包。如此,便不再需要给每个接口加@Mapper注解了。
@MapperScan("com.example.boot.mapper")
@SpringBootApplication
public class SpringBootMysqlApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMysqlApplication.class,args);
}
}
下面,就两种方式说一下Springboot怎么使用MyBatis。
1、Springboot基于配置使用MyBatis
步骤:
1、导入MyBatis官方starter
2、编写mapper接口,添加@Mapper注解
3、编写sql映射文件并绑定mapper接口
4、在application.yaml中指定Mapper配置文件的位置
首先,我们写一个Student类:
package com.example.boot;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
}
然后写我们的mapper映射:
StudetMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.boot.mapper.StudentMapper">
<select id="findAll" resultType="com.example.boot.bean.Student">
select id,name,email,age from Student order by id
</select>
</mapper>
然后在yaml中配置mybatis的配置文件路径和mapper映射的路径。
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
之后写我们的StudentMapper接口:
package com.example.boot.mapper;
import com.example.boot.bean.Student;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface StudentMapper {
public List<Student> findAll();
}
再写我们的sql实现:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.boot.mapper.StudentMapper">
<select id="findAll" resultType="com.example.boot.bean.Student">
select id,name,email,age from Student order by id
</select>
</mapper>
然后写我们的StudentService类进行实现。
package com.example.boot.service;
import com.example.boot.bean.Student;
import com.example.boot.mapper.StudentMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class StudentService {
@Resource
StudentMapper studentMapper;
public List<Student> getAll(){
return studentMapper.findAll();
}
}
最后写我们的控制器方法:
package com.example.boot.controller;
import com.example.boot.bean.Student;
import com.example.boot.service.StudentService;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class JdbcController {
@Resource
StudentService studentService;
@GetMapping("/getAll")
public List<Student> getAll(){
return studentService.getAll();
}
}
运行:
想了解更多关于MyBatis原生写法的(比如增删改查、动态sql)可以看我的这几篇博客进行学习。(貌似只写了增加和查询的。。。。)
1、MyBatis框架快速入门
2、MyBatis动态SQL
2、Springboot基于注解使用MyBatis
为了排除刚才的影响,我们把刚才在全局配置文件配置的注释掉。
#mybatis:
# mapper-locations: classpath:mybatis/mapper/*.xml
然后按照步骤从头开始讲:
1、导入starter。
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
2、写我们的bean。
package com.example.boot.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
}
3、写mapper接口:(这里我们用@Select注解,直接把sql语句放进去了)
如果我们写的是插入语句,那么就用@Insert注解,删除语句,就用@Delete注解,修改就用@Update注解。可以理解成在mapper.xml文件中的对应的<select>、<insert>、<update>、<delete>标签。
package com.example.boot.mapper;
import com.example.boot.bean.Student;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface StudentMapper {
@Select("select * from student order by id")
public List<Student> findAll();
}
然后写我们的Service:
package com.example.boot.service;
import com.example.boot.bean.Student;
import com.example.boot.mapper.StudentMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class StudentService {
@Resource
StudentMapper studentMapper;
public List<Student> getAll(){
return studentMapper.findAll();
}
}
然后写我们的控制器方法:
package com.example.boot.controller;
import com.example.boot.bean.Student;
import com.example.boot.service.StudentService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class JdbcController {
@Resource
StudentService studentService;
@GetMapping("/getAll")
public List<Student> getAll(){
return studentService.getAll();
}
}
我们再编译一下,看我们的运行结果: