欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot无废话入门04:MyBatis整合

程序员文章站 2023-09-09 10:50:04
1.Parent引入及pom配置 首先,如果要支持mybatis,那么我们就应该引入mybatis的starter。同时,由于连接本身还需要用jdbc的connetor和连接池,所以一并需要引入这些依赖。如下是一个完整的的最简pom,

1.parent引入及pom配置

        首先,如果要支持mybatis,那么我们就应该引入mybatis的starter。同时,由于连接本身还需要用jdbc的connetor和连接池,所以一并需要引入这些依赖。如下是一个完整的的最简pom,

<?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 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelversion>4.0.0</modelversion>

  <packaging>war</packaging>

  <parent>

    <groupid>org.springframework.boot</groupid>

    <artifactid>spring-boot-starter-parent</artifactid>

    <version>2.1.3.release</version>

  </parent>

  <name>testboot01</name>

  <groupid>com.zuikc</groupid>

  <artifactid>testboot01</artifactid>

  <version>1.0-snapshot</version>

  <dependencies>

      <!--jsp支持, servlet 依赖. -->

      <dependency>

          <groupid>javax.servlet</groupid>

          <artifactid>javax.servlet-api</artifactid>

          <scope>provided</scope>

      </dependency>

      <dependency>

          <groupid>javax.servlet</groupid>

          <artifactid>jstl</artifactid>

      </dependency>

      <!-- tomcat 的支持.-->

      <dependency>

          <groupid>org.springframework.boot</groupid>

          <artifactid>spring-boot-starter-tomcat</artifactid>

      </dependency>

      <dependency>

          <groupid>org.apache.tomcat.embed</groupid>

          <artifactid>tomcat-embed-jasper</artifactid>

          <scope>provided</scope>

      </dependency>

      <dependency>

          <groupid>mysql</groupid>

          <artifactid>mysql-connector-java</artifactid>

      </dependency>

      <dependency>

          <groupid>org.apache.tomcat</groupid>

          <artifactid>tomcat-dbcp</artifactid>

          <version>7.0.47</version>

      </dependency>

      <dependency>

          <groupid>org.apache.tomcat</groupid>

          <artifactid>tomcat-dbcp</artifactid>

          <version>7.0.47</version>

      </dependency>

      <dependency>

          <groupid>org.mybatis.spring.boot</groupid>

          <artifactid>mybatis-spring-boot-starter</artifactid>

          <version>1.3.2</version>

      </dependency>

    <dependency>

      <groupid>org.springframework.boot</groupid>

      <artifactid>spring-boot-starter-web</artifactid>

    </dependency>

  </dependencies>

  <build>

    <plugins>

      <plugin>

        <groupid>org.springframework.boot</groupid>

        <artifactid>spring-boot-maven-plugin</artifactid>

      </plugin>

    </plugins>

  </build>

</project>

2.配置初始化

        首先我们需要将数据库连接配置到文件中,比如prop.properties,

jdbc.driver=com.mysql.jdbc.driver

jdbc.url=jdbc:mysql://localhost:3306/test01?useunicode=true&characterencoding=utf8

jdbc.username=root

jdbc.password=root

jdbc.maxactive=2335

jdbc.maxidel=120

jdbc.maxwait=100

        然后,用java配置的方式将其引入到代码中,创建datasourceconfiguration,

package com.zuikc.config;

import org.apache.tomcat.dbcp.dbcp.basicdatasource;

import org.springframework.beans.factory.annotation.value;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

import org.springframework.context.annotation.propertysource;

@configuration

//这个注解导入刚才增加的jdbc配置文件

@propertysource("classpath:prop.properties")

public class datasourceconfiguration {

    @value("${jdbc.driver}")

    private string driver;

    @value("${jdbc.url}")

    private string url;

    @value("${jdbc.username}")

    private string username;

    @value("${jdbc.password}")

    private string password;

    @value("${jdbc.maxactive}")

    private int maxactive;

    @value("${jdbc.maxidel}")

    private int maxidel;

    @value("${jdbc.maxwait}")

    private long maxwait;

    @bean

    public basicdatasource datasource(){

        basicdatasource datasource = new basicdatasource();

        datasource.setdriverclassname(driver);

        datasource.seturl(url);

        datasource.setusername(username);

        datasource.setpassword(password);

        datasource.setmaxactive(maxactive);

        datasource.setmaxidle(maxidel);

        datasource.setmaxwait(maxwait);

        datasource.setvalidationquery("select 1");

        datasource.settestonborrow(true);

        return datasource;

    }

}

        接着,增加mybatis配置,

package com.zuikc.config;

import javax.sql.datasource;

import org.apache.ibatis.session.sqlsessionfactory;

