SpringBoot+MyBatis+Druid+MySQL实现数据库操作

1、新建SpringBoot项目

1.1、新建SpringBoot项目

使用SpringBoot初始化器,或者通过新建Maven项目的方式,新建一个SpringBoot项目,项目基本骨架如下:


1.2、配置pom.xml 

在pom.xml文件中,引入必要的依赖包
mybatis-spring-boot-starter --引入mybatis的依賴
druid-spring-boot-starter --引入数据库连接池
mysql-connector-java --引入数据库驱动


        <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>1.3.0</version>
        </dependency>

        <!-- 引入druid的数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        <!-- 引入数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.28</version>
            <scope>runtime</scope>
        </dependency>

1.3、配置properties

配置application.properties
主要用来配置本地的数据库连接,web应用的监听端口等,以及mapper的扫描路径
spring.application.name=druid_study
server.port=8080

spring.datasource.url=jdbc:mysql://localhost:3306/david?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=50
spring.datasource.druid.min-idle=50
spring.datasource.druid.max-active=100
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000

#扫描数据库的mapper.xml文件
mybatis.mapper-locations=classpath*:mapper/*.xml

2、编写代码

2.1、创建表

创建数据库表:t_student_info
create table if not exists david.t_student_info
(
    id varchar(20) not null comment '主键'
        primary key,
    name varchar(50) default ' ' null comment '姓名',
    age decimal(3) default 20 null comment '年龄',
    sex char default 'M' null comment '性别 M-男,W-女',
    phone varchar(20) null comment '手机号',
    email varchar(30) null comment '电子邮箱',
    rsv1 varchar(100) null comment '备注字段'
)
comment '学生信息表';
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10001', '张三', 20, 'M', '13988887777', 'zhangsan@163.com', '备注');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10002', '李四', 18, 'W', '15988887777', 'lisi@163.com', '李四是张三的妹妹');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10003', '苍老师', 18, 'W', '15866668888', 'canglaoshi@163.com', '这里是苍老师的备注');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10004', '刘备', 30, 'M', '18666666666', 'liubei@163.com', '我是刘皇叔,专门卖草鞋');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10005', '关羽', 29, 'M', '18655555555', 'guanyu@163.com', '我是关羽,卖绿豆的');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10006', ' 孙悟空', 500, 'M', '19100002222', 'wukong@163.com', '我是孙悟空,我有金箍棒');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10007', ' 猪八戒', 488, 'M', '18900003333', 'bajie@163.com', '猪八戒');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10008', ' 沙僧', 200, 'M', '18678652388', 'shaseng@163.com', '我是沙僧');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10009', ' 唐僧', 25, 'M', '18766809012', 'shaseng@163.com', '我是唐僧,你们都是弟弟');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10010', ' 老树龙井', 20, 'W', '15988801234', 'longjing@163.com', 'laoshulongjing');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10011', ' 苏檀儿', 22, 'W', '18809826678', 'sutaner@163.com', '苏檀儿');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10012', ' 宁毅', 20, 'M', '15900008888', 'ningyi@163.com', '宁毅');
INSERT INTO david.t_student_info (id, name, age, sex, phone, email, rsv1) VALUES ('10013', ' 小婵', 18, 'W', '18566780092', 'xiaochan@163.com', '我是小婵');

2.2、生成数据库实体,Dao,Mapper等

根据数据库的结构,生成数据库实体:StudentInfo
数据库Dao接口:StudentInfoDAO
mapper文件:StudentInfoDAO.xml


2.3、编写Service及ServiceImpl类

 

编写服务类:StudentInfoService,增加一个服务方法findAll()
StudentInfoService
/**
 * @author zhang_wei
 * @version 1.0.0
 * @Classname StudentInfoService
 * @Date 2021/2/26 15:35
 * @Created by zhang_wei
 * @since 1.0.0
 */
public interface StudentInfoService {

