java之springboot整合mybatis
- 2019 年 11 月 14 日
- 筆記
今天我们来分享一下操作数据库常用的ORM框架-mybatis,其实整理这篇文章是自己想写点内容进来,因为原来写的程序代码都放在了gitHub上面,自己之前写的文章大部分都是java的一些内容,没有涉及到框架的内容。
这样自己觉得可以帮助需要的人尽快入门一些框架基础吧。希望可以对需要的人有所帮助,避免找了好长时间是跑不起来的示例程序,费时费力不说,心情估计也是会受到一些影响,所以这篇文章就出现了。
首先自己使用的工具是idea,java版本是1.8的。好了我们开始我们的教程吧。首先你要会在idea上面建立一个web项目,不会的可以看下这篇文章java之JdbcTemplate入门教程,这篇文章可以帮你快速建立一个可以跑起来的web项目,希望可以帮助到你,接下来我们看下示例程序了。
首先,我们的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.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.wpw</groupId> <artifactId>mybatis-sqlsession</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatis-sqlsession</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-data-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.1</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> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
其实pom文件里面配置的都是我们环境需要依赖的jar包,这样我们的项目配置信息就配置好了一部分,接下来,我们需要配置一下连接mysql环境信息的配置。
在application.properties配置文件里面进行配置。
server.port=8080 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://自己mysql服务器ip地址:3306/mybatis?characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 ##mybatis配置信息 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.wpw.mybatissqlsession mybatis.configuration.map-underscore-to-camel-case=true
好了,环境信息大致上就是这些,接下来我们就开始提供我们的示例程序。
首先,一般web项目的请求流程就是controller接口层,service业务逻辑层,dao数据库层。
我们看下我们的controller层写的代码吧,主要是调用UserService接口提供的方法进行查询数据库的数据,由于本篇文章只是写了一下查询的用法,不涉及到其它的操作,因为在我看来,你会了查询就会了其它的操作。
package com.wpw.mybatissqlsession; import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author 微信公众号~后端Coder */ @RestController public class UserController { private final UserService userService; private final SqlSession sqlSession; @Autowired public UserController(UserService userService, SqlSession sqlSession) { this.userService = userService; this.sqlSession = sqlSession; } /** * 获取集合数据User信息 * * @return 返回集合User数据 */ @GetMapping(value = "/findAll") public List<User> findAll() { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.findAll(); if (!CollectionUtils.isEmpty(userList)){ for (User user:userList) { System.out.println(user); } } return userService.findAll(); } @GetMapping(value = "/findAllUser") public List<User> findAllUser() { return userService.findAllUser(); } }
然后我们继续看下我们的业务逻辑层接口提供的方法。
package com.wpw.mybatissqlsession; import java.util.List; public interface UserService { /** * 返回集合的数据 * @return 返回查询到的集合数据 */ List<User> findAll(); /** * 返回集合的数据 * @return 返回查询到的集合数据 */ List<User> findAllUser(); }
一般我们定义一个接口都会使用一个实现类去实现这个接口,这样解耦合就非常明确了,希望这句话可以帮助到你。
package com.wpw.mybatissqlsession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class UserServiceImpl implements UserService{ @Resource @Autowired private UserMapper userMapper; public UserServiceImpl(UserMapper userMapper) { this.userMapper = userMapper; } @Override public List<User> findAll() { return userMapper.findAll(); } @Override public List<User> findAllUser() { return userMapper.findAllUser(); } }
上面的业务逻辑层基本上就结束了,接下来我们看下操作数据库数据的dao层,也就是UserMapper这个接口。
package com.wpw.mybatissqlsession; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Component; import org.springframework.stereotype.Repository; import java.util.List; /** * @author pc */ @Component @Repository @Mapper public interface UserMapper { /** * 返回集合数据 * * @return 返回集合User数据 */ List<User> findAll(); @Select(value = "select * from user ") @Results({ @Result(column = "id", property = "id"), @Result(column = "username", property = "username"), @Result(column = "password", property = "password") }) List<User> findAllUser(); }
上面两个方法都是查询user表数据的内容,一个是基于注解的方式实现的,一个基于xml方式操作的,其实这两种方式是大部分企业常用的,但是自己喜欢注解这种方式,所以自己写了注解的方式提供给需要的人。
我们的UserMapper.xml放在的位置是在resoureces下面的,在resources文件下下面我们定义mapper文件夹,在mapper文件夹下面我们定义一个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.wpw.mybatissqlsession.UserMapper"> <select id="findAll" resultType="com.wpw.mybatissqlsession.User"> select * from user; </select> </mapper>
注意一点,我们定义的UserMapper.xml文件的名字要和上面的UserMapper接口的名字保持一致,这是需要注意的点。
UserMapper.xml文件的位置放置其实是随意的,但是你需要在上面连接mysql服务器配置里面进行相应的配置,不然会容易出现错误。也就是下面这段配置信息。
##mybatis配置信息 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.wpw.mybatissqlsession mybatis.configuration.map-underscore-to-camel-case=true
上面的classpath路径值得就是resources文件下下的路径,这个需要注意。
好了,上面的内容就配置好了,到这还没结束,还有一个实体类定义,一个表结构信息。
package com.wpw.mybatissqlsession; public class User { private Long id; private String username; private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + ''' + ", password='" + password + ''' + '}'; } }
上面的是实体类的定义,下面的是需要的表结构定义语句。
create table user( -> id int(11), -> name varchar(32), -> age int(3))engine=InnoDB;
到这里我们整个mybatis的流程就结束了,看下我们如何访问的接口的。
http://localhost:8080/findAllUser http://localhost:8080/findAll 注意一点,你需要在自己的数据库表里面进行查询数据
今天分享的内容就到这里结束了,上面的代码配置好,就可以运行了。