一、Demo数据库样例
1、db_test_user(用户库):t_custom、t_seller
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_custom
-- ----------------------------
DROP TABLE IF EXISTS `t_custom`;
CREATE TABLE `t_custom` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL COMMENT '用户名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`phone_num` varchar(16) DEFAULT NULL COMMENT '手机号',
`email` varchar(64) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for t_seller
-- ----------------------------
DROP TABLE IF EXISTS `t_seller`;
CREATE TABLE `t_seller` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL COMMENT '用户名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`phone_num` varchar(16) DEFAULT NULL COMMENT '手机号',
`email` varchar(64) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、db_test_commodity(商品库):t_commodity
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_commodity
-- ----------------------------
DROP TABLE IF EXISTS `t_commodity`;
CREATE TABLE `t_commodity` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '商品名称',
`create_time` datetime NOT NULL COMMENT '创建时间',
`modify_time` datetime NOT NULL COMMENT '最后一次编辑时间',
`is_shelves` tinyint(255) NOT NULL COMMENT '是否上架',
`owner` int(255) NOT NULL COMMENT '归属人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、参考步骤
1、依赖jar包
2、配置文件
1)springboot核心配置文件:application.xml
2)mybatis核心配置文件:mybatis-config.xml
3)逆向代码生成工具Generator配置文件:generatorConfig.xml(可选)(如需要可参考我的另一篇博客generator自动生成mybatis代码)
3、配置类:
1)核心配置类:MyBatisConfig.java
2)数据源配置类:AbstractDataSourceConfig.java、UserDataSourceConfig.java、CommodityDataSourceConfig.java
4、使用:
1)model.java
2)mapper.java
3)mapper.xml
三、Demo
1、依赖jar包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
2、配置文件
1)springboot核心配置文件:application.xml
server:
port: 8080
spring:
application:
name: demo_mybatis
db:
user:
datasource:
url: jdbc:mysql://127.0.0.1/db_test_user?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
max-active: 20
initial-size: 1
min-idle: 3
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
test-while-idle: true
test-on-borrow: false
test-on-return: false
storage:
datasource:
url: jdbc:mysql://127.0.0.1/db_test_commodity?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
max-active: 20
initial-size: 1
min-idle: 3
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
test-while-idle: true
test-on-borrow: false
test-on-return: false
2)mybatis核心配置文件: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>
<!-- 使全局的映射器启用或禁用缓存。 -->
<setting name="cacheEnabled" value="true"/>
<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
<setting name="aggressiveLazyLoading" value="true"/>
<!-- 是否允许单条sql 返回多个数据集 (取决于驱动的兼容性) default:true -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
<setting name="useColumnLabel" value="true"/>
<!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分 FULL:全部 -->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新) -->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!-- 使用驼峰命名法转换字段。 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 设置本地缓存范围 session:就会有数据的共享 statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
<setting name="localCacheScope" value="SESSION"/>
<!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
</configuration>
3、配置类:
package com.mybatis.test.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.annotation.Resource;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.mybatis.test.mapper", sqlSessionTemplateRef = "userSqlSessionTemplate")
public class MyBatisConfig {
@Resource(name = "userDataSource")
private DataSource userDataSource;
@Bean(name = "userSqlSessionFactory")
@Primary
public SqlSessionFactory createSqlSessionFactory(@Qualifier("userDataSource") DataSource userDataSource)
throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(userDataSource);
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("/mybatis-config.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "userTransactionManager")
@Primary
public DataSourceTransactionManager createTransactionManager(@Qualifier("userDataSource") DataSource userDataSource) {
return new DataSourceTransactionManager(userDataSource);
}
@Bean(name = "userSqlSessionTemplate")
@Primary
public SqlSessionTemplate createSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory userSqlSessionFactory) {
return new SqlSessionTemplate(userSqlSessionFactory);
}
}
package com.mybatis.test.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import javax.sql.DataSource;
import java.sql.SQLException;
public abstract class AbstractDataSourceConfig {
public DataSource getDataSource(RelaxedPropertyResolver propertyResolver) throws SQLException {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(propertyResolver.getProperty("url"));
datasource.setDriverClassName(propertyResolver.getProperty("driver-class-name"));
datasource.setUsername(propertyResolver.getProperty("username"));
datasource.setPassword(propertyResolver.getProperty("password"));
datasource.setInitialSize(Integer.valueOf(propertyResolver.getProperty("druid.initial-size")));
datasource.setMinIdle(Integer.valueOf(propertyResolver.getProperty("druid.min-idle")));
datasource.setMaxWait(Long.valueOf(propertyResolver.getProperty("druid.max-wait")));
datasource.setMaxActive(Integer.valueOf(propertyResolver.getProperty("druid.max-active")));
datasource.setMinEvictableIdleTimeMillis(Long.valueOf(propertyResolver.getProperty("druid.min-evictable-idle-time-millis")));
datasource.setFilters("stat,wall,log4j");
return datasource;
}
}
package com.mybatis.test.config;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
import java.sql.SQLException;
@Configuration
public class UserDataSourceConfig extends AbstractDataSourceConfig implements EnvironmentAware {
private RelaxedPropertyResolver propertyResolver;
@Bean(name = "userDataSource")
@Primary
public DataSource createDataSource() throws SQLException {
return getDataSource(propertyResolver);
}
@Override
public void setEnvironment(Environment environment) {
this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.db.user.datasource.");
}
}
package com.mybatis.test.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
import java.sql.SQLException;
@Configuration
@MapperScan(basePackages = "com.mybatis.test.mapper.commodity", sqlSessionTemplateRef = "commoditySqlSessionTemplate")
public class CommodityDataSourceConfig extends AbstractDataSourceConfig implements EnvironmentAware {
private RelaxedPropertyResolver propertyResolver;
@Bean(name = "commodityDataSource")
public DataSource createDataSource() throws SQLException {
return getDataSource(propertyResolver);
}
@Bean(name = "commoditySqlSessionFactory")
public SqlSessionFactory createSqlSessionFactory(@Qualifier("commodityDataSource") DataSource commodityDatasource)
throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(commodityDatasource);
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("/mybatis-config.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "commodityTransactionManager")
public DataSourceTransactionManager createTransactionManager(@Qualifier("commodityDataSource") DataSource commodityDataSource) {
return new DataSourceTransactionManager(commodityDataSource);
}
@Bean(name = "commoditySqlSessionTemplate")
public SqlSessionTemplate createSqlSessionTemplate(@Qualifier("commoditySqlSessionFactory") SqlSessionFactory commoditySqlSessionFactory) {
return new SqlSessionTemplate(commoditySqlSessionFactory);
}
@Override
public void setEnvironment(Environment environment) {
this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.db.commodity.datasource.");
}
}
4、使用:直接使用mapper操作数据库(略)
相关推荐:
快速搭建springboot项目
使用generator逆向生成mybatis代码
springboot中集成Hibernate框架