    /**
     * 查询所有
     * @return
     */
    List<StudentInfo> findAll();

}

编写服务实现类:StudentInfoServiceImpl
StudentInfoServiceImpl
/**
 * @author zhang_wei
 * @version 1.0.0
 * @Classname StudentInfoServiceImpl
 * @Date 2021/2/26 15:35
 * @Created by zhang_wei
 * @since 1.0.0
 */
@Service
public class StudentInfoServiceImpl implements StudentInfoService {

    Logger logger = LoggerFactory.getLogger(StudentInfoServiceImpl.class);

    @Autowired
    StudentInfoDAO studentInfoDAO;

    @Override
    public List<StudentInfo> findAll() {
        return studentInfoDAO.findAll();
    }
}

2.4、编写Dao中的方法,及Mapper.xml中的SQL

StudentInfoDAO中增加findAll方法, 如下:
    /**
     * 查询所有
     * @return
     */
    List<StudentInfo> findAll();

StudentInfoDAO.xml 增加findAll的SQL,如下:
   <select id="findAll" parameterType="java.lang.String" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from t_student_info
    </select>

2.5、编写Controller,拦截web请求

编写StudInfoController类,增加findAll方法查询所有的数据,
package com.iambest.druid.controller;

import com.iambest.druid.entity.StudentInfo;
import com.iambest.druid.model.PageRequest;
import com.iambest.druid.model.PageResult;
import com.iambest.druid.service.StudentInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;

/**
 * @author zhang_wei
 * @version 1.0.0
 * @Classname StudInfoController
 * @Date 2021/2/26 11:07
 * @Created by zhang_wei
 * @since 1.0.0
 */
@Controller
public class StudInfoController {

    Logger logger = LoggerFactory.getLogger(StudInfoController.class);

    @Autowired
    StudentInfoService studentInfoService;

    @RequestMapping("/getAll")
    @ResponseBody
    public List<StudentInfo> getAllStudentInfos() {
        List<StudentInfo> result = studentInfoService.findAll();
        logger.info("result={}", result);
        return result;
    }

}


2.6、修改Application主程序,增加Dao的扫描

修改DruidApplication类,增加MapperScan扫描,扫描我们的dao所在的包
package com.iambest.druid;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

/**
 * @author zhang_wei
 * @version 1.0.0
 * @Classname DruidApplication
 * @Date 2021/2/26 9:17
 * @Created by zhang_wei
 * @since 1.0.0
 */
@MapperScan(basePackages = "com.iambest.druid.dao")
@SpringBootApplication
public class DruidApplication {

    public static void main(String[] args) {
        SpringApplication.run(DruidApplication.class, args);
    }
}

3、启动服务,并测试

3.1、启动服务

启动服务,控制台输出如下,表示服务启动成功:
2021-03-03 22:07:05.218 [main] INFO  AnnotationMBeanExporter [] - Bean with name 'statFilter' has been autodetected for JMX exposure
2021-03-03 22:07:05.218 [main] INFO  AnnotationMBeanExporter [] - Bean with name 'dataSource' has been autodetected for JMX exposure
2021-03-03 22:07:05.222 [main] INFO  AnnotationMBeanExporter [] - Located MBean 'dataSource': registering with JMX server as MBean [com.alibaba.druid.spring.boot.autoconfigure:name=dataSource,type=DruidDataSourceWrapper]
2021-03-03 22:07:05.223 [main] INFO  AnnotationMBeanExporter [] - Located MBean 'statFilter': registering with JMX server as MBean [com.alibaba.druid.filter.stat:name=statFilter,type=StatFilter]
2021-03-03 22:07:05.231 [main] INFO  Http11NioProtocol [] - Starting ProtocolHandler ["http-nio-8080"]
2021-03-03 22:07:05.240 [main] INFO  NioSelectorPool [] - Using a shared selector for servlet write/read
2021-03-03 22:07:05.249 [main] INFO  TomcatEmbeddedServletContainer [] - Tomcat started on port(s): 8080 (http)
2021-03-03 22:07:05.253 [main] INFO  DruidApplication [] - Started DruidApplication in 3.102 seconds (JVM running for 3.783)

