2020-02-15

庚子鼠年 戊寅月 戊子日

描述

spring-mybatis 文档阅读 http://mybatis.org/spring/zh/index.html

spring-mybatis xml配置

spring-mybatis java配置

技术总结:spring-mybaits配置https://blog.csdn.net/qq_40674583/article/details/104332196

随笔

dataSource


    
    
    
    
    
    
    
    

    
    

    
    

    
    

    

    
    
    

    
    
    

    
    

    
    
    

SqlSessionFactoryBean

在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。 而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。


  
    
  

属性

  • SqlSessionFactory 有一个唯一的必要属性:用于 JDBC 的 DataSource。这可以是任意的 DataSource 对象,它的配置方法和其它 Spring 数据库连接是一样的。
  • 一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。通常,基础配置指的是 元素,需要注意的是,这个配置文件并不需要是一个完整的 MyBatis 配置。

事务




    




    
        
        
    




    

自动扫描Mapper


如果需要使用mybatis的SqlSession


  

是自动扫描不香吗?要去用SqlSession获取mapper

使用SqlSessionDaoSupport

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
  public User getUser(String userId) {
    return getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

  

使用注解配置

test测试

Maven 依赖

    
        org.springframework
        spring-test
        5.0.2.RELEASE
    
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@ContextConfiguration(classes = SimpleConfiguration.class)
多个文件时,可用{}
@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" })

引入配置参数

@PropertySource({"classpath:teacher.properties"}) //指定某配置文件,无此参数则在默认全局配置文件中获取
@ConfigurationProperties(prifix=“teacher”) //配置文件中前缀名为teacher的配置项的所有属性都映射到此JavaBean中

Resource 子类

ClassPathResource可用来获取类路径下的资源文件

FileSystemResource可用来获取文件系统里面的资源。FileSystemResource还可以往对应的资源文件里面写内容,当然前提是当前资源文件是可写的,这可以通过其isWritable()方法来判断。FileSystemResource对外开放了对应资源文件的输出流,可以通过getOutputStream()方法获取到。

UrlResource可用来代表URL对应的资源,它对URL做了一个简单的封装。

ByteArrayResource是针对于字节数组封装的资源,它的构建需要一个字节数组。

ServletContextResource是针对于ServletContext封装的资源,用于访问ServletContext环境下的资源。

InputStreamResource是针对于输入流封装的资源,它的构建需要一个输入流。

SpringConfig.java 配置类

package chang.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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;
import org.springframework.core.io.ClassPathResource;

import javax.sql.DataSource;

@Configuration
@MapperScan("chang.mapper")
@PropertySource(value= {"classpath:db.properties"}, ignoreResourceNotFound = true) //读取外部文件获取jdbc参数值
public class SpringConfig {

    @Value("${url}")
    private String url;

    @Value("${driver}")
    private String driver;

    @Value("${user}")
    private String user;

    @Value("${password}")
    private String password;

    @Bean(destroyMethod = "close",initMethod = "init")
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(user);
        druidDataSource.setPassword(password);
        /*配置初始化大小、最小、最大*/
        druidDataSource.setInitialSize(1);
        druidDataSource.setMinIdle(1);
        druidDataSource.setMaxActive(10);
        /*配置获取连接等待超时的时间*/
        druidDataSource.setMaxWait(10000L);
        /*配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒*/
        druidDataSource.setTimeBetweenEvictionRunsMillis(60000L);
        /*配置一个连接在池中最小生存的时间,单位是毫秒*/
        druidDataSource.setMinEvictableIdleTimeMillis(300000L);

    /*
        

        
        
        

        
        
        

        
        

        
        
        
      */
        return druidDataSource;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource());
        factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        return factoryBean.getObject();
    }


}

测试类

package chang.mapper;

import chang.config.SpringConfig;
import chang.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void javaConfig_findOneByXh(){

        User user = userMapper.findOneByXh("20177583");
        System.out.println(user);

    }

}

你可能感兴趣的:(2020-02-15)