import org.mybatis.spring.sqlsessionfactorybean;

import org.mybatis.spring.sqlsessiontemplate;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

import org.springframework.jdbc.datasource.datasourcetransactionmanager;

import org.springframework.transaction.platformtransactionmanager;

import org.springframework.transaction.annotation.enabletransactionmanagement;

import org.springframework.transaction.annotation.transactionmanagementconfigurer;

@configuration

//加上这个注解,使得支持事务

@enabletransactionmanagement

public class mybatisconfig implements transactionmanagementconfigurer {

    @autowired

    private datasource datasource;

    @override

    public platformtransactionmanager annotationdriventransactionmanager() {

        return new datasourcetransactionmanager(datasource);

    }

    @bean(name = "sqlsessionfactory")

    public sqlsessionfactory sqlsessionfactorybean() {

        sqlsessionfactorybean bean = new sqlsessionfactorybean();

        bean.setdatasource(datasource);

        try {

            return bean.getobject();

        } catch (exception e) {

            e.printstacktrace();

            throw new runtimeexception(e);

        }

    }

    @bean

    public sqlsessiontemplate sqlsessiontemplate(sqlsessionfactory sqlsessionfactory) {

        return new sqlsessiontemplate(sqlsessionfactory);

    }

}

        注意上面的sqlsessionfactory这个bean。

        然后需要配置mybatis配置文件的路径,这个配置需要与上面的配置分开来写,因为它们有着一个先后顺序,

package com.zuikc.config;

import org.mybatis.spring.mapper.mapperscannerconfigurer;

import org.springframework.boot.autoconfigure.autoconfigureafter;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

@configuration

// 因为这个对象的扫描,需要在mybatisconfig的后面注入,所以加上下面的注解

@autoconfigureafter(mybatisconfig.class)

public class mybatismapperscannerconfig {

    @bean

    public mapperscannerconfigurer mapperscannerconfigurer() {

        mapperscannerconfigurer mapperscannerconfigurer = new mapperscannerconfigurer();

        //获取之前注入的beanname为sqlsessionfactory的对象

        mapperscannerconfigurer.setsqlsessionfactorybeanname("sqlsessionfactory");

        //指定xml配置文件的路径

        mapperscannerconfigurer.setbasepackage("com.zuikc.dao");

        return mapperscannerconfigurer;

    }

}

3.三层架构

        先创建最底层的dao接口,如下:

package com.zuikc.dao;

import java.util.list;

import java.util.map;

import org.apache.ibatis.annotations.mapper;

import org.apache.ibatis.annotations.select;

@mapper

public interface testdao {

    @select("select * from tbl_user;")

    public list<map<string,object>> find();

}

        接着创建service,

package com.zuikc.service;

import com.zuikc.dao.testdao;

import org.springframework.stereotype.service;

import javax.annotation.resource;

import java.util.list;

import java.util.map;

@service

public class testservice {

    @resource

    testdao dao;

    public list<map<string,object>> find(){

        list<map<string,object>> users = dao.find();

        return users;

    }

}

        然后是controller,

package com.zuikc.controller;

import com.zuikc.dao.testdao;

import com.zuikc.service.testservice;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.stereotype.controller;

import org.springframework.web.bind.annotation.requestmapping;

import javax.annotation.resource;

import java.text.simpledateformat;

import java.util.date;

import java.util.list;

import java.util.map;

@controller

public class studentcontroller {

    @autowired

    testservice service;

    @requestmapping(value = {"test01"})

    public string view(map<string, object> map) {

        list<map<string,object>> users = service.find();

        for (map<string, object> user : users) {

            for (map.entry<string, object> entry : user.entryset()) {

                system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue());

            }

        }

        system.out.println(users.size());

        map.put("name", "zuikc.com");

        map.put("date", new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new date()));

        return "views/test01";

    }

}

        经过上面的创建之后,我们的代码结构是这样的,

SpringBoot无废话入门04:MyBatis整合

        执行之,

SpringBoot无废话入门04:MyBatis整合

        注意了,如果你已经忘记了如何启动mysql,那么,下面就是命令哦:

        sudo bin/mysqld_safe --user=mysql &

4.事务支持

        第一步,导入jdbc依赖,

      <dependency>

          <groupid>org.springframework.boot</groupid>

          <artifactid>spring-boot-starter-jdbc</artifactid>

      </dependency>

        注意,有了这个依赖,springboot会自动注入datasourcetransactionmanager。 

        接着,直接在service中添加@transactional注解就能支持事务啦。本文不再赘述,大家自己尝试一下吧。

        感谢关注“码农星球”。本文版权属于“码农星球”。我们提供咨询和培训服务,关于本文有任何困惑,请关注并联系我们。