SpringBoot整合Mybatis(基于XML方式)
以往都是整合Spring+SpringMVC+Mybatis这个三个框架,今天用SpringBoot整合了Mybatis,发现这个比之前的SSM的整合方便的太多,省去大量的配置文件。因为Spring Boot中对此做了进一步的简化,使MyBatis基本上可以做到开箱即用,这也为什么SpringBoot这么火的原因,本文就来看看在Spring Boot中MyBatis要如何使用,话不多说,直接进入正题。
1、首先创建一个SpringBoot项目。
2、创建成功之后查看一下pom里面的配置信息。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.thr</groupId> <artifactId>springboot-mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-mybatis</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3、修改SpringBoot的配置文件
注意:我们不使用默认生成的application.properties文件,而使用更加简洁的application.yml文件。将resource文件夹下原有的application.properties文件删除,创建application.yml配置文件(注:SpringBoot底层会把application.yml文件解析为application.properties),创建的application.yml配置如下所示。
#配置端口 server: port: 8080 #数据库连接信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: 123456 #mybatis的相关凭配置 mybatis: #mapper的xml位置和别名 mapper-locations: classpath:mapper/*.xml type-aliases-package: com.thr.entity #开启驼峰命名 configuration: map-underscore-to-camel-case: true
4、创建数据库。
-- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
5、然后在src/java/main下分别创建entity实体类、Dao接口、Service接口、ServiceImpl实现类和Controller控制类。在src/java/resources下创建mapper映射文件(mapper/UserMapper.xml)。
--User实体类:
public class User { private Long id;//编号 private String username;//用户名 private String password;//密码 private Integer age;//年龄 private String address;//地址 //getter、setter省略 }
--UserMapper接口:
@Repository public interface UserMapper { //查询所有用户信息 List<User> findAll(); //根据id查询用户信息 User findUserById(Integer id); //添加用户信息 void addUser(User user); //修改用户信息 void updateUserById(User user); //删除用户信息 void deleteUserById(Integer id); }
--UserService接口:和上面UserMapper接口中的方法是一样的,所有就不贴了。
--UserServiceImpl实现类:
@Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> findAll() { return userMapper.findAll(); } @Override public User findUserById(Integer id) { return userMapper.findUserById(id); } @Override public void addUser(User user) { userMapper.addUser(user); } @Override public void updateUserById(User user) { userMapper.updateUserById(user); } @Override public void deleteUserById(Integer id) { userMapper.deleteUserById(id); } }
--UserController控制类:
@RestController @RequestMapping(value = "/user") public class UserController { @Autowired private UserService userService; /** * 查询所有用户信息 * @return */ @GetMapping(value = "/findAll") public List<User> findAll(){ List<User> userList = userService.findAll(); return userList; } /** * 根据id查询用户信息 * @param id * @return */ @GetMapping(value = "/findUserById/{id}") public User findUserById(@PathVariable(value = "id") Integer id){ return userService.findUserById(id); } /** * 添加用户信息 * @param user */ @PostMapping(value = "/addUser") public void addUser(User user){ user.setUsername("John"); user.setPassword("123456"); user.setAge(22); user.setAddress("中国重庆"); userService.addUser(user); } /** * 修改用户信息 * @param user */ @PutMapping(value = "/updateUserById") public void updateUserById(User user){ user.setId(3L); user.setUsername("Marry"); user.setPassword("123456"); user.setAge(20); user.setAddress("中国湖南"); userService.updateUserById(user); } /** * 删除用户信息 * @param id */ @DeleteMapping(value = "/deleteUserById/{id}") public void deleteUserById(@PathVariable(value = "id") Integer id){ System.out.println("Delete请求..."); userService.deleteUserById(id); } }
--UserMapper.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.thr.dao.UserMapper"> <select id="findAll" resultType="com.thr.entity.User"> select * from t_user; </select> <select id="findUserById" resultType="com.thr.entity.User"> select * from t_user where id = #{id}; </select> <insert id="addUser" parameterType="com.thr.entity.User"> insert into t_user (username,password,age,address) values (#{username},#{password},#{age},#{address}); </insert> <update id="updateUserById" parameterType="com.thr.entity.User"> update t_user set username=#{username},password=#{password},age=#{age},address=#{address} where id=#{id} </update> <delete id="deleteUserById" parameterType="int"> delete from t_user where id=#{id} </delete> </mapper>
6、项目整体目录。
最后打开类SpringbootMybatisApplication类,这个是SpringBoot的启动类。我们需要在里面添加一个注解@MapperScan
注意:@MapperScan("com.thr.dao")这个注解非常的关键,这个对应了项目中mapper(dao)所对应的包路径,很多同学就是这里忘了加导致异常的。如果不在启动类这里加,也可以在Mapper类上面添加注解@Mapper,建议使用上面那种,不然每个Mapper加个注解也挺麻烦的。
@SpringBootApplication(scanBasePackages={"com.thr.*"}) @MapperScan("com.thr.dao") public class SpringbootMybatisApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMybatisApplication.class, args); } }
7、运行启动类,我们使用POSTMAN进行测试。
(1)、查询所有用户信息:(GET请求)http://localhost:8080/user/findAll
(2)、根据id查询用户信息:(GET请求)http://localhost:8080/user/findUserById/1
(3)、添加用户信息:(POST请求)http://localhost:8080/user/addUser
(4)、根据id修改用户信息:(PUT请求)http://localhost:8080/user/updateUserById
(5)、根据id删除用户:(DELETE请求)http://localhost:8080/user/deleteUserById/4