springboot+mybatis+gradle在idea和oracle使用

来源:互联网 发布:绿色傲剑金蛇数据 编辑:程序博客网 时间:2024/05/18 17:42

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

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

http://blog.csdn.net/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.org//DTD Config 3.0//EN"    "http://mybatis.org/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);        session.commit();    } 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@EnableTransactionManagementpublic 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;@Configurationpublic 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就可以把我的工作轻松消去,已经累晕了,如果有错误,还望海涵!

完结散花








原创粉丝点击