springboot-curd基于mybatis项目搭建
作者:捕風捉影?? 发布时间:2023-12-08 10:41:05
标签:springboot,curd,项目,搭建,mybatis
项目结构:
pom.xml文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.liuyang</groupId>
<artifactId>springbootcurd</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootcurd</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-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
<!-- 测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- springboot 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!-- c3p0 数据源 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!--StringUtils-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!--当前这个项目被继承之后,这个不向下传递-->
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
yml
## 数据源配置
spring:
## 热部署配置
devtools:
restart:
enabled: true
# 设置重启的目录,添加目录的文件需要restart
additional-paths: src/main/java
# 解决项目自动重新编译后接口报404的问题
poll-interval: 3000
quiet-period: 1000
datasource:
type: com.mchange.v2.c3p0.ComboPooledDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springboot_mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
##视图的配置
freemarker:
template-loader-path: classpath*:/views/
charset: UTF-8
content-type: text/html
cache: false
suffix: .ftl
## mybatis 配置
mybatis:
#映射文件的存放路径
mapper-locations: classpath*:/mapper/*.xml
type-aliases-package: com.liuyang.bean,com.liuyang.vo,com.liuyang.query
configuration:
## 下划线转驼峰配置
map-underscore-to-camel-case: true
## pageHelper
pagehelper:
helper-dialect: mysql
## 显示dao 执行sql语句
logging:
level:
com:
xxxx:
mapper: debug
bean
private Integer userId;
private String userName;
private String userPwd;
mapper
public interface Usermapper {
public User selectuserbyid(Integer id);
public User selectUserByName(String userName);
// 注意返回的类型
public int insertUser(User user);
// 根据id进行删除数据
public int deleteUserById(int userId);
//条件查询
public List<User> selectUserByItem(UserQuery userQuery);
}
mapping.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.liuyang.mapper.Usermapper">
<select id="selectuserbyid" parameterType="int" resultType="com.liuyang.bean.User">
select * from t_user where user_id=#{userId}
</select>
<select id="selectUserByName" parameterType="String" resultType="com.liuyang.bean.User">
select * from t_user where user_name=#{userName}
select * from t_user where user_name=
</select>
<insert id="insertUser">
insert into t_user(user_name,user_pwd) values(#{userName},#{userPwd});
</insert>
<!--删除一条-->
<delete id="deleteUserById" parameterType="int">
delete from t_user where user_id=#{userId}
</delete>
<!--条件查询-->
<select id="selectUserByItem" resultType="com.liuyang.bean.User">
select * from t_user
<where>
<if test="userName!=null">
user_name like "%${userName}%"
</if>
</where>
</select>
</mapper>
controller
@RestController
public class Usercontroller {
@Resource
private Usermapper usermapper;
@GetMapping("one/{id}")
public User sayUser(@PathVariable Integer id) {
System.out.println( id + "<<<" );
//根据ID查询
User user = usermapper.selectuserbyid(id);
return user;
}
// 没有检测重复
@GetMapping("userOne/{name}")
public User sayUserOne(@PathVariable String name) {
System.out.println( name + "<<<" );
//根据ID查询
User user = usermapper.selectUserByName( name );
//user--json
return user;
}
@PutMapping("add")
public int sayAdd(User user) {
System.out.println( user + "<<<" );
//根据ID查询
return usermapper.insertUser( user );
}
@DeleteMapping("delete/{userId}")
public int sayDel(@PathVariable Integer userId) {
System.out.println( userId + "<<<" );
//根据ID查询
return usermapper.deleteUserById( userId );
}
@GetMapping("query")
public java.util.List<User> sayDel(UserQuery userQuery) {
System.out.println( userQuery + "<<<" );
//分页的集合数据
return usermapper.selectUserByItem( userQuery );
}
}
query
public class UserQuery {
private Integer pageNum=1;
private Integer pageSize=1;
private String userName;
以上只是简单的实现了增删改查 如果发生了插入或者是删除异常,我们就应该会自定义全局异常去捕获出现的问题
新增类 service
主要进行的业务的处理
Userservice
public interface Userservice {
public User queryUserById(Integer userId);
public User queryUserByName(String userName);
public void saveUser(User user);
public void changeUser(User user);
//删除一条
public void removeUserById(Integer userId);
//查询用户信息
public PageInfo<User> queryUserByPage(UserQuery userQuery);
}
UserserviceImpl
@Service
public class UserserviceImpl implements Userservice {
@Resource
private Usermapper usermapper;
// 查询都是用的User返回类型
@Override
public User queryUserById(Integer userId) {
return usermapper.selectuserbyid( userId );
}
@Override
public User queryUserByName(String userName) {
return usermapper.selectUserByName( userName );
}
//增加操作
/***
* 需要用户名 AssertUtil
* 用户密码
* 用户是否存在
* 添加用户是否成功
* @param user
*/
@Override
public void saveUser(User user) {
//验证用户名
AssertUtil.isTrue( StringUtils.isBlank(user.getUserName()),"用户名不能为空");
//用户密码
AssertUtil.isTrue(StringUtils.isBlank(user.getUserPwd()),"用户密码不能为空");
//用户是否存在
User temp = usermapper.selectUserByName(user.getUserName());
AssertUtil.isTrue(temp!=null,"用户已经存在");
//用户添加是否成功
AssertUtil.isTrue(usermapper.insertUser(user)<1,"添加失败了");
}
// 修改操作
/****
* 用户名不为空
* 用户密码不为空
* 用户不存在
* 用户修改操作失败
*
* @param user
*/
@Override
public void changeUser(User user) {
AssertUtil.isTrue( StringUtils.isBlank( user.getUserName() ),"用户名不为空" );
AssertUtil.isTrue( StringUtils.isBlank( user.getUserPwd() ),"密码不为空" );
User temp = usermapper.selectuserbyid(user.getUserId());
AssertUtil.isTrue( temp == null,"用户不存在");
AssertUtil.isTrue( usermapper.updateUser(user)<1,"修改失败了");
}
/****
* 删除是的id是否还存在
* 删除失败
* @param userId
*/
@Override
public void removeUserById(Integer userId) {
AssertUtil.isTrue( userId==null|| null==usermapper.selectuserbyid( userId ),"待删除数据不存在" );
AssertUtil.isTrue( usermapper.deleteUserById( userId )<1,"删除失败" );
}
/**
* 分页参数传递了两个变量 一个是起始位置 一个是一页有多行数据
*
* @param userQuery
* @return
*/
@Override
public PageInfo<User> queryUserByPage(UserQuery userQuery) {
PageHelper.startPage( userQuery.getPageNum(),userQuery.getPageSize());
List<User> ulist = usermapper.selectUserByItem( userQuery );
PageInfo<User> plist =new PageInfo<User>(ulist);
return plist;
}
}
新增类 用来校验数据数据是否有误
AssertUtil
public class AssertUtil {
/**
*
* @param flag 参数
* @param msg 信息
* flag=true
* 抛出异常,自定义
*/
public static void isTrue(Boolean flag,String msg){
if(flag){
throw new ParamException(msg);
}
}
}
ParamException
自定义异常类
public class ParamException extends RuntimeException{
private Integer code=300;
private String msg="参数异常";
public ParamException() {
super("参数异常");
}
public ParamException(Integer code) {
super("参数异常");
this.code=code;
}
public ParamException(String msg) {
super(msg);
this.msg=msg;
}
public ParamException(Integer code,String msg) {
super(msg);
this.msg=msg;
this.code=code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
把数据状态码 状态数据存在在Resultinfo
所创建的对象中
ResultInfo
public class ResultInfo {
private Integer code=200;
private String msg="操作成功";
private Object object;
public ResultInfo() {
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
@Override
public String toString() {
return "ResultInfo{" +
"code=" + code +
", msg='" + msg + '\'' +
", object=" + object +
'}';
}
}
更新传递的事json
数据:
来源:https://blog.csdn.net/qq_44833327/article/details/122608199
0
投稿
猜你喜欢
- 问题描述通过FeignClient调用微服务提供的分页对象IPage报错{"message": "Type d
- 本文实例讲述了C#编程获取IP地址的方法。分享给大家供大家参考,具体如下:1、获取客户端IP/// <summary>/// 获
- 我们都知道mybatis在进行参数判断的时候,直接可以用<if test=""></if> 就可
- 一、下载安装包 1. JDK1.8百度云下载路径:百度网盘下载链接: https://pan.baidu
- Zuul作为网关服务,是其他各服务对外中转站,通过Zuul进行请求转发。这就涉及到部分数据是不能原封返回的,比如服务之间通信的凭证,用户的加
- System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权。实现原理: 在程序启动时,请求一个互斥体
- 走马灯是一种常见的效果,本文讲一下如何用 PageView 在 Flutter 里实现一个走马灯, 效果如下,当前页面的高度比其它页面高,切
- 问题描述平常用的是java8,最近在学习java的新特性。这就需要从java8往更高的java版本切换。由于还在使用java8,测试完新特性
- 应用场景假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否
- 1. 问题描述springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础
- JAVA源码编译由三个过程组成:1、源码编译机制。2、类加载机制3、类执行机制我们这里主要介绍编译和类加载这两种机制。一、源码编译代码编译由
- SpringMVC文件下载说明: 在 SpringMVC 中,通过返回 ResponseEntity的类型,可以实现文件下载的功能案例演示1
- 一、依赖注入方式思考:向一个类中传递数据的方式有几种?普通方法(set方法)构造方法思考:依赖注入描述了在容器中建立bean与bean之间依
- 本文核心为分层领域模型(VO , PO , BO, DAO ,POJO等)概念的个人理解。1.为什么出现分层领域模型这个东西?(1)解决MV
- 引言在前两篇文章中,我们了解了ReentrantLock内部公平锁和非公平锁的实现原理,可以知道其底层基于AQS,使用双向链表实现,同时在线
- 一、什么是抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式是所有形态的工厂模式中最为抽象和最具
- “Java is still not dead—and people are starting to figure that out.”本教
- 最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记
- Android之文件数据存储一、文件保存数据介绍Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的
- 1.概述本文中,我将向你介绍Spring Cloud Netflix Turbine。它将多个Hystrix Metrics Streams