本实例适合刚开始学习spring boot的有一定开发基础的同学们,使用当前比较流行的IntelliJ IDEA 2019开发工具,利用spring boot框架,采用Java语言,结合MySQL数据库设计实现用户User的增加、读取、更新、删除。首先,我们先了解一下基本概念。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。而SpringBoot是一个全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。DEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主,支持HTML,CSS,PHP,MySQL,Python等。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
好了,简单了解了这些概念后,下面我们进入主题。
开发工具
IntelliJ IDEA 2019.1.1 x64
新建工程
选择左侧的Spring Initializr,jdk要求1.8及以上,选择默认的Default下一步:
我们可以不改这些信息直接下一步,如果想改名字可以自己修改Group及Artifact,和最下边的package包名,这里我把Group改成com,Artifact改为sjzeis,选择下一步。
选择项目所需要的依赖,这个页面是选择你工程中需要用到的依赖,因为我们的目标是web项目使用mybatis所以在web模块中勾选Spring Web,在SQL中依次勾选Jdbc API、Mybatis Framework、Mysql Driver。然后下一步直到finish即可。
接着项目就会下载我们需要的依赖,如果之前没有下过,可能会稍等几分钟。
配置项目相关信息
来看下建好后的pom.xml文件,上一步选择的依赖,在pom.xml文件中 已经自动添加到我们的文件中了。下面为本项目的pom.xml文件内容。
<?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</groupId> <artifactId>sjzeis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sjzeis</name> <description>sjzeis project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- jdbc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <!-- mysql --> <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> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
修改配置文件
Spring Boot通过pom.xml中引入模块化的Stater,使得常规的开发场景可以很快把应用搭建起来。在使用Spring Boot的过程中,除了可以在pom.xml中配置一些内容外,一些项目相关的配置也可以在application.properties中通过配置来完成。
application.properties文件为默认项目配置文件,默认为空的,我们可以在配置文件中配置端口、名字等一般属性,也可以配置自定义属性、参数引用、多环境配置等,可以参考 https://www.jianshu.com/p/c023083f51b4 一文说明介绍。 application.properties文件在项目-src-main-resources下。
本项目如果使用application.properties文件,可以在文件中添加端口、数据源、mydatis等相关数据,下面为文件内容。
server.port=8080 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root mybatis.mapper-locations=classpath:mapper/*Mapper.xml
但是还是习惯yml标记语言文件的天然的树状结构,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读。在IDEA下书写起来也比较方便,其实SpringBoot底层会把application.yml文件解析为application.properties。所以将本项目原有的application.properties文件重构-重命名为:application_bak.properties,或者直接删除即可,这样项目不再加载该文件。接下来创建application.yml和application-dev.yml配置文件。在一个项目中可以配置多套环境,便于在团队开发中可以做到项目的分离独自开发,再整合的形式。在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
- application-dev.properties:开发环境
- application-test.properties:测试环境
- application-prod.properties:生产环境
application.yml为主加载配置文件,内容如下:
spring: profiles: active: dev
application-dev.yml为主环境说明文件,内容如下:
server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root mybatis: mapper-locations: classpath:mapper/*Mapper.xml
项目在加载时自动加载application.yml配置文件,根据配置文件中的spring.profiles.active=dev,就会再加载application-dev.yml配置文件中的内容。上面文件配置了端口号8080,数据源的驱动类、地址、登录用户名和口令,以及mybatis映射mapper路径的指定。特别需要注意的是:本项目中driver-class-name: com.mysql.cj.jdbc.Driver,是新版本org.springframework.boot和org.mybatis.spring.boot中规定的驱动,老版本的写driver-class-name: com.mysql.jdbc.Driver。
项目编写及业务流程
User数据库的定义
创建User实体类实现业务流程
一、创建项目路径包来,展示业务流程。在项目src-main-java-com-sjzeis下分别创建包:controller、entity、mapper、service,用来实现控制层、实体层、映射层、业务层。这里面简单介绍一下业务流程及各层业务的作用如下:
1. entity实体层(别名: model层 ,domain层),用于存放我们的实体类,与数据库中的属性值基本保持一致,实现set和get的方法。如:user表的实体User。
2. mapper映射层(别名:dao层),用于对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与*Mapper.xml内相互一一映射。如:public interface UserMapper {...}。
3. service业务层,用于给controller层的类提供接口进行调用。一般就是自己写的方法封装起来,就是声明一下,存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。如:public class UserService {...}。
4. controller控制层(别名:web 层),用于负责具体模块的业务流程控制,需要调用service逻辑设计层的接口来控制业务流程。因为service中的方法是我们使用到的,controller控制器导入service层,因为service中的方法是我们使用到的,controller通过接收前端传过来的参数进行业务操作,在返回一个指定的路径或者数据表。如:public class UserController {...}。
二、在src-main-resources下创建mapper包用于存放*Mapper.xml文件
项目结构如图:
如果想直接创建对应的包而不是目录,可以在java目录上点击鼠标右键,选择标记目标目录为-测试源 根,如图:
创建entity实体类User
package com.sjzeis.entity; public class User { private int userid; private String username; private String password; public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } 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{" + "userid=" + userid + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
创建Mapper映射操作UserMapper类
package com.sjzeis.mapper; import com.sjzeis.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { public List<User> findAllUser(); public List<User> findUserByUserId(int userid); }
创建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.sjzeis.mapper.UserMapper"> <resultMap id="result" type="com.sjzeis.entity.User"> <result column="userid" jdbcType="INTEGER" property="userid" /> <result column="username" jdbcType="VARCHAR" property="username" /> <result column="password" jdbcType="VARCHAR" property="password" /> </resultMap> <select id="findAllUser" resultType="com.sjzeis.entity.User"> select * from users; </select> <select id="findUserByUserId" resultType="com.sjzeis.entity.User"> select * from users where userid=#{userid}; </select> </mapper>
注意该文件放在resources目录下的mapper包中,具体包名位置(namespace)要和上边的映射UserMapper类对应 。
创建service业务UserService类
package com.sjzeis.service; import com.sjzeis.entity.User; import com.sjzeis.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired(required=false) public UserMapper userMapper; public List<User> findAllUser(){ return userMapper.findAllUser(); } public List<User> findUserByUserId(int userid){ return userMapper.findUserByUserId(userid); } }
创建 controller控制层UserController类
package com.sjzeis.controller; import com.sjzeis.entity.User; import com.sjzeis.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/getAllUser") public List<User> findAll(){ return userService.findAllUser(); } @RequestMapping("/getUserByUserID/{userid}") public List<User> findUserByUserId(@PathVariable int userid){ return userService.findUserByUserId(userid); } }
最终框架结构
测试
通过点击IDEA右上角的启动按钮,或者在SjzeisApplication类中鼠标右键选择运行启动main方法,来启动项目。
地址栏输入 http://localhost:8080/user/getAllUser/,显示如下:
地址栏输入 http://localhost:8080/user/getUserByUserID/1,显示如下:
通过测试的数据显示,项目测试成功!
以上为spring boot 整合mybatis实现的User读取,接下来是添加UserMapper类的增加、更新和删除方法,配置UserMapper.xml文件,添加UserService和UserController相关功能。完整代码如下。
完整UserMapper类
package com.sjzeis.mapper; import com.sjzeis.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { public List<User> findAllUser(); public List<User> findUserByUserId(int userid); public List<User> findUserByUsername(String username); public int insertUser(User user); public int updateUser(User user); public int deleteUser(User user); }
完整UserService类
package com.sjzeis.service; import com.sjzeis.entity.User; import com.sjzeis.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired(required=false) public UserMapper userMapper; public List<User> findAllUser(){ return userMapper.findAllUser(); } public List<User> findUserByUserId(int userid){ return userMapper.findUserByUserId(userid); } public List<User> findUserByUsername(String username){ return userMapper.findUserByUsername(username); } public User insertUser(User user){ userMapper.insertUser(user); return user; } public int updateUser(User user){ return userMapper.updateUser(user); } public int deleteUser(User user){ return userMapper.deleteUser(user); } }
完整UserController类
package com.sjzeis.controller; import com.sjzeis.entity.User; import com.sjzeis.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/getAllUser") public List<User> findAll(){ return userService.findAllUser(); } @RequestMapping("/getUserByUserID/{userid}") public List<User> findUserByUserId(@PathVariable int userid){ return userService.findUserByUserId(userid); } @RequestMapping("/getUserByUsername/{username}") public List<User> findUserByUsername(@PathVariable String username){ return userService.findUserByUsername(username); } @RequestMapping("/insertUser") public User insertUser(User user){ return userService.insertUser(user); } @RequestMapping("/updateUser") public int updateUser(User user){ return userService.updateUser(user); } @RequestMapping("/deleteUser") public int deleteUser(User user){ return userService.deleteUser(user); } }
完整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.sjzeis.mapper.UserMapper"> <resultMap id="result" type="com.sjzeis.entity.User"> <result column="userid" jdbcType="INTEGER" property="userid" /> <result column="username" jdbcType="VARCHAR" property="username" /> <result column="password" jdbcType="VARCHAR" property="password" /> </resultMap> <select id="findAllUser" resultType="com.sjzeis.entity.User"> select * from users; </select> <select id="findUserByUserId" resultType="com.sjzeis.entity.User"> select * from users where userid=#{userid}; </select> <select id="findUserByUsername" resultType="com.sjzeis.entity.User"> select * from users where username=#{username}; </select> <insert id="insertUser" parameterType="com.sjzeis.entity.User" keyProperty="userid" useGeneratedKeys="true"> insert into users(username,password) values (#{username},#{password}); </insert> <update id="updateUser" parameterType="com.sjzeis.entity.User"> update users set username=#{username},password=#{password} where userid=#{userid}; </update> <delete id="deleteUser" parameterType="com.sjzeis.entity.User"> delete from users where userid=#{userid}; </delete> </mapper>
启动项目运行测试如下。
以上为本实例的简单讲解,后续会讲一些@注解的使用,以及实例的详细介绍,敬请期待!
本实例代码下载:https://download.csdn.net/download/u011924274/11995379