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">
<mapper namespace="cn.lzj.springboot.mapper.UserMapper">
    <!--void save(User user);-->
    <insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into t_user(name) values(#{name})
    </insert>
</mapper>
  • 分页查询
List<User> queryPage(UserQuery query);
<select id="queryPage" resultType="User"  parameterType="UserQuery">
        SELECT *  FROM t_user
</select>
  • 配置分页拦截器
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 <beans></beans>
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;
    }
}

(三)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);
         }
     }
}

以下是测试的结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值