一、导入依赖包
1、在创建项目时勾选:
勾选SQL中的JDBC API、MyBatis Framework、MySQL Driver,创建项目后就会自动配置和引入这些包。
2、在pom.xml文件中添加依赖:
在<dependencies></dependencies>中添加以下代码,引入jdbc、mybatis和mysql依赖包:
<!--jdbc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!--mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
在Maven管理中点击Reload All Maven Projects,重新加载项目:
3、在导入数据库的依赖包之后,再运行程序,就会出现以下问题:
'url' attribute is not specified and no embedded datasource could be configured.
问题处理:SpringBoot框架:'url' attribute is not specified and no embedded datasource could be configured问题处理
二、创建数据库表
数据库名:spring_boot_demo
数据库表:t_user
字段:id,username,password,age,sex
预先存入一条数据,方便后续操作。
三、配置数据库连接信息
springboot中默认的配置文件是application.properties,修改后缀名为application.yml,打开编辑配置信息:
注:两者的区别不大,简单了解下就可以了。
哪个也可以用,主要还是看个人习惯(application.properties和application.yml的区别)
1、先简单配下端口和路径:
server:
port: 8080
servlet:
context-path: /cn
2、配置数据库连接信息:
spring: datasource: url: jdbc:mysql://localhost:3306/spring_boot_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.jdbc.Driver
四、建立三层架构实现数据访问
1、数据访问层
结构如下:
(1)UserPO类:
packagecom.example.demo.po; importjava.io.Serializable; /*** @author我命倾尘 */ public class UserPO implementsSerializable { /**用户ID */ private intid; /**用户名 */ privateString username; /**用户密码 */ privateString password; /**年龄 */ private intage; /**性别 */ privateString sex; public intgetId() { returnid; } public void setId(intid) { this.id =id; } publicString getUsername() { returnusername; } public voidsetUsername(String username) { this.username =username; } publicString getPassword() { returnpassword; } public voidsetPassword(String password) { this.password =password; } public intgetAge() { returnage; } public void setAge(intage) { this.age =age; } publicString getSex() { returnsex; } public voidsetSex(String sex) { this.sex =sex; } }
User类implements了一个Serializable类,该类的作用是序列化。
(2)UserMapper接口:
packagecom.example.demo.mapper; importorg.springframework.stereotype.Repository; /*** @author我命倾尘 */@Repository public interfaceUserMapper { intgetAgeByUsername(String username); }
@Repository注解是把这个接口的一个实现类交给spring管理。
(3)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.example.demo.mapper.UserMapper"> <select id="getAgeByUsername"resultType="int">select age from t_user where username=#{username,jdbcType=VARCHAR} </select> </mapper>
mapper的namespace指定了该xml文件指向的Mapper接口,里面的sql语句接受传来的username数据进行数据访问。
语句的id="getAgeByUsername"则是对应mapper接口中的方法,resultType="int"指定本次数据访问的数据返回类型。
(4)在application.yml中添加配置mapper.xml文件的路径:
mybatis:
mapper-locations:
- classpath:mybatis/*.xml
(5)在程序入口类中添加扫描:
@MapperScan("com.example.demo.mapper")
添加该注解后,运行程序时会自动扫描指定路径中的mapper接口实现类。
2、业务逻辑层
结构如下:
(1)UserService类:
packagecom.example.demo.service; /*** @author我命倾尘 */ public interfaceUserService { intgetAgeByUsername(String username); }
(2)UserServiceImpl类:
packagecom.example.demo.service.impl; importcom.example.demo.mapper.UserMapper; importcom.example.demo.service.UserService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Service; /*** @author我命倾尘 */@Service public class UserServiceImpl implementsUserService { @Autowired UserMapper userMapper; @Override public intgetAgeByUsername(String username) { returnuserMapper.getAgeByUsername(username); } }
在service接口的实现类中,要加上@Service注解,把实现类交给spring处理。
通过@Autowired注解获得自动注入的userMapper实现类,在重写的方法中进行调用,获得数据。
3、页面展示层:
结构如下:
(1)UserController类:
packagecom.example.demo.controller; importcom.example.demo.service.UserService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; /*** @author我命倾尘 */@RestController public classUserController { @Autowired UserService userService; @RequestMapping("/user/age") public intgetAgeOfUser(){ return userService.getAgeByUsername("springbootdemo"); } }
五、运行程序
按照配置的端口和映射URL,页面的路径应该是http://localhost:8080/cn/user/age
访问该页面,结果如下:
结果与我们预存在数据库中的数据一致。