之前做了个SpringBoot + Mybatis创建一个新的项目,想着记录下来容易后面进行自我巩固和一起学习
1.总体设计大纲:
- 新建springboot项目和坐标的引入
- Module的建立
- 分层模式的设计
- 启动项目与测试验证
以下是该工程的总体架构:
数据库里面之前存有的数据:
2.首先新建一个springboot项目,因为我是用的是idea,在这里我通过截图的方式说明,这样也好理解:
在这里可以设置坐标、语言、打包方式、版本。之后点击Next
上面两张图片是我选择在pom.xml中所要添加的jar包,点击Next
点击Finish就可以正常创建一个springboot工程了。。。YES
3.想着后面想学习分布式,所以我新建了一个模块,注意idea和eclipse不一样,eclipse是在一个workspace中新建多个project,而idea则是一个project下面包含多个Module
方式和新建springboot流程一样,新建完之后差不多样式如下:
4.这是在pom.xml下已有了相应项目开发的坐标,可以正常完成接下来的项目开发了
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<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.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
5.首先设置application.properties,指定了jdbc和mybatis配置文件,当然用yml也可以
#端口号
server.port=8080
#JDBC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.password=root
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/customer?serverTimezone=GMT&useUnicode=true&characterEncoding=utf8
#mybati配置文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#日志
logging.level.root=debug
提醒:日至等级默认是info,我把它设置为debug(等级由高到低为:ERROR、WARN、INFO、DEBUG)
5.因为设置了mybatis的配置文件,所以在resources下新建一个 mapper文件夹,这里用来写mapper层对应的sql语句
6.其次就可以在java文件夹中建立三层包了,大伙看:
注意:bean层是写与数据库对应的实体类,mapper层就是dao数据访问层,主要负责写的是与数据库交互的一些方法,接口就行,不用写实现方法,实现方式后面在mapper层中新建*Mapper.xml进行sql的编写。service层即为业务逻辑层,里面主要是对业务的处理。controller层即为控制层,接受请求并响应请求。
7.哇,接下来终于可以写代码了,太好了。
先在bean下新建一个实体类Customer,与数据库中的customer表相对应
package com.example.user.bean;
public class Customer {
private String id;
private String name;
private String gender;
private String phone;
private String email;
private String description;
public Customer() {
}
................................(省略get和set方法)
下一步,在mapper层中新建一个接口UserMapper:
package com.example.user.mapper;
import com.example.user.bean.Customer;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
//@Mapper //交给spring管理,不用写Mapper映射文件。@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中:如下,在启动类中配置扫描地址:
public interface UserMpper {
List<Customer> getCustomer(); //查找全部
void insertCustomer(Customer customer); //插入
Customer getById(String string); //通过id查找某一条
void deleteCustomer(String string); //删除
void updateCustomer(Customer customer); //更新
}
接下来注意在mapper层下新建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.user.mapper.UserMpper">
<select id="getCustomer" resultType="com.example.user.bean.Customer">
select * from customer
</select>
<insert id="insertCustomer" parameterType="com.example.user.bean.Customer">
insert into customer values ("4","杨家将","nan","17687956309","杨家将@163.com","我是杨家将")
</insert>
<select id="getById" resultType="com.example.user.bean.Customer">
select * from customer where id=#{string}
</select>
<delete id="deleteCustomer">
delete from customer where id=#{string}
</delete>
<update id="updateCustomer" parameterType="com.example.user.bean.Customer">
update customer set name = #{name},gender = #{gender} where id= #{id}
</update>
</mapper>
好了,接下来就开始service层的代码UserService:
package com.example.user.service;
import com.example.user.bean.Customer;
import java.util.List;
public interface UserService {
List<Customer> getCustomer();
void insertCustomer(Customer customer);
Customer getById(String string);
void deleteCustomer(String string);
boolean updateCustomer(Customer customer);
}
可以在Service业务逻辑层里建立一个impl包,新建一个实现类:
package com.example.user.service.impl;
import com.example.user.bean.Customer;
import com.example.user.mapper.UserMpper;
import com.example.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMpper userMpper;
@Override
public List<Customer> getCustomer() {
List<Customer> list = userMpper.getCustomer();
return list;
}
@Override
public void insertCustomer(Customer customer) {
userMpper.insertCustomer(customer);
}
@Override
public Customer getById(String string) {
Customer cu = userMpper.getById(string);
return cu;
}
@Override
public void deleteCustomer(String string) {
string = "4";
userMpper.deleteCustomer(string);
}
@Override
public boolean updateCustomer(Customer customer) {
boolean flag = false;
try{
userMpper.updateCustomer(customer);
flag = true;
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
}
最后一个就是Controller层里新建UserController类:
package com.example.user.controller;
import com.example.user.bean.Customer;
import com.example.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value="index")
@ResponseBody
public List<Customer> getCustomer(){
List<Customer> list = userService.getCustomer();
return list;
}
@RequestMapping(value = "insert")
@ResponseBody
public String insertCustomer(Customer customer) {
userService.insertCustomer(customer);
return "插入成功";
}
@RequestMapping(value = "getById")
@ResponseBody
public Customer getById(String string) {
string="1";
Customer cu = userService.getById(string);
System.out.println("成功");
return cu;
}
@RequestMapping(value = "delete")
@ResponseBody
public String deleteCustomer(String string) {
userService.deleteCustomer(string);
return "删除成功";
}
@RequestMapping(value="update")
@ResponseBody
public boolean updateCustomer(Customer customer) {
customer.setId("4");
customer.setName("盖伦");
customer.setGender("nanhaizi");
return userService.updateCustomer(customer);
}
}
到这里,代码基本就写好了,接下来就开始测试吧,到了紧张的时候了,在主程序里执行:
package com.example.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.example.user.mapper")
public class GmailUserApplication {
public static void main(String[] args) {
SpringApplication.run(GmailUserApplication.class, args);
}
}
注意:@Controller 、 @Service。@Mapper的使用,@Mapper也可以更换为在启动类中加入@MapperScan(“xx”)注解
好了,这样就可以开启项目了:
咱们就可以直接访问了,因为springboot里面内嵌了tomcat容器,所以咱们就不用在配置tomcat了,这是真的方便。输入网址就直接访问啦,哈哈 !!不吹牛,比ssm真的少了太多的配置文件。开箱即用,真方便!!!
8.代码都写好了,那就到了最后一个环节测试了。使用浏览器或者postman都可以,只要url像我这样输入正确,一定是可以的。。嘻嘻
-
这是查询数据库中所有的数据通过json的方式展示到页面
-
这是查询单个数据的url和显示的结果
-
这是插入的url和显示的结果
注意,插入之后在数据库中能看到明细(当然通过localhost:8080/index也可以查询)
- 这是更新的url和显示的结果
修改的数据在数据库中查看,如下图:
- 这是删除的url和显示的结果
删除的数据在数据库中查看,如下图:
好了,到这里就大功告成,这样就简单的搭建了一个小Demo并实现了crud,各位小伙伴们如果过程中有什么疑惑问题,可以发出来大家一起讨论哈。。