Springboot整合Mybatis

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值