zoukankan      html  css  js  c++  java
  • SpringBoot整合MyBatis

    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>

    2.配置数据源
    在src/main/resource中,application.properties配置文件中,这里面添加了一些数据库连接的信息
    复制代码
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    3.代码注入数据源
    package com.example;

    import javax.sql.DataSource;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.core.env.Environment;
    import org.springframework.web.servlet.DispatcherServlet;

    import com.alibaba.druid.pool.DruidDataSource;
    import com.example.Listener.IndexListener;
    import com.example.filter.IndexFilter;
    import com.example.servlet.MyServlet;

    @SpringBootApplication
    public class SpringBootSimpleApplication {
        @Autowired
        private Environment env;
        
        @Bean
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(env.getProperty("spring.datasource.url"));
            dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名
            dataSource.setPassword(env.getProperty("spring.datasource.password"));//密码
            dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
            dataSource.setInitialSize(2);
            dataSource.setMaxActive(20);
            dataSource.setMinIdle(0);
            dataSource.setMaxWait(60000);
            dataSource.setValidationQuery("SELECT 1");
            dataSource.setTestOnBorrow(false);
            dataSource.setTestWhileIdle(true);
            dataSource.setPoolPreparedStatements(false);
            return dataSource;
        }

        public static void main(String[] args) {
            SpringApplication.run(SpringBootSimpleApplication.class, args);
        }
    }


    4.增加MyBatis的配置
    MyBatisConfig.java类:

    package com.example.mybatis;

    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);
        }
    }

    MyBatisMapperScannerConfig.java类:

    package com.example.mybatis;

    import org.mybatis.spring.mapper.MapperScannerConfigurer;
    import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;

    /**
     * 扫描mybatis的接口
     */
    @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.example.mybatis.mapper");
            return mapperScannerConfigurer;
        }
    }

    5.mybatis接口配置,这里使用student表作为示例
    使用@Mapper注解来标识一个接口为MyBatis的接口,MyBatis会自动寻找这个接口
    package com.example.mybatis.mapper;

    import java.util.List;
    import java.util.Map;

    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;

    @Mapper
    public interface StudentMapper {
        @Select("select * from student;")
        public List<Map<String,Object>> find();
        
        @Insert("insert into student(id,name,age,score_sum,score_avg) "+
                "values(#{id},'Jim',33,200,100)")
        public int insert(@Param("id")int id);
    }


    6.service业务层调用接口
    package com.example.mybatis;

    import java.util.List;
    import java.util.Map;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    import com.example.mybatis.mapper.StudentMapper;

    @Service
    public class StuMybatisService {
        @Autowired
        private StudentMapper studentMapper;
        
        public List<Map<String,Object>> find(){
            return studentMapper.find();
        }
        
        public int insert(int id){
            return studentMapper.insert(id);
        }
    }


    7.controller控制层调用service业务层
    package com.example.mybatis;

    import java.util.List;
    import java.util.Map;

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    @RequestMapping("/stumybatis")
    public class StuMybatisController {
        private static Logger logger = LogManager.getLogger(StuMybatisController.class);

        @Autowired
        private StuMybatisService stuMybatisService;

        @RequestMapping("/list")
        public List<Map<String,Object>> getStus(){
            logger.info("从数据库读取Student集合");
            return stuMybatisService.find();
        }
        @RequestMapping("/add")
        public void addStus(){
            logger.info("student表中插入数据");
            stuMybatisService.insert(2);
        }
    }

    最终启动程序,进行访问:
    http://localhost:8080/stumybatis/list
    返回结果:
    [{"score_sum":180.0,"name":"张三","id":1,"age":25,"score_avg":90.0},{"score_sum":200.0,"name":"Jim","id":2,"age":33,"score_avg":100.0}]

    关于MyBatis的注解,有篇文章讲的很清楚,可以参考: http://blog.csdn.net/luanlouis/article/details/35780175

  • 相关阅读:
    2017年0406------如何使用sessionStroage来储存参数是对象的,以及localStorage和sessionStorage的不同地方
    json格式和对象类型的转换20170330
    严重报错: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
    201703-28工作笔记:复杂的背景问题
    @Inject
    @Controller
    Mybatis
    Mybatis P2 总结
    小结--limit注入
    小结--order by 注入
  • 原文地址:https://www.cnblogs.com/web424/p/6756957.html
Copyright © 2011-2022 走看看