博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五、使用druid管理数据库,mybatis连接mysql数据库
阅读量:6478 次
发布时间:2019-06-23

本文共 15985 字,大约阅读时间需要 53 分钟。

   简介:    使用 mybatis 连接 mysql 数据库, 一套简单的增删改查流程, 前台用 bootstrap, bootstrap-table 框架, 最后用 druid 监控数据库连接情况

项目源码:     ->     DruidMybatisMysql

 私聊QQ: 1486866853

1.demo的完整结构

2. pom.xml 依赖  和  application.yml  配置 

1) pom.xml 主要 依赖  mysql-connector-java  , mybatis-spring-boot-starter  ,druid-spring-boot-starter

4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.3.RELEASE
com.demo
DruidMybatisMysql
0.0.1-SNAPSHOT
DruidMybatisMysql
使用druid管理数据库,mybatis连接mysql数据库
1.8
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.0
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
mysql
mysql-connector-java
runtime
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
com.alibaba
druid-spring-boot-starter
1.1.14
org.springframework.boot
spring-boot-maven-plugin
pom.xml

2) application配置 

# springBoot内置容器的配置server:  # 端口号  port: 8086  servlet:    # 项目前缀    context-path: /dataSourcespring:  # 数据源配置  datasource:    # mysql数据库配置    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC      username: root    password: ok    # druid配置    druid:      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙      filters: config,wall,stat        # 初始化数量      initialSize: 5      #   最小连接池数量      minIdle: 2      # 最大连接池数量      maxActive: 20      # 连接超时时间      maxWait: 60000      # 打开psCache, 对支持游标的数据库性能提升巨大      poolPreparedStatements: true      # 指定每个连接PsCache的大小      maxPoolPreparedStatementPerConnectionSize: 20      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒      timeBetweenEvictionRunsMillis: 6000      # 指定一个空闲连接最少空闲多久后可被清除,单位是毫秒      minEvictableIdleTimeMillis: 300000      # 验证数据库连接的查询语句      validationQuery: select 'x'      # 当连接空闲时,是否执行连接测试      testWhileIdle: true       # 当从连接池借用连接时,是否测试该连接       testOnBorrow: false        # 在连接归还到连接池时是否测试该连接      testOnReturn: false        # 打开mergeSql,慢sql记录      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000      # thymeleaf 模板引擎配置  thymeleaf:    cache: false      # thymeleaf模板对html5没有结束符的标签解决    mode: LEGACYHTML5    # thymeleaf修饰的动态页面 自定义根目录(默认就是templates)    prefix: classpath:/templates/    # mybatis配置mybatis:  # 映射xml的文件位置  mapper-locations: classpath:mybatis/*.xml  # 实体类所在包,简化xml中resultMap中实体类的全类名写法  type-aliases-package: demo.domain
application.yml

3.代码 : 建表sql ,  后台代码 , mapper.xml 和  前台html

