之前在Spring Boot微服务框架搭建中已经讲了最简单的hello world例子的创建。接下来,将在那个例子的基础上,集成mybatis。
1. 添加依赖
首先,在pom.xml文件中添加对mybatis以及mysql驱动的依赖。MyBatis 1.3.1对应着Spring Boot 1.5.8 RELEASE的版本。不清楚的,可以在Spring Initializr时候,把mysql,mybatis选上,IDEA会自动选择相对应的版本。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
2.配置文件
在application.yml中添加配置。mapper-locations为mapper映射文件存放的位置,classpath:为resources文件夹。
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8
mybatis:
mapper-locations: classpath:mapper/*.xml
3.创建例子
1) 创建Entity
public class Student {
private String id;
private String pwd;
private String name;
private String sex;
private String year;
private String major;
......
省略getter和setter
......
}
2) 创建StudentMapper接口
@Mapper注解作用为扫描的时候自动会扫描到这个文件。
@Mapper
public interface StudentMapper {
List<Student> getList();
Student getStudentByName(String name);
}
3) 创建StudentMapper.xml文件
namespace需要对应StudentMapper接口的位置,id对应接口中的方法,resultType为返回的数据类型。其中#{name}为getStudentByName(String name)方法传入的参数。
<?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.hisense.mybatisserver.dao.StudentMapper" >
<select id="getList" resultType="com.hisense.mybatisserver.entity.Student">
SELECT * FROM student
</select>
<select id="getStudentByName" resultType="com.hisense.mybatisserver.entity.Student">
SELECT * FROM student a WHERE a.name = #{name}
</select>
</mapper>
4) 创建StudentService
Service需要为其添加@Service注解,该注解同后面的@Controller注解一样,确保该类能添加到容器中,能被自动注入。
@Service
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> getList() {
return studentMapper.getList();
}
@Override
public Student getStudentByName(String name) {
return studentMapper.getStudentByName(name);
}
}
4) 创建StudentController
@RestController
@RequestMapping("/stu")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("/list")
public List<Student> getStudentList(){
return studentService.getList();
}
@RequestMapping("/{name}")
public Student getByName(@PathVariable String name){
return studentService.getStudentByName(name);
}
}
5) 运行入口类
输入localhost:8080/stu/list,可以看到已经从数据库中提取出了信息。
测试另一方法
4.mapper的注解写法
public interface UserMapper {
@Select("SELECT * FROM users")
@Results({
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
@Result(property = "nickName", column = "nick_name")
})
List<UserEntity> getAll();
@Select("SELECT * FROM users WHERE id = #{id}")
@Results({
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
@Result(property = "nickName", column = "nick_name")
})
UserEntity getOne(Long id);
@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
void insert(UserEntity user);
@Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
void update(UserEntity user);
@Delete("DELETE FROM users WHERE id =#{id}")
void delete(Long id);
}
注解写mapper 参考spring boot(六):如何优雅的使用mybatis