3.2、测试服务

打开浏览器,输入:http://localhost:8080/getAll
浏览器输出如下,表示成功:


查看IDEA的控制台,输出如下:
2021-03-03 22:11:12.157 [http-nio-8080-exec-7] DEBUG findAll [a77726b7-fb26-4fae-935d-bd3f00a7fc90] - ==>  Preparing: select id, `name`, age, sex, phone, email, rsv1 from t_student_info 
2021-03-03 22:11:12.157 [http-nio-8080-exec-7] DEBUG findAll [a77726b7-fb26-4fae-935d-bd3f00a7fc90] - ==> Parameters: 
2021-03-03 22:11:12.160 [http-nio-8080-exec-7] DEBUG findAll [a77726b7-fb26-4fae-935d-bd3f00a7fc90] - <==      Total: 13
2021-03-03 22:11:12.160 [http-nio-8080-exec-7] INFO  StudInfoController [a77726b7-fb26-4fae-935d-bd3f00a7fc90] - result=[StudentInfo [Hash = 46730193, id=10001, name=张三, age=20, sex=M, phone=13988887777, email=zhangsan@163.com, rsv1=备注, serialVersionUID=1], StudentInfo [Hash = 46730194, id=10002, name=李四, age=18, sex=W, phone=15988887777, email=lisi@163.com, rsv1=李四是张三的妹妹, serialVersionUID=1], StudentInfo [Hash = 46730195, id=10003, name=苍老师, age=18, sex=W, phone=15866668888, email=canglaoshi@163.com, rsv1=这里是苍老师的备注, serialVersionUID=1], StudentInfo [Hash = 46730196, id=10004, name=刘备, age=30, sex=M, phone=18666666666, email=liubei@163.com, rsv1=我是刘皇叔,专门卖草鞋, serialVersionUID=1], StudentInfo [Hash = 46730197, id=10005, name=关羽, age=29, sex=M, phone=18655555555, email=guanyu@163.com, rsv1=我是关羽,卖绿豆的, serialVersionUID=1], StudentInfo [Hash = 46730198, id=10006, name= 孙悟空, age=500, sex=M, phone=19100002222, email=wukong@163.com, rsv1=我是孙悟空,我有金箍棒, serialVersionUID=1], StudentInfo [Hash = 46730199, id=10007, name= 猪八戒, age=488, sex=M, phone=18900003333, email=bajie@163.com, rsv1=猪八戒, serialVersionUID=1], StudentInfo [Hash = 46730200, id=10008, name= 沙僧, age=200, sex=M, phone=18678652388, email=shaseng@163.com, rsv1=我是沙僧, serialVersionUID=1], StudentInfo [Hash = 46730201, id=10009, name= 唐僧, age=25, sex=M, phone=18766809012, email=shaseng@163.com, rsv1=我是唐僧,你们都是弟弟, serialVersionUID=1], StudentInfo [Hash = 46730223, id=10010, name= 老树龙井, age=20, sex=W, phone=15988801234, email=longjing@163.com, rsv1=laoshulongjing, serialVersionUID=1], StudentInfo [Hash = 46730224, id=10011, name= 苏檀儿, age=22, sex=W, phone=18809826678, email=sutaner@163.com, rsv1=苏檀儿, serialVersionUID=1], StudentInfo [Hash = 46730225, id=10012, name= 宁毅, age=20, sex=M, phone=15900008888, email=ningyi@163.com, rsv1=宁毅, serialVersionUID=1], StudentInfo [Hash = 46730226, id=10013, name= 小婵, age=18, sex=W, phone=18566780092, email=xiaochan@163.com, rsv1=我是小婵, serialVersionUID=1]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值