SpringBoot集成SSM(Spring+SpringMVC+Mybatis)
(一)pom.xml
<parent>
<artifactId>springboot_parent</artifactId>
<groupId>cn.lzj.springboot</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot_07_ss_jdbc</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
(二)准备mapper层
注解方式
//因为使用的是mybatis框架,此处的参数必须是#{name}
@Insert(“insert into t_user(name) values(#{name})”)
@Options(useGeneratedKeys = true,keyProperty = “id”,keyColumn = “id”)
void save(User user);xml方式
<?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">
insert into t_user(name) values(#{name})
分页查询
List
queryPage(UserQuery query); 配置分页拦截器
package cn.lzj.springboot.basic.config;
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Properties;
/**
- mybatis的配置类,实现分页的拦截器
*/
@Configuration //相当于我们建了applicationContext-xxx.xml
public class MyBatisConfiguration {//相当于配置了一个bean
//<bean class="com.github.pagehelper.PageHelper">
//<property key="offsetAsPageNum" value="true"></property>
//<property key="rowBoundsWithCount" value="true"></property>
//<property key="reasonable" value="true"></property>
// <bean/>
@Bean
public PageHelper pageHelper() {
System.out.println("MyBatisConfiguration.pageHelper()");
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
//配置分页参数的设置信息
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}
- mybatis的配置类,实现分页的拦截器
(三)service层
package cn.lzj.springboot.service.impl;
import cn.lzj.springboot.domain.User;
import cn.lzj.springboot.mapper.UserMapper;
import cn.lzj.springboot.query.UserQuery;
import cn.lzj.springboot.service.IUserService;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)//类级别是只读事务
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
@Transactional(propagation = Propagation.REQUIRED,readOnly = false)
//@Transactional 后两个配置是默认值
public void add(User user) {
userMapper.save(user);
// int i = 1/0;
}
public List<User> queryPage(UserQuery query) {
PageHelper.startPage(1, 2); //limit (pageNum-1)*pageSize,pageSize
return userMapper.queryPage(query);
}
}
(四)mybatis的配置文件application.yml
使用的是YAML配置方式
shop是数据库名
3306的mysql的端口号
yaml的具体介绍详见:https://blog.csdn.net/qq_42136250/article/details/89643154
spring:
datasource:
url: jdbc:mysql://localhost:3306/shop
driver-class-name: com.mysql.jdbc.Driver
password: admin
username: root
#配置别名
mybatis:
type-aliases-package: cn.lzj.springboot.domain,cn.lzj.springboot.query
(五)数据库准备
(六)使用SpringBoot的测试
package cn.lzj.springboot.service;
import cn.lzj.springboot.SSMApplication;
import cn.lzj.springboot.domain.User;
import cn.lzj.springboot.query.UserQuery;
import com.github.pagehelper.Page;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
//指定入口类型,它就会扫描入口类子子孙孙包的bean
@SpringBootTest(classes = SSMApplication.class)
public class IUserServiceTest {
@Autowired
private IUserService userService;
@Test
public void testAdd(){
User user = new User("王维");
System.out.println(user);//没有id
userService.add(user);
System.out.println(user);//有id
}
@Test
public void testList() throws Exception{
//com.github.pagehelper.Page --->PageList(currentPage,pageSizs,totalRecords,totalpages,Data)
Page<User> list = (Page) userService.queryPage(new UserQuery());
System.out.println(list.getClass());
System.out.println("总记录数:"+list.getTotal());
System.out.println("总页数:"+list.getPages());
System.out.println("当前页"+list.getPageNum());
System.out.println("当前页条数:"+list.getPageSize()); //因为在业务层,只获取了每页两条数据
for (User o : list) {
System.out.println(o);
}
}
}
以下是测试的结果:
还没有评论,来说两句吧...