Springboot+Mybatis+MySQL实例练习时踩坑记录
最近刚开始学习后端,直接让上手学习Springboot+Mybatis+MySQL对CRUD的实例,虽然实例不难,但是上面的三个知识我都不懂,就有点为难我了
所以经常遇到一个点卡自己很久的情况,这里列举一些自己遇到的坑或者有用的建议,望后来者谨记
1.关于application.properties:配置文件,Spring项目启动自动加载,用application.yml来写更加简便
例如:application.properties中需要这样写
spring.datasource.url=jdbc:mysql://localhost:3306/springdb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
而application.yml只需要
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springdb
username: root
password: root
2.项目结构采用分层思想化
DAO层:
DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。
Service层:
Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。
Controler层:
Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面
3.常用注释
@Mapper注解是标识,能够自动加载被扫描。
@RestController注解,所有返回都为json
相当于@ResponseBody + @Controller合在一起的作用
@RequestMapping 配置url映射
@RequestMapping中的method参数有很多中选择,一般使用get/post.
@Autowired 自动装配
4.对于刚接触的来说,各种配置是真的多啊,你需要自己去找配置方法,这里由于之前没有对配置安装的记录,暂时留着,以后有时间再整理把
5.用Lombok的**@Data**注解功能,可以省去getter和setter的代码,可以减少不少的代码量,加快开发速度。lombok需要另外引入依赖。(我也是后面才发现小伙伴是这样用的,所以下面的代码没有使用)
6.上手做才能发现很多问题,下面是我学习时的代码
pom.xml(主要依赖)
<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.0.</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>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
applicattion.yml数据库配置
spring:
application:
name: mysql-service
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useSSL=true&serverTimezone=Asia/Shanghai
username: root
password: root
UeserController类(controller层)
package com.wcx.springboot_mybatis; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
@RequestMapping("/User")
public class UeserController { @Autowired
public UserMapper userMapper; //通过id查询
@RequestMapping(value = "/selectUserById",method = RequestMethod.GET)
public User selectUserById(String id){
User user = userMapper.selectUserById(Integer.parseInt(id));
return user;
}
//通过姓名查询
@RequestMapping(value = "/selectUserByName",method = RequestMethod.GET)
public List<User> selectUserByName(String userName){
return userMapper.selectUserByName(userName);
} //添加信息
@RequestMapping(value = "/addUser",method = RequestMethod.POST)
public String addUser(User user){
userMapper.addUser(user);
return "成功添加信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
} //修改信息
@RequestMapping(value = "/updateUser",method = RequestMethod.POST)
public String updateUser(User user){
userMapper.addUser(user);
return "成功修改信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
} @RequestMapping(value={"/deleteUser"}, method=RequestMethod.POST)
public String deleteUser(String id){
User user = userMapper.selectUserById(Integer.parseInt(id));
userMapper.deleteUser(Integer.parseInt(id));
return "成功删除信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
}
}
User类(entity层)
package com.wcx.springboot_mybatis; public class User {
private int id;
private String userName;
private int userAge;
private String userAddress; public String getUserAddress() {
return userAddress;
} public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
} public int getUserAge() {
return userAge;
} public void setUserAge(int userAge) {
this.userAge = userAge;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
}
UserMapper接口类(dao层)
package com.wcx.springboot_mybatis; import com.wcx.springboot_mybatis.User;
import org.apache.ibatis.annotations.*; import java.util.List; @Mapper
public interface UserMapper {
//插入数据
@Insert("insert into user(userName,userAge,userAddress) value (#{userName},#{userAge},#{userAddress})")
public void addUser(User user); //修改数据
@Update("update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id = #{id}")
public void updateUser(User user); //查询数据
//通过id查询
@Select("select * from user where id = #{id}")
public User selectUserById(int id);
//通过姓名查询
@Select("select * from user where userName = #{userName}")
public List<User> selectUserByName(String userName); //删除数据
@Delete("delete from user where id = #{id}")
public void deleteUser(int id);
}
数据库配置:
你需要自己在MySQL中的Springdb模式下创建user表,包括4个属性:
id:int ,设置为[主键][6]且[自增][6]
userName:varchar
userAge:int
userAddress:varchar
Springboot+Mybatis+MySQL实例练习时踩坑记录的更多相关文章
- Mysql 8+ 版本完全踩坑记录
问题是这样 刚霍霍了一台腾讯云服务器需要安装mysql 然后就选择了8+这个版本. 安装步骤网上有的是. 我只写最主要的部分 绝对不出错 外网可访问 .net java都可以调用 其实不指望有人看 就 ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- SpringBoot + Shiro + shiro.ini 的踩坑记录
0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...
- 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录
从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...
- SpringBoot+MyBatis+Mysql 6.X 版本日期型数据获,时间错乱,jason序列化时间相差8小时问题
新项目是用的springboot+mybatis+mysql 6.0.6版本的驱动包来搭建的,在使用的过程中遇到以下2个问题 从mysql取的的数据日期时间,与真实的时间往后错乱了14个小时. spr ...
- SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录
Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...
- springboot成神之——springboot+mybatis+mysql搭建项目简明demo
springboot+mybatis+mysql搭建项目简明demo 项目所需目录结构 pom.xml文件配置 application.properties文件配置 MyApplication.jav ...
- 【SpringBoot】SpringBoot/MyBatis/MySql/thymeleaf/Log4j整合工程
工程下载地址:https://files.cnblogs.com/files/xiandedanteng/MMSpringWeb20191027-1.rar 工程目录结构如图: 1.创建工程 有些网文 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
随机推荐
- JS数据类型的判断
在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefine ...
- 【函数】isinstance内建函数(小窗help)
#学到了第八天,还有很多没有理解,不过,没关系,相信任何复杂的问题都是由简单的组成,只有将每一个细节理解到位,自然问题迎刃而解 今天遇到了isinstace函数,忘了,先看一下语法 查百度附上链接:h ...
- python 修改dataframe的列名
1. 修改全部列名 df.columns base_data_model.columns = [u'有效率',u'提交率',u'参与度',u'回放占比',u'主好评率',u'辅好评率',u'是否付费' ...
- python大法好——Python 面向对象
Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法 ...
- python大法好——装饰器、生成器、迭代器
1.装饰器 1. 不能修改被装饰的函数的源代码 2. 不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1 函数即“变量” 2 高阶函数 a:把一个函数名当做实参传给另外一个函数(不修改 ...
- log4j配置后行号乱码显示为?问号
debug="true" classpathref="accrual.path" > 首发于 http://blog.xfuse.cn 参考文档 htt ...
- CSS: Grid homework redact.
The web homework: Finished design: (I use six block with different color to show this homework and I ...
- Vue.js连接后台数据jsp页面  ̄▽ ̄
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- c++冒号作用
转自http://www.360doc.com/content/13/0605/11/3373961_290615318.shtml 1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bi ...
- CSS3 Box-sizing(转载)
转载自:W3CPLUS Airen的博客:http://www.w3cplus.com/content/css3-box-sizing box-sizing是CSS3的box属性之一.一说到CSS的盒 ...