spring boot结构

本文详细介绍了如何在SpringBoot项目中整合MyBatis,包括配置application.properties,搭建pom.xml,创建业务数据Bean,实现DAO层操作,编写Service层逻辑,以及Controller层的接口设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载
目录

1.application.properties 配置文件

2.pom.xml maven配置文件

3.bean(主要存储业务数据)

4.dao(数据操纵)

5.service (提供服务)

6.controller(前端调用接口提供服务)

主要结构

1.application.properties 配置文件

#用于连接mysql数据库
#useSSL=false用于消除远程连接数据库时的警告
spring.datasource.url=jdbc:mysql://(ip地址):(端口号)/(数据库名)?useSSL=false
spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver
spring.datasource.username=(数据库登录名)
spring.datasource.password=(登陆密码)

#用于连接sql server数据库
#spring.datasource.url=jdbc:sqlserver://(ip地址):(端口号);DataBaseName=(数据库名)
#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#spring.datasource.username=(数据库登录名)
#spring.datasource.password=(登陆密码)

#寻找mapper映射文件的路径
mybatis.mapper-locations= classpath:/mapper/**/*.xml
2.pom.xml maven配置文件

在 pom.xml 中添加所需要的依赖信息,然后在项目根目录执行 mvn install 命令,maven就会自动下载相关依赖jar包到本地仓库

3.bean(主要存储业务数据)

bean必须有无参的构造函数,必要属性要有get、set 方法,spring会利用反射机制来产生bean的实例

package cn.jxustnc.dyManagement.bean;

public class Example {
private int attr1;
private String attr2;

public int getAttr1() {
	return attr1;
}
public void setAttr1(int attr1) {
	this.attr1 = attr1;
}
public String getAttr2() {
	return attr2;
}
public void setAttr2(String attr2) {
	this.attr2 = attr2;
}

}
4.dao(数据操纵)

只需要创建ExampleMapper接口,写好映射ExampleMapper.xml文件,然后在servic层自动注入该接口,mybatis就会根据该接口和xml映射文件创建实现类,进行sql语句查询

package cn.jxustnc.dyManagement.dao;

import java.util.List;

import cn.jxustnc.dyManagement.bean.Example;

public interface ExampleMapper {
List selectAll();
Example selectByAttr1(int attr1);
void save(Example example);
void update(Example example);
void deleteByAttr1(int attr1);
}

<?xml version="1.0" encoding="UTF-8"?> select * from Example


select * from Example where attr1=#{attr1}

