zoukankan      html  css  js  c++  java
  • springboot集成mybatis

    配置pom.xml:

    <dependency><!--mybatis-->
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency><!--mysql-->
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency><!--c3p0-->
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
    </dependency>


    创建mybatis-config.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 配置全局属性 -->
        <settings>
            <!-- 使用jdbc的getGeneratedkeys获取数据库自增主键值 -->
            <setting name="useGeneratedKeys" value="true"/>
    
            <!-- 使用列标签替换列别名 默认:true -->
            <setting name="useColumnLabel" value="true"/>
    
            <!-- 开启驼峰命名转换 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    </configuration>

    创建DataSourceConfiguration类:

    import com.mchange.v2.c3p0.ComboPooledDataSource;
    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 java.beans.PropertyVetoException;
    /**
     * 补充一下,datasource这些配置是可以在application.properties里配置,不过翔仔这样做是有两个考虑:
     * 1.可以让同学了解一下第三方datasource的配置方法,spring自带的是可以在application.properties里配置的
     * 2.和之前的实战课衔接,因为实战课程既讲了SpringMVC同时讲了SpringBoot,在教大家SpringMVC迁移到SpringBoot的时候,咱们用的是类似的方式将XML转成了Bean,所以为了无缝衔接起来
     * 实战过程中,黑猫白猫,能抓住老鼠的都是好猫。并且大一些的项目数据库连接池用的是自定义而非spring自带的多一些:)
     */
    @Configuration
    @MapperScan("com.xc.boot.dao")
    public class DataSourceConfiguration {
    
        @Value("${jdbc.driver}")
        private String jdbcDriver;
        @Value("${jdbc.url}")
        private String jdbcUrl;
        @Value("${jdbc.username}")
        private String jdbcUsername;
        @Value("${jdbc.password}")
        private String jdbcPassword;
    
        @Bean(name = "dataSource")
        public ComboPooledDataSource createDateSource() throws PropertyVetoException {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass(jdbcDriver);
            dataSource.setJdbcUrl(jdbcUrl);
            dataSource.setUser(jdbcUsername);
            dataSource.setPassword(jdbcPassword);
            dataSource.setAutoCommitOnClose(false);// 关闭连接后不自动commit
            return dataSource;
        }
    }


    配置application.properties:

    #jdbc.driver=com.mysql.jdbc.Driver
    #jdbc.url=jdbc:mysql://localhost:3306/boot?useUnicode=true&characterEncoding=utf8&userSSL=false
    jdbc.driver=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
    jdbc.username=root
    jdbc.password=123456

    创建表:

    CREATE TABLE `tb_area` (
    `area_id` int(2) NOT NULL AUTO_INCREMENT,
    `area_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    `priority` int(2) NOT NULL DEFAULT '0',
    `create_time` datetime DEFAULT NULL,
    `last_edit_time` datetime DEFAULT NULL,
    PRIMARY KEY (`area_id`),
    UNIQUE KEY `UK_AREA` (`area_name`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;


    创建SessionFactoryConfiguration类:

    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import javax.sql.DataSource;
    import java.io.IOException;
    @Configuration
    public class SessionFactoryConfiguration {
    
        @Value("${mybatis_config_file}")
        private String mybatisConfigFilePath;//mybatis-config.xml配置文件的路径
        @Value("${mapper_path}")
        private String mapperPath;// mybatis mapper文件所在路径
        @Value("${entity_package}")
        private String entityPackage;// 实体类所在的package
    
        //    @Qualifier("dataSource")
        @Autowired
        private DataSource dataSource;
    
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactoryBean createSqlSessionFactroyBean() throws IOException {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath));
            PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    
            String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
            sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
            return sqlSessionFactoryBean;
        }
    }


    配置application.properties:

    #Mybatis
    mybatis_config_file=mybatis-config.xml
    mapper_path=/mapper/**.xml
    entity_package=com.xc.boot.entity

    创建实体类:

    package com.xc.boot.entity;
    import java.util.Date;
    public class Area {
        // 主键id
        private Integer areaId;
        // 名称
        private String areaName;
        // 权重,越大越排前显示
        private Integer priority;
        // 创建时间
        private Date createTime;
        // 更新时间
        private Date lastEditTime;
    //...get,set
    }


    创建dao层:

    package com.xc.boot.dao;
    import com.xc.boot.entity.Area;
    import java.util.List;
    public interface AreaDao {
        List<Area> queryArea();
        Area queryAreaById(int areaId);
        int insertArea(Area area);
        int updateArea(Area area);
        int deleteArea(int areaId);
    }

    创建测试类:

    package com.xc.boot.dao;
    import com.xc.boot.entity.Area;
    import org.junit.Ignore;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import java.util.Date;
    import java.util.List;
    import static org.junit.Assert.*;
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class AreaDaoTest {
    
        @Autowired
        private AreaDao areaDao;
    
        @Test
        public void queryArea() {
            List<Area> areaList = areaDao.queryArea();
            assertEquals(2, areaList.size());
        }
    
        @Test
        public void queryAreaById() {
            Area area = areaDao.queryAreaById(1);
            assertEquals("东苑",area.getAreaName());
        }
    
        @Test
        @Ignore
        public void insertArea() {
            Area area = new Area();
            area.setAreaName("南苑");
            area.setPriority(1);
            int insertArea = areaDao.insertArea(area);
            assertEquals(1,insertArea);
        }
    
        @Test
        @Ignore
        public void updateArea() {
            Area area = new Area();
            area.setAreaName("西苑");
            area.setAreaId(3);
            area.setLastEditTime(new Date());
            int updateArea = areaDao.updateArea(area);
            assertEquals(1,updateArea);
        }
    
        @Test
        public void deleteArea() {
            int deleteArea = areaDao.deleteArea(3);
            assertEquals(1,deleteArea);
        }
    }
  • 相关阅读:
    kafka topic消息分配partition规则(Java源码)
    mycat快速搭建入门
    CountDownLatch、CyclicBarrier和Semaphore使用
    jinfo Java配置信息工具
    jstat虚拟机统计信息监视工具
    jps虚拟机进程状态工具
    webpack2教程--从入门到放弃
    简单的add函数的N种写法
    从零开始写个一个豆瓣电影 (小程序教程3)
    从零开始写个一个豆瓣电影 (小程序教程2)”
  • 原文地址:https://www.cnblogs.com/ooo0/p/10263358.html
Copyright © 2011-2022 走看看