SpringBoot整合数据源Druid和持久层框架Mybatis

前置知识

关键一:对应数据库驱动Driver必须有

驱动Driver是真正与数据库建立连接的东西
SpringBoot整合数据源Druid和持久层框架Mybatis_第1张图片

关键二:引入数据库连接池技术(Druid)

引入数据库连接池技术包装了jdbc(避免原生jdbc频繁建立连接,达到连接复用的效果)
SpringBoot整合数据源Druid和持久层框架Mybatis_第2张图片

关键三:引入持久层框架简化持久层代码

SpringBoot整合数据源Druid和持久层框架Mybatis_第3张图片

准备

一、pom.xml引入关键依赖

1、具体数据库驱动需要自己引入(这里使用自定义版本,而不是parent控制版本)
2、使用的哪种第三方数据库连接池技术需要自己引入
3、SpringBoot有第三方starter:mybatis-spring-boot-starter

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.46version>
        dependency>

        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.17version>
        dependency>

        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.1.4version>
        dependency>

二、application配置关键属性

关键一:告诉数据源基本认证信息以及数据库驱动Driver在哪里

spring:
  #数据源连接数据库基本属性配置
  datasource:
    url: jdbc:mysql:///spring
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

关键二:数据库连接池基本配置

由于druid还提供了很好的监控功能,我们可以对整个项目进行监控

datasource:
	......
	druid:
	
	   #基本配置
	     initial-size: 5
	     max-active: 20
	     max-wait: 1000 #单位ms
	     pool-prepared-statements: false #mysql下不缓存preparedStatement
	
	   #监控配置
	     #开启druid监控视图Servlet
	     stat-view-servlet:
	       enabled: true
	       login-username: admin
	       login-password: admin
	     #web监控
	     web-stat-filter:
	       enabled: true
	       url-pattern: /*
	       session-stat-enable: true
	     #对Spring监控
	     aop-patterns: com.neuq.admin.* #监控该包下的Spring
	     #对sql的监控与设置(防止sql注入等非法操作)
	     filter:
	       #sql监控
	       stat:
	         enabled: true
	         log-slow-sql: true #监控慢查询
	         slow-sql-millis: 1000
	       #sql防火墙
	       wall:
	         enabled: true
	         config:
	           drop-table-allow: false #拦截删表操作

druid监控视图Servlet(“/druid/index.html”)
SpringBoot整合数据源Druid和持久层框架Mybatis_第4张图片

关键三:对象属性命名规范φ(゜▽゜*)♪

配置Mybatis实现驼峰命名规范转换!!!

#mtbatis配置
mybatis:
  configuration:
    map-underscore-to-camel-case: true

SpringBoot整合数据源Druid和持久层框架Mybatis_第5张图片


实现DAO层方式一:全注解配置(死SQL)

@Mapper:告诉Mybatis这是需要映射实现的接口
@Repository:持久层组件注入IOC注释 (可以不用)
@操作方式(sql语句)【参数类型、返回类型都不用写,直接反射获取】

@Mapper
@Repository
public interface UserDao {
    //注册
    @Insert("insert into admin(username,password,full_name,address,email,city,gender) " +
            "values (#{username},#{password},#{fullName},#{address},#{email},#{city},#{gender})")
    @Options(useGeneratedKeys = true, keyProperty = "userId", keyColumn = "user_id")
    void insertUser(User user);

    //登录
    @Select("select *  from admin where username=#{username} and password=#{password}")
    User queryUser(User user);

    //验证用户名
    @Select("select * from admin where username=#{username}")
    User queryUserByName(User user);
}

结束了,对,就结束了!!

@Options(…)属性:

  1. 因为insert不会返回对象,所以你插入对象后想获取userid就得 :
    @Options(useGeneratedKeys = true, keyProperty = “instanceId”, keyColumn = “instance_id”)
    :意思就是,从instance_id这个字段里面把数据放到传入对象的instanceId成员变量里面
  2. useCache表示本次查询结果被缓存以提高下次查询速度(默认true)
  3. flushCache = false表示下次查询时不刷新缓存
  4. timeout = 10000表示查询结果缓存10000

业务层实现高级功能

启用事务

一、配置类中添加@EnableTransactionManagement开启事务

@Configuration
@EnableTransactionManagement
public class MyBatisConfig {
}

二、业务层接口具体使用事务

注意:是业务层接口!!!

//支付
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ,timeout = 36000,rollbackFor = Exception.class)
public boolean pay(User from, User to, BigDecimal money);

PageHelper分页

一、引入依赖 第三方starter

 
 <dependency>
     <groupId>com.github.pagehelpergroupId>
     <artifactId>pagehelper-spring-boot-starterartifactId>
     <version>1.2.5version>
 dependency>

二、pagehelper属性配置

#pagehelper配置
pagehelper:
  helper-dialect: mysql #支持mysql
  reasonable: true #合理化 小于0查询第一页 大于最大 查询最后一页
  support-methods-arguments: true #是否通过mapper接口传递参数
  params: count=countSql #总页数为countSql 目前不知道怎么用

三、控制层使用PageHelper分页

注意:

  • 使用PageHelper进行分页查询后会返回Page对象(com.github.pagehelper.Page)
  • Page对象会查出 当前页码:pageNum
  • 页数据量:pageSize
  • 总数据量:total
  • 总页数:pages
  • 等…
  public String dynamicPage(Integer pageNum, Integer pageSize, Model model){
      //启用PageHelper分页功能 统一拦截sql为其提供分页功能
      Page<Object> page = PageHelper.startPage(pagrNum, pageSize);
      List<User> users = userService.queryUsers();
      //获得总数据量
      long total = page.getTotal();
      //获得总页数
      int pages = page.getPages();
      model.addAttribute("total",total);
      model.addAttribute("pages",pages);
      model.addAttribute("users",users);
      return "table/dynamic_table";
  }

—————————————————————————————

实现DAO层方式二:xml映射配置(可实现动态SQL)

一、创建映射xml文件存放路径

1、在resources资源文件夹下创建持久层接口的xml映射文件的存放位置
在这里插入图片描述
2、属性配置文件中告诉Mybatis持久层接口的xml映射文件的路径

#mtbatis配置
mybatis:
  mapper-locations: classpath:daoMapper/*.xml
二、持久层定义接口

@Mapper:告诉Mybatis这是需要映射实现的接口
@Repository:持久层组件注入IOC注释

@Mapper
@Repository
public interface UserDao {
    //注册
    void insertUser(User user);
    //登录
    User queryUser(User user);
    //验证用户名
    User queryUserByName(User user);
}
三、为每个接口创建映射文件

1、和原生Mybatis一样实现




DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.neuq.admin.dao.UserDao">
    <insert id="insertUser">
        insert into admin(username,password,full_name,address,email,city,gender)
        values (#{username},#{password},#{fullName},#{address},#{email},#{city},#{gender})
    insert>

    <select id="queryUser" resultType="com.neuq.admin.domain.User">
        select *
        from admin
        where username=#{username} and password=#{password}
    select>

    <select id="queryUserByName" resultType="com.neuq.admin.domain.User">
        select *
        from admin
        where username=#{username}
    select>

mapper>

2、必须保证接口对应的xml文件必须和接口名相同
SpringBoot整合数据源Druid和持久层框架Mybatis_第6张图片

你可能感兴趣的:(Spring,MyBatis,mybatis,mysql,spring,boot)