java mybatis jpa_Spring Boot集成JPA和MyBatis例子

先说说背景,项目之前使用的spring JPA做为数据持久化的工具,本人接手后想使用MyBatis,但是之前的又不想改变,所以有了这个需求,同一个数据源,使用spring JPA和MyBatis来做持久化。

刚开始集成出了好多问题,以下就列出正确的集成方式,参照这种方式,一定能集成成功

在之前的mybatis版本中,dao和mapper文件的文件名要特殊定义,就是末尾必须是Dao或者Mapper,但是现在不用了,现在在config文件中会配置扫描的类文件的包地址和.xml文件的地址,顺便说下mybatis版本

"org.mybatis:mybatis-spring:1.3.0",

"org.mybatis:mybatis:3.4.4",

要注意的事项:

a,xml中有个namespace是写xml文件对应的Dao类的,千万不要写错了,这个写错了mybatis也检测不出来,是个大坑

b,config文件中有如下方法,这个是读取配置文件,连接数据库的,如果配置文件是yml,可以用如下这种方式,会简结一些

@Bean

@ConfigurationProperties(prefix= "spring.datasource")

@PrimarypublicDataSource idrDataSource() {

returnDataSourceBuilder.create().build();

}

某认为,集成主要有依赖以下几个文件,1,注册数据源文件2,配置文件3,dao.java,4,mapper.xml,下面给个正确的配置

1,注册数据源的文件,主要是项目启动时扫描dao文件和xml文件,根据配置文件连接数据源

packagecom.xxx.cms.boot.config;importjavax.sql.DataSource;importorg.apache.ibatis.session.SqlSessionFactory;importorg.mybatis.spring.SqlSessionFactoryBean;importorg.mybatis.spring.SqlSessionTemplate;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importorg.springframework.jdbc.datasource.DataSourceTransactionManager;importcom.alibaba.druid.pool.DruidDataSource;

@Configuration

//此处是dao所在的包的地址

@MapperScan(basePackages= { "com.xxx.cms.repository.ibatis" }, sqlSessionTemplateRef = "idrSqlSessionTemplate")public classIDRDatasourceConfig2 {

@Value("${spring.datasource.driver-class-name}")privateString driverClassName;

@Value("${spring.datasource.url}")privateString url;

@Value("${spring.datasource.username}")privateString username;

@Value("${spring.datasource.password}")privateString password;

@Value("${encrypt.seed}")privateString encryptKey;

@Bean

@Primarypublic DataSource idrDataSource() throwsGlobalErrorInfoException{

DruidDataSource datasource= newDruidDataSource();

datasource.setDriverClassName(driverClassName);

datasource.setUrl(url);

datasource.setUsername(username);

datasource.setPassword(password);returndatasource;//return DataSourceBuilder.create().build();

}

@Bean

@Primarypublic SqlSessionFactory idrSqlSessionFactory(@Qualifier("idrDataSource") DataSource dataSource) throwsException {

SqlSessionFactoryBean bean= newSqlSessionFactoryBean();

bean.setDataSource(dataSource);

//此处是mapper文件的位置

bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));

bean.setTypeAliasesPackage("mapper");returnbean.getObject();

}

@Bean

@Primarypublic DataSourceTransactionManager idrTransactionManager(@Qualifier("idrDataSource") DataSource dataSource) {return newDataSourceTransactionManager(dataSource);

}

@Bean

@PrimarypublicSqlSessionTemplate idrSqlSessionTemplate(

@Qualifier("idrSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throwsException {return newSqlSessionTemplate(sqlSessionFactory);

}

}

2,配置文件 cms.properties

spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=Test;applicationIntent=ReadWrite

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.username=admin

spring.datasource.password=123456

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

3,Dao.java文件(UserDao.java)

packagecom.xxx.cms.repository.ibatis;importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Select;

@Mapperpublic interfaceUserDao {

//这种写法就是需要在xml中配置对应方法的booleanupdateAndInsert();

//这种带注解的是不需要在对应xml文件中写相应方法的

@Select("select count(1) from BC_QR_Scene")intfindCount();

}

4,Mapper.xml文件(UserMapper.xml)

IF EXISTS(SELECT * FROM USER WHERE USER_ID = #{userId} )

BEGIN

UPDATE USER SET UPDATE_TIME = GETDATE() WHERE USER_ID = #{userId}

END

ELSE

BEGIN

INSERT INTO USER VALUES (#{userId}, #{userId}, #{userId}, '0', getdate(), NULL)

END

有了以上四个文件之后,就可以在项目中集成mybatis了

哈哈哈哈,你有没有发现我们标题写的是集成JPA与MyBatis,但是我们都没有怎,但是都没有怎么写JPA如何如何吗,不是我漏写了,因为我集成完了发现,根本没有JPA什么事,保持原状就好,两个是独立的,目前没有发现在会互相干扰的情况。

引用链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值