1. 程式人生 > >SpringBoot整合Mybatis及分頁外掛pageHelper和事務

SpringBoot整合Mybatis及分頁外掛pageHelper和事務

spring事務分類:
1.宣告事務
2.程式設計事務
spring事務原理:AOP技術 環繞通知進行攔截
使用spring事務的注意事項:不要Try。因為要將異常丟擲給外層
Springboot預設整合事務,只要在方法上加上@Transactional註解

pom.xml配置檔案:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.e3mall</groupId>
  <artifactId>springboot-pageHelper</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
 	<groupId>org.springframework.boot</groupId>
 	<artifactId>spring-boot-starter-parent</artifactId>
 	<version>2.0.0.RELEASE</version>
 </parent>
 <dependencies>
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter</artifactId>
 	</dependency>
 	<!-- 測試 -->
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-test</artifactId>
 		<scope>test</scope>
 	</dependency>
 	<dependency>
 		<groupId>org.mybatis.spring.boot</groupId>
 		<artifactId>mybatis-spring-boot-starter</artifactId>
 		<version>1.1.1</version>
 	</dependency>
 	<!-- MySQL依賴 -->
 	<dependency>
 		<groupId>mysql</groupId>
 		<artifactId>mysql-connector-java</artifactId>
 	</dependency>
 	<!-- springboot web元件 -->
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-web</artifactId>
 	</dependency>
 	<!-- jta+atomikos解決傳統分散式事務 -->
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-jta-atomikos</artifactId>
 	</dependency>
 	<!-- pagehelper一個mybtis分頁外掛 -->
 	<dependency>
 		<groupId>com.github.pagehelper</groupId>
 		<artifactId>pagehelper-spring-boot-starter</artifactId>
 		<version>1.2.5</version>
 	</dependency>
 	<dependency>
 		<groupId>org.apache.commons</groupId>
 		<artifactId>commons-lang3</artifactId>
 	</dependency>
 </dependencies>
</project>

在application.properties配置檔案中配置資料來源:

spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
logging.level.com.example.demo.dao=DEBUG
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
pagehelper.page-size-zero=true
​

Dao層UserMapper.java:

//@Mapper
public interface UserMapper {
	@Select("select * from user where name=#{name}")
	User findByName(@Param("name")String name);
	@Insert("insert into user(name,age) values(#{name},#{age})")
	int insert(@Param("name")String name,@Param("age")Integer age);
}

Service層UserService.java:

@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	@Transactional
	//@Datasource(ref="datasource1")
	public int insertUser(String name,Integer age) {
		int insertUserResult=userMapper.insert(name, age);
		int i=1/age;
		System.out.println(insertUserResult);		
		//怎麼驗證事務開啟成功
		return insertUserResult;
	}
}

web層UserController.java:

@RestController
public class UserController {
	@Autowired
	private UserService userService;
	@RequestMapping("/insertUser")
	public Integer insertUser(String name,Integer age) {
		return userService.insertUser(name, age);
	}
}

啟動類:

@SpringBootApplication
@MapperScan(basePackages= {"com.itmayiedu.mapper"})
public class MyBatisApp01 {
	public static void main(String[] args) {
		SpringApplication.run(MyBatisApp01.class,args);
	}

}

實體類在這裡就省略了。

下面是整合mybatis的pagehelper分頁外掛

IndexController.java:

@RestController
public class IndexController {
	@Autowired
	private UserService userService;
	@RequestMapping("/index")
	public PageInfo<User> findUserList(int page,int pageSize){
		return userService.findUserList(page, pageSize);		
	}

UserService.java:

@Service
public class UserService {
	@Autowired 
	private UserMapper userMapper;
	//page當前頁,pagesize表示當前展示多少個
	public PageInfo<User> findUserList(int page,int pageSize){
		//mysql查詢 limit,oracle 偽列 sqlserver top
		//pagehelper幫我們生成分頁語句
		PageHelper.startPage(page,pageSize);//底層實現原理是改寫sql語句
		List<User>listUser=userMapper.findUserList();
		//返回個客戶端封裝一些page物件
		PageInfo<User> pageInfoUserList=new PageInfo<User>(listUser);
		return pageInfoUserList;		
	}
}

UserMapper.java:

public interface UserMapper {
	@Select("select * from user")
	List<User>findUserList();
}