╮(╯▽╰)╭这已经是第四版,第一版不小心删除了,心痛!

鉴于网上springboot+mybatis框架搭配各种各样,那么我就把我个人能搭配成功的经验和步骤介绍给大家,(我自己试了网上N钟方法搭配就是搭配不成功啊,出现各种各样的问题),在这里为大家介绍其中一个大神的帖子,里面并附带github的源代码程序

http://blog.csdn/gebitan505/article/details/54929287

按理说既然有教程还有源代码,你咋还在这里絮絮叨叨的写呢,对于大神来说,写的很详细,但是对于我这种菜鸟来做,就是缺少大神们默认省略的那些东西啊,大神的东西我就是用不了啊,各种不匹配啊,没有办法整合啊!下面就是菜鸟我的第一次springboot+mybatis框架之路。

 

首先你得建表才能开始(我用的数据库是oracle)

CREATE TABLE `test_user` (

 `id` int(11) NOT NULL AUTO_INCREMENT,

 `user_name` varchar(40) NOT NULL,

 `password` varchar(255) NOT NULL,

 `age` int(4) NOT NULL,

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULTCHARSET=utf8

 

1.Springboot+mybatis项目建立

第一步

图1


第二步

图2


第三步

图3


至此你已经建立了一个springboot+mybatis的web项目啦,虽然不可能直接用。

 

使用mybatis自带的代码生成功能,怎么使用呢?

1.      你需要一个mybatis-generator-core-1.3.2.zip

2.      进入到D:\workspace\mybatis-generator-core-1.3.2\mybatis-generator-core-1.3.2\lib(我解压到D盘啦)

3.      补充oracle和mybatis的链接包ojdbc8.jar或者更高级也可以,我是懒得找了

有图哦:图5


4.      打开在这个文件夹内的generatorConfig.xml并进行修改

图7


5.      打开cmd,使用cd转换路径一直到

D:\workspace\mybatis-generator-core-1.3.2\mybatis-generator-core-1.3.2\lib里面

6.      输入命令

Java -jar mybatis-generator-core-1.3.2.jar -configfilegeneratorConfig.xml –overwrite

图8


很顺利,你可以在src里面的三个文件夹里面找到自己刚刚生成不同的类啦,把他们放到该放的位置上

图9


在****Mapper.xml里面的命名空间一定要对应dao层,也可以是mapper层的接口

<mapper namespace="com.example.demo.mapper.UserMapper" >

当然类肯定要对应刚刚生成的类啦

<resultMap id="BaseResultMap" type="com.example.demo.domain.User" >

 

2.mybatis的单独使用

如果你看了上面大神的教程并且可以使用的话,就不用看这个笨办法啦

我们可以了解到一般如果单独使用mybatis的时候,都是需要配置mybatis-config.Xml文件。

mybatis-config.Xml的位置是在resource里面哦

图6


大致上是这样的:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration  
  PUBLIC "-//mybatis//DTD Config 3.0//EN"  
  "http://mybatis/dtd/mybatis-3-config.dtd">  
<configuration>  
    <!-- 对事务的管理和连接池的配置 -->  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />  
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />  
                <property name="username" value="ibatis" />  
                <property name="password" value="ibatis" />  
            </dataSource>  
        </environment>  
    </environments>  
      
    <!-- mapping 文件路径配置 -->  
    <mappers>  
        <mapper resource="com/yu/res/UserMapper.xml" />  
    </mappers>  
</configuration>

在这种情况下,你就可以直接在图上面的位置上添加代码:

图4


try {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession session = sqlSessionFactory.openSession();
    System.out.println("是输出:"+session.toString()+"这个还getConnection"+sqlSessionFactory.toString());
    try {
        //session.selectOne("select age from test_user where id=1");
        User user=new User();
        user.setId(new BigDecimal(8));
        user.setUserName("测试");
        user.setPassword("123");
        user.setAge(new BigDecimal(22));
        UserDao userDao=session.getMapper(UserDao.class);
        userDao.insert(user);
        //session.insert("com.cums.UserMapper.insert",user);
        //BaseMapper mapper = session.getMapper(BaseMapper.class);
        //int result = mapper.getTestData();
        //System.out.println(i);
        sessionmit();
    } finally {
        session.close();
    }
} catch (Exception ex) {
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    ex.printStackTrace(printWriter);
    System.out.println(stringWriter.toString());
}

通过pl/sql可以看到插入的信息

图10


很愉快,你成功了吧,走到这一步就意味着你无法享受到springboot全自动化装填数据库sqlsessionFactory以及自动化扫描mapper等等功能啦。

接下来就是见证奇迹的时刻啦!


3.整合mybatis到springboot上

可以看到mybatis-config.Xml的威力,那么因为它也只是一个链接mapper和装填数据库信息的东西,那么我们就把它写成类,根据spring本身的bean特性,我们引入三个工具类

DataSourceConfig.Class

package com.example.demo.conf;

import javax.sql.DataSource;

import org.apache.log4j.Logger;
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.jdbc.datasource.DriverManagerDataSource;


@Configuration
@PropertySource({"classpath:test/jdbc.properties"})//这里指的是存放数据库信息的路径,对应的是resources文件夹
public class DataSourceConfig {

   private static final Logger logger = Logger.getLogger(DataSourceConfig.class);
   
   @Value("${jdbc.driver}")
   String driverClass;
   
   @Value("${jdbc.url}")
   String url;
   
   @Value("${jdbc.username}")
   String userName;
   
   @Value("${jdbc.password}")
   String password;
   
   @Bean(name = "dataSource")
   public DataSource dataSource(){
      logger.info("DataSource");
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName(driverClass);
      dataSource.setUrl(url);
      dataSource.setUsername(userName);
      dataSource.setPassword(password);
      return dataSource;
   }
}

Mybatisconfig

package com.example.demo.conf;



import javax.sql.DataSource;

import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.plugin.Interceptor;
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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
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
   DataSource dataSource;
   
   @Bean(name = "sqlSessionFactory")
   public SqlSessionFactory sqlSessionFactoryBean(){
   // LogFactory.useStdOutLogging();
      LogFactory.useLog4JLogging();
      SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
      bean.setDataSource(dataSource);
      bean.setTypeAliasesPackage("com.example.demo.domain");

        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            bean.setMapperLocations(resolver.getResources("classpath:mapper/*Mapper.xml"));
            return bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

   @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
   
   @Bean
   @Override
   public PlatformTransactionManager annotationDrivenTransactionManager() {
      // TODO Auto-generated method stub
      return  new DataSourceTransactionManager(dataSource);
   }
   
}

Mybatismapperscannerconfig

package com.example.demo.conf;


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



@Configuration
public class MyBatisMapperScannerConfig {

    @Bean
   public MapperScannerConfigurer mapperScannerConfigurer() {
       MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.example.demo.mapper");
        return mapperScannerConfigurer;
    }

}

这三个工具类就可以将mybatis-config.Xml的作用搞定

那么接下来就是service层的编写

Service层编写

Service包含UserService接口和impl.UserServiceImpl实现类

接口:

public interface UserService {
    public User getUserById(BigDecimal userId);
    public boolean insert(User record);
}

实现:

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

import javax.annotation.Resource;
import java.math.BigDecimal;

/**
 * Created by Administrator on 2017/7/31 0031.
 */
@Service("userService")//一定要写userService哦
public class UserServiceImpl implements UserService {

    @Resource//最好用Resource而不是Autowird,Resource对应的名字,Autowird对应的是类型
    UserDao userDao;

    @Override
    public User getUserById(BigDecimal userId) {
        return userDao.selectByPrimaryKey(userId);
    }

    @Override
    @Transactional
    public boolean insert(User record) {
        try {
            userDao.insert(record);
        }catch (Exception ex){
            return false;
        }
        return true;
    }
}


很好,就差一点啦

Controller编写也就是action

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;


@RestController
@RequestMapping("/app")
public class AppController {

    @Resource//对应刚刚的serviceimpl实现类
    UserService userService;

    /*@Resource
    UserDao userDao;*/

    //简单的后台接口,用于测试
    @RequestMapping("/info")
    public Object info(){






        Map<String,Object> map = new HashMap<>();
        map.put("info","hello hello hello");
        return map;
    }


    @RequestMapping("/ok")
    public Object ok(){
        /*User user=new User();
        user.setId(new BigDecimal(14));
        user.setUserName("带上service");
        user.setPassword("123");
        user.setAge(new BigDecimal(27));
        boolean resut=userService.insert(user);*/

        //userDao.insert(user);
        //userDao.selectByPrimaryKey(new BigDecimal(8)).getUserName()



        Map<String,Object> map = new HashMap<>();
        map.put("info","hello hello hello"+userService.getUserById(new BigDecimal(8)).getUserName());
        return map;
    }

}


demoapplication

不需要加@MapperScan因为你已经写了一个类

public class DemoApplication的前一行加一个@SpringBootApplication

至此就算是完成啦

相信@RequestMapping大家都会用吧

Localhost/app/ok

那么看一下结果哦

图11

 

 

至此springboot和mybatis算是弄在一起了,根本没有用springboot的优点嘛,为自己心疼一分钟!

如果你的项目是个老项目,甚至还有Hibernate的影子

public class DemoApplication前面加一个

@EnableAutoConfiguration(exclude={
        JpaRepositoriesAutoConfiguration.class//禁止springboot自动加载持久化bean
})

publicclass DemoApplication{

private static final Logger logger = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
    SpringApplication.run(Application.class,args);
    logger.info("SpringBoot server stated on port: 8080开始啦");
 
……
}

 

}


这已经是第四遍在写这个博客了,一个backspace就可以把我的工作轻松消去,已经累晕了,如果有错误,还望海涵!

完结散花








更多推荐

springboot+mybatis+gradle在idea和oracle使用