insert into Example values(#{attr1},#{attr2}) update Example set attr2=#{attr2} where attr1=#{attr1} delete Example where attr1=#{attr1} 5.service (提供服务)
service 层主要调用dao层的功能实现增删改查,在此过程中可以可以进行数据检验,进行一些计算(例如某个人的信息含有出生日期和年龄,这个时候就可以不用在数据库中存储年龄信息,直接根据出生日期计算年龄,这样可以节省一个字段,还可以避免过了某个时间(生日)之后年龄不会自动增加的问题)

package cn.jxustnc.dyManagement.service;

import java.util.List;

import cn.jxustnc.dyManagement.bean.Example;

public interface IExampleService {
//服务层的函数都要抛出异常,在controller中捕获错误信息返回给前端
List findAll() throws Exception;

Example findByAttr1(int attr1) throws Exception;

void save(Example example) throws Exception;

void update(Example example) throws Exception;

void deleteByAttr1(int attr1) throws Exception;

}
package cn.jxustnc.dyManagement.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.jxustnc.dyManagement.bean.Example;
import cn.jxustnc.dyManagement.dao.ExampleMapper;
import cn.jxustnc.dyManagement.service.IExampleService;

//添加注解,spring才会自动扫描到这个类
@Service
public class ExampleService implements IExampleService {
//自动注入ExampleMapper的实现类
@Autowired
private ExampleMapper exampleMapper;

@Override
public List<Example> findAll() throws Exception {
	return exampleMapper.selectAll();
}

@Override
public Example findByAttr1(int attr1) throws Exception {
	Example example = exampleMapper.selectByAttr1(attr1);
	if(example==null) {//可以根据需要进行数据检验,抛出异常信息
		throw new Exception("未找到!");
	}else {
		return example;
	}
}

@Override
public void save(Example example) throws Exception {
	exampleMapper.save(example);
}

@Override
public void update(Example example) throws Exception {
	findByAttr1(example.getAttr1());
	exampleMapper.update(example);
}

@Override
public void deleteByAttr1(int attr1) throws Exception {
	findByAttr1(attr1);
	exampleMapper.deleteByAttr1(attr1);
}

}
6.controller(前端调用接口提供服务)

package cn.jxustnc.dyManagement.util;
//工具类
public class MsgResponse {
private Integer status; //状态码 200 成功 500代码异常
private String message; //错误、成功信息
private Object data; //数据 500 null

public static MsgResponse success(String message, Object data){
	MsgResponse response = new MsgResponse();
	response.setStatus(200);
	response.setMessage(message);
	response.setData(data);
	return response;
}

public static MsgResponse error(String message){
	MsgResponse response = new MsgResponse();
	response.setStatus(500);
	response.setMessage(message);
	response.setData(null);
	return response;
}



public Integer getStatus() {
	return status;
}

public void setStatus(Integer status) {
	this.status = status;
}

public String getMessage() {
	return message;
}
public void setMessage(String message) {
	this.message = message;
}
public Object getData() {
	return data;
}
public void setData(Object data) {
	this.data = data;
}

}
package cn.jxustnc.dyManagement.web.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.jxustnc.dyManagement.bean.Example;
import cn.jxustnc.dyManagement.service.IExampleService;
import cn.jxustnc.dyManagement.util.MsgResponse;

@RestController//表示所有数据都以json格式返回
@RequestMapping("/example")//请求该类的url
public class ExampleController {
//自动注入实现类(很神奇,目前还不知道原理。。。)
@Autowired
private IExampleService exampleService;

//spring 项目运行之后可以根据http://ip:port/example/findAll调用这个函数
//用post方式调用
@PostMapping("findAll")
public MsgResponse findAll() {
	List<Example> list;
	try {
		list = exampleService.findAll();
		return MsgResponse.success(Integer.toString(list.size()), list);
	} catch (Exception e) {
		e.printStackTrace();
		return MsgResponse.error(e.getMessage());
	}
}
//用get方式调用
@GetMapping("findByAttr1")
public MsgResponse findByAttr1(int attr1) {
	try {
		Example example = exampleService.findByAttr1(attr1);
		return MsgResponse.success("OK", example);
	} catch (Exception e) {
		e.printStackTrace();
		return MsgResponse.error(e.getMessage());
	}
}

@GetMapping("save")
public MsgResponse save(Example example) {
	try {
		exampleService.save(example);
		return MsgResponse.success("存储成功!", null);
	} catch (Exception e) {
		e.printStackTrace();
		return MsgResponse.error(e.getMessage());
	}
}

@GetMapping("update")
public MsgResponse update(Example example) {
	try {
		exampleService.update(example);
		return MsgResponse.success("更新成功!", null);
	} catch (Exception e) {
		e.printStackTrace();
		return MsgResponse.error(e.getMessage());
	}
	
}

@DeleteMapping("deleteByAttr1")
public MsgResponse deleteByAttr1(int attr1) {
	try {
		exampleService.deleteByAttr1(attr1);
		return MsgResponse.success("删除成功!", null);
	} catch (Exception e) {
		e.printStackTrace();
		return MsgResponse.error(e.getMessage());
	}
}

}
————————————————
版权声明:本文为CSDN博主「tianjx98」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37789215/article/details/81090011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值