zoukankan      html  css  js  c++  java
  • [六]SpringBoot 之 连接数据库(mybatis)

    在进行配置之前首先要了解springboot是如何使用纯java代码方式初始化一个bean的

    以前的版本是在xml中使用beans标签,在其里面配置bean,那么纯Java代码怎么实现呢?

    答案就是使用@Configuration注解和@Bean,代码如下:当然搜资料过程中你会学习到其他的知识,并尝试使用

    1.mybatis-spring-boot-stater的Maven依赖

    <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
    
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
            </dependency>

    2.配置数据源,这里使用的dbcp的数据源,具体大家可以看自己的情况来使用

    在src/main/resource中,添加一个application.properties配置文件,这里面添加了一些数据库连接的信息

    ########################################################
    ###datasource
    ########################################################

    spring.datasource.url = jdbc:mysql://123.206.228.200:3306/test

    spring.datasource.username = shijunjie

    spring.datasource.password = ******

    spring.datasource.driverClassName = com.mysql.jdbc.Driver

    spring.datasource.max-active=20

    spring.datasource.max-idle=8

    spring.datasource.max-maxWait=100

    spring.datasource.min-idle=8

    spring.datasource.initial-size=10

    2.1注入数据源

    package me.shijunjie.config;
    
    import org.apache.commons.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
    @PropertySource("classpath:application.properties")
    public class DataSourceConfiguration {
        @Value("${spring.datasource.driverClassName}")
        private String driver;
        @Value("${spring.datasource.url}")
        private String url;
        @Value("${spring.datasource.username}")
        private String username;
        @Value("${spring.datasource.password}")
        private String password;
        @Value("${spring.datasource.max-active}")
        private int maxActive;
        @Value("${spring.datasource.max-idle}")
        private int maxIdel;
        @Value("${spring.datasource.max-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;
        }
    }

    2.2MyBatis的配置

    package me.shijunjie.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);
        }
    }

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

    package me.shijunjie.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
    @AutoConfigureAfter(MybatisConfig.class)
    public class MyBatisMapperScannerConfig {
        @Bean
        public MapperScannerConfigurer mapperScannerConfigurer() {
            MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
            //获取之前注入的beanName为sqlSessionFactory的对象
            mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
            //指定xml配置文件的路径
            mapperScannerConfigurer.setBasePackage("me.shijunjie.dao");
            return mapperScannerConfigurer;
        }
    }

    2.4使用@Mapper注解来标识一个接口为MyBatis的接口,MyBatis会自动寻找这个接口

    package me.shijunjie.dao;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Mapper;
    
    import me.shijunjie.entity.Demo2;
    
    @Mapper
    public interface DemoDao2{
        
        @Insert("insert into t_demo(tname) "+
                "values(#{name})")
        int save(Demo2  demo);
    }

    3.编写Controller 和 Service 以及实体类

    编写实体类:

    package me.shijunjie.entity;
    
    public class Demo2 {
    
        public Demo2() {
        }
    
        public Demo2(long id, String name) {
            this.id = id;
            this.name = name;
        }
    
        private long id;
    
        private String name;
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    
    }

    编写service和实现类:

    package me.shijunjie.service;
    
    import me.shijunjie.entity.Demo2;
    
    public interface DemoService {
        public void save(Demo2 demo);
    }
    package me.shijunjie.service.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import me.shijunjie.dao.DemoDao2;
    import me.shijunjie.entity.Demo2;
    import me.shijunjie.service.DemoService;
    
    @Service
    public class DemoServiceImpl implements DemoService {
    
        @Autowired
        private DemoDao2 demoDao;
    
        public void save(Demo2 demo){
            demoDao.save(demo);
        }
    }

    编写Controller

    package me.shijunjie.controller;
    
    import javax.annotation.Resource;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import me.shijunjie.entity.Demo2;
    import me.shijunjie.service.DemoService;
    
    @RestController
    @RequestMapping("/demo")
    public class DemoController {
    
        @Resource
        private DemoService demoService;
    
        /**
    
         * 测试保存数据方法.
    
         * @return
    
         */
    
        @RequestMapping("/save")
        public String save(){
            Demo2 d = new Demo2();
            d.setName("Angel2");
            demoService.save(d);//保存数据.
            return "ok.DemoController.save";
    
        }
    }

    编写入口类

    package me.shijunjie.controller;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.web.SpringBootServletInitializer;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    @ComponentScan(basePackages={"me.shijunjie"}) // 扫描该包路径下的所有spring组件
    /*@EnableJpaRepositories("me.shijunjie.dao") // JPA扫描该包路径下的Repositorie
    *//*@EntityScan("me.shijunjie.entity") // 扫描实体类
    */@SpringBootApplication
    @EnableScheduling
    public class App extends SpringBootServletInitializer{
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

    测试

    打开浏览器输入http://localhost:8080/demo/save

    成功

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/s648667069/p/6483341.html
Copyright © 2011-2022 走看看