全注解方式整合spring+mybatis模拟springboot整合

8 篇文章 0 订阅
4 篇文章 0 订阅

实习工作中的项目使用到了springboot。虽然springboot使用简单但是默认配置和注解挺多。如果boot想使用熟练前提要对ssm整合比较熟悉。以前开发习惯使用xml配置文件,但是使用boot后才发现注解才是王道。现在将spring+mybatis使用全注解完成整合,并且配置事务。文件中的注解与Xml进行了比对。直接上代码。

@Repository
public interface EmpDao {
	Emp selectById(String id);
	void addSalary(String id);
	void updateSalary(String id);
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- EmpMapper.xml -->
<mapper namespace="cn.rjx.spring.smanno.EmpDao">
	<select id="selectById"  resultType="cn.rjx.spring.smanno.Emp">
		select * from emp where id=#{id}
	</select>
	<update id="addSalary">
		update emp set salary='6000' where id=#{id}
	</update>
	<update id="updateSalary">
		update emp set salary='4000' where id=#{id}
	</update>
</mapper>


@Service
public class EmpService {
	@Autowired
	EmpDao empDao;
	public Emp selectById(String id){
		return empDao.selectById(id);
	}
	@Transactional()
	public void accountChange() {
		empDao.addSalary("1");
		int a= 10/0;
		empDao.updateSalary("2");
	}
	
}


@MapperScan(basePackages="cn.rjx.spring.smanno")
/**
 * 替代:
<!-- 配置扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 扫描me.gacl.dao这个包以及它的子包下的所有映射接口类 -->
    <property name="basePackage" value="cn.rjx.spring.sm" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
 *
 */
@EnableTransactionManagement
/** 替代:
 * <tx:annotation-driven transaction-manager="transactionManager" /> 
 */
@Configuration
public class MybatisConfig {
	/**  替代
	 * <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
        </bean>
	 */
	@Bean
	public DruidDataSource dataSource(){
		DruidDataSource dataSource=new DruidDataSource();
		dataSource.setUrl("jdbc:mysql://localhost:3306/test");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		return dataSource;
	}
	/**
 	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 实例化sqlSessionFactory时需要使用上述配置好的数据源以及SQL映射文件 -->
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:cn/rjx/spring/sm/*Mapper.xml" />
    </bean>
	 */
	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception{
		final SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(dataSource());
		sqlSessionFactory.setMapperLocations(getResource("", "cn/rjx/spring/smanno/*Mapper.xml"));
		return sqlSessionFactory.getObject();
	}
	/**
	 * 替代:
		<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<property name="dataSource" ref="dataSource" />
		</bean>
	 */
	@Bean
	public PlatformTransactionManager transactionManager(){
		return new DataSourceTransactionManager(dataSource());
	}
	
	
	public Resource[] getResource(String basePackage, String pattern) throws IOException {
		String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(new StandardEnvironment().resolveRequiredPlaceholders(basePackage)) + "/" + pattern;
		Resource[] resources = new PathMatchingResourcePatternResolver().getResources(packageSearchPath);
		return resources;
	}
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:cn/rjx/spring/smanno/bean.xml"}) //加载配置文件   
@Component
@ComponentScan(basePackages="cn.rjx.spring.smanno")
/**替代:
 * <context:component-scan base-package="cn.rjx.spring.sm"></context:component-scan>
 */
public class EmpAction {
	
	@Autowired
	EmpService service;
	@Test
	public void test01(){
		Emp emp = service.selectById("1");
		System.out.println(emp);
	}
	@Test
	public void test02(){
		System.out.println("------");
		service.accountChange();
	}

}

我的bean.xml只加入了测试的那个类,作为spring加载的入口

<bean id="empAction" class="cn.rjx.spring.smanno.EmpAction"></bean>


测试查询方法可用.事务可用!pom文件。

<dependencies>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.0.0.RELEASE</version>
	</dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
 	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>5.0.0.RELEASE</version>
	    <scope>test</scope>
	</dependency> 
	<!-- springAop -->
	 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aspects</artifactId>
	    <version>5.0.0.RELEASE</version>
	</dependency>
	<!-- spring事务 -->
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-tx</artifactId>
	    <version>5.0.0.RELEASE</version>
	</dependency>
	
	<!-- spring整合mybatis -->
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>1.3.1</version>
	</dependency>
	 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.5</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>3.1.14</version>
	</dependency>

	 <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>druid</artifactId>
	    <version>1.1.4</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc  配置数据源需要-->
	<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.0.RELEASE</version>
	</dependency>

	    
  </dependencies>


要在Spring Boot中整合SpringMyBatis,你可以按照以下步骤进行配置: 1. 添加Spring Boot和MyBatis的依赖到`pom.xml`文件中: ```xml <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- 其他依赖... --> </dependencies> ``` 2. 创建一个Spring配置类,可以使用`@Configuration`注解标记,并在该类中定义需要配置的Spring Bean,例如数据源和事务管理器: ```java @Configuration public class SpringConfig { // 数据源配置 @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } // MyBatis SqlSessionFactory配置 @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } // 事务管理器配置 @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } ``` 3. 创建一个Mapper接口,使用MyBatis注解来定义SQL映射和查询方法。例如: ```java @Mapper public interface UserMapper { @Select("SELECT * FROM users") List<User> getAllUsers(); } ``` 4. 在Spring Boot的主类上添加`@MapperScan`注解,指定Mapper接口所在的包: ```java @SpringBootApplication @MapperScan("com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 5. 在业务代码中使用`@Autowired`注解将需要的Mapper接口注入进来并使用。 这样就完成了Spring Boot整合SpringMyBatis的配置。你可以根据具体需求进行配置和扩展。希望对你有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值