zoukankan      html  css  js  c++  java
  • SpringBoot无废话入门04:MyBatis整合

    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";

        }

    }

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

            执行之,

            注意了,如果你已经忘记了如何启动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注解就能支持事务啦。本文不再赘述,大家自己尝试一下吧。

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

  • 相关阅读:
    moss jscript
    CSS两端对准
    简单的日期格式验证
    .NET中使用Exchange 2007 Webservice来读取邮件
    张二狗
    spcontext
    Infopath表单用改控件值提交或作别的更改时一定要在控件属性浏览器表单的回发设置为始终.
    使用 Web 服务
    SharePoint 2010中开发模式的改进 COM 客户端对象模型
    Retrieve data from Separate Oracle System
  • 原文地址:https://www.cnblogs.com/luminji/p/10542223.html
Copyright © 2011-2022 走看看