Springboot与mybatis整合,可以使在web界面操作,
一、总体思路
1、配置依赖
2、mysql转化为java对象时的实体类
3、网页界面
4、sql的映射
5、服务层的数据处理
6、对网页的处理控制
二、程序构建
1、依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--gav坐标-->
<groupId>com.kele</groupId>
<artifactId>springboot1026</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot1026</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<!--sprintboot的依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok依赖,可以自动生成get,set,构造器的-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试类-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--jdbc连接依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.5</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、java的实体类
注意:java的实体类中属性名要和mysql中字段的名称一致
例如存在mysql中的数据为:
创建java的实体类
//@Getter
//@Setter
@Data //get和set方法
@AllArgsConstructor //全参构造器
@NoArgsConstructor //空参构造器
@ToString //tostring方法
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
}
3、web页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<a href="/springboot1026/selectall">click me,select all employee</a>
<hr/>
<form action="/springboot1026/opemp">operation employee<br/>
<input name="option" value="insert" type="radio">增
<input name="option" value="delete" type="radio">删
<input name="option" value="update" type="radio">改
<input name="option" value="select" type="radio">查<br/>
<input name="id" value="1" type="text">id<br/>
<input name="lastName" value="kele" type="text">name<br/>
<input name="gender" value="famale" type="text">gender<br/>
<input name="email" value="alien@163.com" type="text">email<br/>
<input value="提交按钮" type="submit">
</form>
</body>
</html>
配置文件
#添加项目名称
server.context-path=/springboot1026
#添加前缀和后缀,在control中return直接写目录就可以
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html
界面效果
4、sql的映射
4.1 sql接口
一般放在mapper的module下,
通过该接口,可以对传入的参数进行检查
映射需要遵循一定的规则
/**
* @ClassName: EmployeeMapper
* @Description:
* @Author: kele
* @Date: 2021/3/16 10:34
**/
//该注解
@Repository
public interface EmployeeMapper {
//通过select获取employee对象
Employee getEmp(int id);
//根据id删除对象
void delEmp(int id);
//插入数据
void insertEmp(Employee employee);
//修改数据
void updateEmp(Employee employee);
//查询所有数据
List<Employee> selectAll();
}
4.2 sql的语句
实现sql的映射,相当于接口的实现方法,
<?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相当于包名-->
<!--namespace采用接口的全类名的方式进行,namespace: 必须和接口的全类名一致-->
<mapper namespace="com.kele.springboot1026.mapper.EmployeeMapper">
<!--id是语句的唯一标识,引用的话使用namespace + id-->
<!--resultType是返回值的类型,全类名的格式-->
<!--#{} 代表引用-->
<!--select标签代表当前是一个select语句
编写什么语句要使用对应的标签
id: 语句的唯一标识。如果要引用这条语句!
必须和绑定的方法名一致!
在配置文件中(mapper中)引用的话使用namespace + id
resultType: 查询语句返回值的类型
#{id}: #{}代表一个占位符,类比为一个?
如果当前语句中,只有一个占位符#{},{}中的内容可以随便写
如果当前语句中有多个占位符,此时必须要保证占位符的名称和要传入的属性名一致!否则可能传入参数失败
-->
<select id="getEmp" resultType="com.kele.springboot1026.entity.Employee">
select * from tbl_employee where id = #{id}
</select>
<insert id="insertEmp">
insert into tbl_employee(last_name,gender,email) values (#{lastName},#{gender},#{email})
</insert>
<delete id="delEmp">
delete from tbl_employee where id=#{id}
</delete>
<update id="updateEmp">
update tbl_employee set last_name=#{lastName},email=#{email} where id=#{id}
</update>
<select id="selectAll" resultType="com.kele.springboot1026.entity.Employee">
select * from tbl_employee
</select>
</mapper>
4.3 mybatis的配置文件
配置文件名必须是:application.properties或者application.yml,可以sprintboot可以自动读取配置文件
spring:
datasource:
name: mydb
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://hadoop102:3306/d1026
username: root
password: "root123"
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath*:/mybatismappers/*Mapper.xml
configuration:
map-underscore-to-camel-case: true
5、服务层的数据处理
根据项目需要,设置服务层数据
设置接口,方便更换,修改服务功能
/**
* @ClassName: EmployeeServer
* @Description:
* @Author: kele
* @Date: 2021/3/16 11:00
**/
import java.util.List;
/**
* 在此测试中虽然服务包中声明的employee接口中的方法和mapper中声明的方法一致,但作用不同
*
* 此接口需要自己定义实现类
*
* server中声明的方法是用来处理一些业务与功能,在此方法中会调用mapper中的方法来数据库访问对象
*/
public interface EmployeeServer {
Employee getEmp(int id);
void delEmp(int id);
void insertEmp(Employee employee);
void updateEmp(Employee employee);
List<Employee> selectAll();
}
接口的实现类(实现功能)
import com.kele.springboot1026.entity.Employee;
import com.kele.springboot1026.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @ClassName: EmployeeServerEmp
* @Description:
* @Author: kele
* @Date: 2021/3/16 11:04
**/
@Service
public class EmployeeServerEmp implements EmployeeServer {
@Autowired
EmployeeMapper emp;
@Override
public Employee getEmp(int id) {
/**
*
* 功能.......
*/
System.out.println("进行前期数据检查及业务处理");
return emp.getEmp(id);
}
@Override
public void delEmp(int id) {
System.out.println("进行前期数据检查及业务处理");
emp.delEmp(id);
}
@Override
public void insertEmp(Employee employee) {
System.out.println("进行前期数据检查及业务处理");
emp.insertEmp(employee);
}
@Override
public void updateEmp(Employee employee) {
System.out.println("进行前期数据检查及业务处理");
emp.updateEmp(employee);
}
@Override
public List<Employee> selectAll() {
return emp.selectAll();
}
}
6、对网页的处理控制
针对界面的控制,例如:web页面跳转,数据返回给界面等等
package com.kele.springboot1026.handler;
import com.kele.springboot1026.entity.Employee;
import com.kele.springboot1026.server.EmployeeServer;
import com.kele.springboot1026.server.EmployeeServerEmp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @ClassName: EmployeeControl
* @Description:
* @Author: kele
* @Date: 2021/3/16 11:09
**/
//自定义为controller
@Controller
public class EmployeeControl {
// @Autowired 自动生成一个对象,前提是被标记了@Service、@Controller
@Autowired
EmployeeServerEmp emp;
@RequestMapping(value = "/opemp")
@ResponseBody
public Object t1(Integer id,String lastName,String gender,String email,String option){
Employee employee = new Employee(id, lastName, gender, email);
switch (option){
case "select": return emp.getEmp(id);
case "insert": emp.insertEmp(employee); return "success";
case "update": emp.updateEmp(employee); return "success";
case "delete": emp.delEmp(id); return "success";
}
return "success";
}
@RequestMapping(value = "/selectall")
@ResponseBody
public List<Employee> selectall(){
return emp.selectAll();
}
}
7、运行
运行
注意需要添加注解映射的位置,
否则会报错,找不到mapper
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//添加该注解找映射的位置
@MapperScan(basePackages = { "com.kele.springboot1026.mapper" })
public class Springboot1026Application {
public static void main(String[] args) {
SpringApplication.run(Springboot1026Application.class, args);
}
}