springboot+mybatis+mysql实现本地存储数据,为web提供接口的简单demo整理
一、开发工具:
STS (spring-tool-suite):
配置spring boot: https://baijiahao.baidu.com/s?id=1609044252023906449&wfr=spider&for=pc
官网:https://spring.io/tools3/sts/
工具包下载:http://dist.springsource.com/release/STS/3.8.1.RELEASE/dist/e4.6/spring-tool-suite-3.8.1.RELEASE-e4.6-win32-x86_64.zip
下载maven地址是http://maven.apache.org/download.cgi
maven的配置参考:https://blog.csdn.net/qq_19259415/article/details/78752773
IDEA(IntelliJ IDEA):
官方地址:https://www.jetbrains.com/ (下载IntelliJ IDEA)
我这里选择用IDEA来开发,因为这个算是比较主流的工具,也是jetbrains出的一个开发工具,用起来比较顺手
二、创建项目:https://start.spring.io/ (通过spring start创建初始一个项目,也可以在IJ里配置一个spring start插件一样创建)
(1)为啥用start.spring创建:省去很多必须的配置步骤
(2)使用start.spring配置好,然后下载初始的项目代码用开发工具导入:
STS:第一个项目,SpringBoot项目的pom.xml文件无故报错:
解决办法整理:https://blog.csdn.net/u010326875/article/details/101028935
IDEA: Error:(3, 32) java: 程序包org.springframework.boot不存在
导入项目也会报错,不过我这边尝试了下,网络不好,所以maven的一些依赖没有下载下来导致报错。确保网络OK,多尝试几次就可以了
三、测试初始项目:
创建Controller目录在 Application 文件同级目录下!
然后再controller里创建文件,添加代码:
package com.bai.blog.controler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestApplication {
@RequestMapping("/test")
public String init(){
return "hello 漠天!";
}
}
然后再application文件右击启动,然后再控制台查看端口,在浏览器访问:http://localhost:8080/test
四、下载数据库然后安装配置
安装配置:https://blog.csdn.net/xiezhiming1234/article/details/82860339
安装成功后,可以通过mysql的可视化工具来创建表,也可以用sql语句来创建表,比如:
use personalblog;
create table blog_user(id int PRIMARY KEY AUTO_INCREMENT,userName varchar(20),phone varchar(20) NOT NULL,password varchar(30) NOT NULL,sex varchar(10) DEFAULT 'male',description varchar(100))
操作数据库的可视化工具navicat:
破解工具:https://blog.csdn.net/WYpersist/article/details/86530973
链接:https://pan.baidu.com/s/1eFVLzno9Nz69oVCN35LnlQ
码:zoxo
五、配置和连接数据库:
参考:https://blog.csdn.net/weixin_41496975/article/details/83034063
# 难点映射不成功,老是出问题,不过还是要细心检pom.xml、mapper.xml、User.class、Dao.interface这几个对应的方法名称id啥的保证一致,重启服务就可以
# 第二个就是配置数据库的url后面要加上编码的配置否则会访问失败,报乱码错误
(1)配置数据库的datasource:src/main/resouces/application.properties:
server.port=8080
#访问本地服务指定端口号
server.port=8080
#配置数据库url,这里数据库的后面要加上编码格式,不然会报错
spring.datasource.url = jdbc:mysql://localhost:3306/personalblog?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#数据库名称
spring.datasource.username = root
#数据库密码
spring.datasource.password = xxxxxxxxxxxx
#指定mysql的jdbc驱动
spring.datasource.driverClassName =com.mysql.cj.jdbc.Driver
#mapper文件路径
mybatis.mapper-locations = classpath:com/bai/blog/dao/**/mapper/*.xml
##对应实体类所在路径
mybatis.typeAliasesPackage=com.bai.blog.bean
(2)配置pom.xml数据的依赖:
<dependencies>
--------------
<!--mysql db-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 下面三个引用mapper映射来用 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
</dependencies>
<build>
<!--放置在dao下的话要在这里配置,让springboot启动时去扫描,让mapper可以扫描到,并且和dao接口匹配-->
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
保存
(3)处理调用数据库的操作和准备的实体类和方法:
mapper.xml(映射java dao接口方法)、
User.class(数据的实体类)、
UserDao.interface(dao接口方法)、
TestApplication.class(controll方法,提供接口给web调用)
其他类不用动;
(一) mapper.xml(映射java dao接口方法):
<?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">
<!-- namespace用于绑定Dao接口 -->
<mapper namespace="com.bai.blog.dao.UserDao">
<resultMap id="user" type="com.bai.blog.bean.User"/>
<parameterMap id="user" type="com.bai.blog.bean.User"/>
<!-- 查询名字记录sql -->
<select id="selectUserByIphone" parameterType="String" resultType="user" resultMap="user">
SELECT * FROM user WHERE iphone = #{iphone}
</select>
<!-- 使用alias自定义的parameterType-->
<insert id="insertUser" parameterType="com.bai.blog.bean.User">
INSERT INTO user (iduser,userName,password,iphone) VALUES (#{iduser},#{userName},#{password},#{iphone})
</insert>
</mapper>
(二)直接在下面的dao文件里sql语句操作:
@Mapper
public interface VerifyCodeDao {
String TABLE_NAME = " verify_code ";//表名
String TABLE_FIELDS = " uniqueFlag, verifyCode, expired ";//表中的属性字段
String SELECT_FIELDS = TABLE_FIELDS;
//添加数据
@Insert({"insert into", TABLE_NAME, "(",TABLE_FIELDS, ") values (#{uniqueFlag}, #{verifyCode}, #{expired})"})
int addCode(VerifyCodeBean verifyCodeBean);
//查询数据
@Select({"select", SELECT_FIELDS," from", TABLE_NAME, " where verifyCode = #{verifyCode}"})
VerifyCodeBean selectByCode(String code);
//更新数据
@Update({"update", TABLE_NAME, " set expired = #{expired} , verifyCode = #{verifyCode} where uniqueFlag = #{uniqueFlag}"})
void updateStatus(@Param("expired") Date expired, @Param("verifyCode") String verifyCode, @Param("uniqueFlag") String uniqueFlag);
//删除数据
@Delete({"delete from",TABLE_NAME,"where verifyCode = #{verifyCode}"})
void deleteCode(String verifyCode);
}
User.class(数据的实体类):
package com.bai.blog.bean;
public class User {
private int iduser;
public int getIduser() {
return iduser;
}
public void setIduser(int iduser) {
this.iduser = iduser;
}
private String userName;
private String password;
private String iphone;
private String sex;
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;
}
public String getIphone() {
return iphone;
}
public void setIphone(String iphone) {
this.iphone = iphone;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
UserDao.interface(dao接口方法):
package com.bai.blog.dao;
import com.bai.blog.bean.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserDao {
User selectUserByIphone(String iphone);
void insertUser(User user);
}
TestApplication.class(controll方法,提供接口给web调用):
package com.bai.blog.controler;
import com.bai.blog.bean.User;
import com.bai.blog.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestApplication {
@Autowired
private UserDao userMapper;
//http://localhost:8888/addUser?username=xiaoli2&password=123&phone=152
@RequestMapping("/addUser")
public String addUser(String username,String password,String phone){
User user = new User();
user.setIduser(1);
user.setUserName(username);
user.setIphone(phone);
user.setPassword(password);
userMapper.insertUser(user);
return "success!";
}
//http://localhost:8888/getUser?iphone=152
@RequestMapping("/getUser")
public String getUser(String iphone){
User user =userMapper.selectUserByIphone(iphone);
return user!=null ? iphone+"的密码是:"+user.getPassword():"不存在手机号为"+iphone+"的用户";
}
}
(4)web调用本地服务接口:http://localhost:8080/getUser?phone=152
也可以用移动端来执行本地ip来调用本地服务
(5)demo源码 https://download.csdn.net/download/u010326875/11804408