create table `test`(    `test_id` varchar(36) not null comment '唯一id' primary key,    `test_password` varchar(32) not null comment '密码',    `test_name` varchar(32) not null comment '名称') comment '测试'
test.sql
package demo.domain;/** * @author GrassPrince * @Da2019年4月3日 2019年4月3日 - 下午8:09:33 * @Description Test */public class Test {        /**  唯一id */    private String testId;        /**  密码  */    private String testPassword;        /**  名称  */    private String testName;    public Test(String testId, String testPassword, String testName) {        this.testId = testId;        this.testPassword = testPassword;        this.testName = testName;    }        public Test() {    }    public String getTestId() {        return testId;    }    public void setTestId(String testId) {        this.testId = testId;    }    public String getTestPassword() {        return testPassword;    }    public void setTestPassword(String testPassword) {        this.testPassword = testPassword;    }    public String getTestName() {        return testName;    }    public void setTestName(String testName) {        this.testName = testName;    }    @Override    public String toString() {        return "Test [testId=" + testId + ", testPassword=" + testPassword + ", testName=" + testName + "]";    }        }
Test
package demo.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;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.PutMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import demo.domain.Test;import demo.service.TestService;/** * @author GrassPrince * @Da2019年4月3日 2019年4月3日 - 下午7:42:54 * @Description 测试  controller : 增删改查 */@Controller@RequestMapping("/test")public class TestController {        @Autowired    private TestService testService;        // 跳转到测试页面    @GetMapping("/testHtml")    public ModelAndView testHtml() {        return new ModelAndView("test");    }        // 根据testId查询test    @PostMapping("/queryById")    @ResponseBody    public List
queryById(@RequestParam ("testId") String testId) { return testService.queryById(testId); } // 根据testId删除test @DeleteMapping("/deleteById") @ResponseBody public String deleteById(@RequestParam("testId") String testId) { Integer deleteNum = testService.deleteById(testId); if(deleteNum == 0) { return "删除失败"; } return "删除成功"; } //批量删除 @DeleteMapping("/deleteIds") @ResponseBody public String deleteIds(@RequestParam("testIds") String testIds) { Integer deleteNum = testService.deleteIds(testIds); if(deleteNum == 0) { return "删除失败"; } return "删除成功"; } // 修改test @PutMapping("/updateTest") @ResponseBody public String updateTest(Test test) { Integer updateNum = testService.updateTest(test); if(updateNum == 0) { return "更新失败"; } return "更新成功"; } // 新建一个test @PostMapping("/add") @ResponseBody public String add(Test test) { Integer addNum = testService.add(test); if(addNum == 0) { return "新增失败"; } return "新增成功"; }}
TestController
package demo.service;import java.util.List;import demo.domain.Test;/** * @author GrassPrince * @Da2019年4月3日 2019年4月3日 - 下午7:50:50 * @Description 测试的service接口 */public interface TestService {    /** 根据testId查询test */    List
queryById(String testId); /** 根据testId删除test */ Integer deleteById(String testId); /** 批量删除 */ Integer deleteIds(String testIds); /** 修改test */ Integer updateTest(Test test); /** 新增test */ Integer add(Test test);}
TestService
package demo.service.impl;import java.util.List;import java.util.UUID;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import demo.domain.Test;import demo.mapper.TestMapper;import demo.service.TestService;/** * @author GrassPrince * @Da2019年4月3日 2019年4月3日 - 下午7:51:26 * @Description 测试的 service实现类 */@Servicepublic class TestServiceImpl implements TestService{        @Autowired    private TestMapper testMapper;    /** 根据testId查询test */    @Override    public List
queryById(String testId) { return testMapper.queryById(testId); } /** 根据testId删除test */ @Override public Integer deleteById(String testId) { return testMapper.deleteById(testId); } /** 批量删除 */ @Override public Integer deleteIds(String testIds) { String[] deleteIds = testIds.split(","); return testMapper.deleteIds(deleteIds); } /** 修改test */ @Override public Integer updateTest(Test test) { return testMapper.updateTest(test); } /** 新增test */ @Override public Integer add(Test test) { // 用uuid设置随机的主键id test.setTestId(UUID.randomUUID().toString().replace("-", "")); return testMapper.add(test); } }
TestServiceImpl
package demo.mapper;import java.util.List;import org.apache.ibatis.annotations.Param;import demo.domain.Test;/** * @author GrassPrince * @Da2019年4月3日 2019年4月3日 - 下午7:53:50 * @Description 测试的mapper */public interface TestMapper {    /** 根据testId查询test */    List
queryById(@Param("testId") String testId); /** 根据testId删除test */ Integer deleteById(@Param("testId") String testId); /** 批量删除 */ Integer deleteIds(@Param("testIds") String[] deleteIds); /** 修改test */ Integer updateTest(Test test); /** 新增test */ Integer add(Test test);}
TestMapper
delete from test where test_id = #{testId}
delete from test
test_id in
#{testId}
update test set test_password = #{testPassword}, test_name = #{testName} where test_id = #{testId}
insert into test values(#{testId}, #{testPassword}, #{testName})
TestMapper.xml
package demo;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("demo.mapper")public class DruidMybatisMysqlApplication {    public static void main(String[] args) {        SpringApplication.run(DruidMybatisMysqlApplication.class, args);    }}
DruidMybatisMysqlApplication
      查询        

测试查询

   
   
test.html

4.页面效果(  服务启动后地址  :   http://localhost:8086/dataSource/test/testHtml  )

5.集成 druid 管理数据库:  主要是一个配置类和 application.yml的配置文件

/** *  */package demo.config;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import javax.sql.DataSource;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;/** * @author GrassPrince * @Da2019年4月3日 2019年4月3日 - 下午8:00:17 * @Description druid数据库监测配置类    ->    项目启动后的访问地址  http://localhost:8086/dataSource/druid/index.html */@Configurationpublic class DruidConfig {        /**     *    注入DruidDataSource在yml配置文件中的配置     *      prefix: 获取以spring.datasource为前缀的配置内容, 减少一个个@Value获取     */    @ConfigurationProperties(prefix = "spring.datasource")    @Bean    public DataSource getDataSource() {        return new DruidDataSource();    }        /**     *    配置Druid的监控 : 一个管理后台的Servlet     */    @Bean    public ServletRegistrationBean
statViewServlet() { ServletRegistrationBean
bean = new ServletRegistrationBean
(new StatViewServlet(), "/druid/*"); Map
initParams = new HashMap
(); initParams.put("loginUsername","admin"); //用户名 initParams.put("loginPassword","123456"); //密码 initParams.put("allow",""); //IP白名单(没有配置或者为空,则允许所有访问) initParams.put("deny",""); //IP黑名单 (存在共同时,deny优先于allow) bean.setInitParameters(initParams); return bean; } /** * 配置一个web监控的filter */ @Bean public FilterRegistrationBean
webStatFilter(){ FilterRegistrationBean
bean = new FilterRegistrationBean
(); bean.setFilter(new WebStatFilter()); Map
initParams = new HashMap<>(); initParams.put("exclusions", "*.js,*.css,/druid/*"); 忽略资源 bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; }}
DruidConfig

 

6.配置后页面效果

 

 7.个人心得

1)   mybatis的配置文件很少,全在 yml 文件中, 需注意 启动类添加的 注解  @MapperScan("demo.mapper"), 扫描mapper层的接口   

2)   mysql数据库url的配置   url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC  ,

    springBoot 2.0 以上的版本 用 mysql 8.0.12客户端 时会出现时区错误, 用 serverTimezone=UTC  解决 , driver-class-name: com.mysql.cj.jdbc.Driver 也改变

3) xml中的参数在mapper接口中通过 @Param 注解注入较实用(list集合和数组都可以直接传)

 

转载于:https://www.cnblogs.com/y369/p/10655701.html

你可能感兴趣的文章
Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
查看>>
001.为什么选择用AngularJs开发?
查看>>
前端大牛们都学过哪些?
查看>>
Spring MVC概述(2)
查看>>
利用simulink分析系统各种传递函数的BODE图、阶跃响应、单位脉冲响应
查看>>
在iOS当中发送电子邮件和短信
查看>>
python的单例模式
查看>>
13~1003的和
查看>>
myeclipse启动jboss报ERROR [MainDeployer] Could not create deployment
查看>>
pycharm如何新项目如何不默认创建虚拟环境(吐槽)
查看>>
Loadrunner检查点小结(很经典)
查看>>
MySQL字段类型详解
查看>>
位运算符
查看>>
Web框架及Django初始化
查看>>
Linear Regression(一)——
查看>>
ORACLE 的游标
查看>>
虚拟机安装的UBUNTU全屏的方法:
查看>>
java虚拟机类加载器
查看>>
ASP.NET状态管理之八(会话Session)
查看>>
I.MX6 Android 5.1.1 下载、编译
查看>>