╮(╯▽╰)╭这已经是第四版,第一版不小心删除了,心痛!
鉴于网上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使用
发布评论