进阶springboot

在之前博客中已经springboot的一些基础知识点,接下来再学点其他的点。

一、springboot的测试

1、先创建一个子模块springboot-test ,web或者普通项目都行。准备好测试的test包

在这里插入图片描述

2、在pom.xml中导入测试要用的依赖包

<!--springmv支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

3、写一个启动类的应用程序

@SpringBootApplication
public class TestApp {
    public static void main(String[] args) {
        SpringApplication.run(TestApp.class);
    }
}

4、在测试包中写一个测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApp.class)
public class SpringTest {
    @Test
    public void test() throws Exception{
        System.out.println("zhangsan");
    }
}

5、执行启动类的应用程序,打印出测试中的打印语句

在这里插入图片描述

二、springboot的持久化(集成三层结构)

Spring Boot就数据库持久化支持,支持原生Jdbc,也支持Mybatis和JPA。

1、Spring boot JdbcTemplate,原生jdbc操作

(1)创建一个子模块项目springboot-jdbc

在这里插入图片描述

(2)在pom.xml中引入MySQL和jdbc的maven依赖
<!-- web test springjdbc mysql-->
<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>
(3)准备好数据库。并在资源文件resources中配置连接数据库的四大金刚

在这里插入图片描述

spring.datasource.url = jdbc:mysql://localhost:3306/mytest
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
(4)domain层
public class User {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    public User(){}

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
(5)dao层:接口和实现类
  • 接口
public interface IUserDao {
    //保存数据方法
    void save(User user);
}

  • 实现类
@Repository
public class UserDaoImpl implements IUserDao {
    //注入jdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public void save(User user) {
        //sql语句
        String sql="insert into user(name) values(?)";
        //执行sql,并将名字存到数据库中
        jdbcTemplate.update(sql,user.getName());
    }
}
(6)service层的接口和实现类。service层要开启事务
  • 接口
public interface IUserService {
    //保存数据方法
    void save(User user);
}
  • 实现类
    注意:事务会起作用。当运行出错时,事件不会增加到数据库中
@Service
@Transactional(propagation = Propagation.SUPPORTS)//没有事务
public class UserServiceImpl implements IUserService{

    //注入dao对象
    @Autowired
    private IUserDao userDao;
    //新增数据
    @Override
    //新增操作需要事务。出错之后,会回滚事务,不会将数据插入到数据库
    @Transactional(propagation =Propagation.REQUIRED,readOnly = false)
    public void save(User user) {
        userDao.save(user);
        //定义一个异常,看事务是否起作用。会起作用
//        System.out.println(1/0);
    }
}
(7)创建和启动类
@SpringBootApplication
public class SpringJdbcApp {
    public static void main(String[] args) {
        SpringApplication.run(SpringJdbcApp.class);
    }
}
(8)测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringJdbcApp.class)
public class SpringJdbcTest {

    @Autowired
    private IUserService userService;

    @Test
    public void test() throws Exception{
        User user = new User();
        user.setName("张三");
        userService.save(user);
    }
}

2、springboot mybatis持久化操作

mybatis的注解版本操作。

(1)新建个maven子模块,springboot-mybatis
(2)在pom.xml中引入相关依赖
<!--springmvc支持-->
<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>
<!-- mysql 数据库驱动. -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--
            spring-boot mybatis依赖:

            请不要使用1.0.0版本,因为还不支持拦截器插件,
        1.1.1 是博主写帖子时候的版本,大家使用最新版本即可
         -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<!--
    MyBatis提供了拦截器接口,我们可以实现自己的拦截器,
    将其作为一个plugin装入到SqlSessionFactory中。
        Github上有位开发者写了一个分页插件,我觉得使用起来还可以,挺方便的。
        Github项目地址: https://github.com/pagehelper/Mybatis-PageHelper
     -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.0</version>
</dependency>
(3)准备好数据库。并在资源文件resources中配置连接数据库的四大金刚

与上面jdbc操作是同一个数据库。方便点

spring.datasource.url = jdbc:mysql://localhost:3306/mytest
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
(4)domain层也是和上面jdbc一样的

在这里插入图片描述

(5)mapper层
public interface UserMapper {

    //使用注解的方式写sql语句
    @Insert("insert into user(name) values(#{name})")
    public void save(User user);
}
(6)service层接口和实现类
  • 接口
public interface IUserService {
    //保存数据方法
    void save(User user);
}
  • 实现类
@Service
@Transactional(propagation = Propagation.SUPPORTS)//没有事务
public class UserServiceImpl implements IUserService{

    //注入dao对象
    @Autowired
    private UserMapper userMapper;
    //新增数据
    @Override
    //新增操作需要事务。出错之后,会回滚事务,不会将数据插入到数据库
    @Transactional(propagation =Propagation.REQUIRED,readOnly = false)
    public void save(User user) {
        userMapper.save(user);
        //定义一个异常,看事务是否起作用
//        System.out.println(1/0);
    }
}
(7)创建和启动类

注意:mapper层扫描的注解

/*
* 启动类
* */
@SpringBootApplication
//@ComponentScan 测试包放在其他层就需要这个注解来扫描组件
@MapperScan(value = "cn.lyq.mapper")//配置mapper层扫描
public class SpringMybatisApp {
    public static void main(String[] args) {
        SpringApplication.run(SpringMybatisApp.class);
    }
}

(8)测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringJdbcApp.class)
public class SpringJdbcTest {

    @Autowired
    private IUserService userService;

    @Test
    public void test() throws Exception{
        User user = new User();
        user.setName("张三");
        userService.save(user);
    }
}

mybatis的xml配置版本。以下是有稍微变动的地方。

(1)在mapper层写一个方法

在这里插入图片描述

(2)在资源文件resources中写mapper的xml文件

在这里插入图片描述

(3)在application.properties中配置了别名。上面的xml映射文件才能用别名

在这里插入图片描述

(4) mapper层方法

在这里插入图片描述

(5)service层接口和实现类
  • 接口
    在这里插入图片描述
  • 实现类
    在这里插入图片描述
(5)启动springboot
/*
* 启动类
* */
@SpringBootApplication
//@ComponentScan 测试包放在其他层就需要这个注解来扫描组件
@MapperScan(value = "cn.lyq.mapper")//配置mapper层扫描
public class SpringMybatisApp {
    public static void main(String[] args) {
        SpringApplication.run(SpringMybatisApp.class);
    }
}
(6)测试类

在这里插入图片描述

三、springboot持久化操作和分页

基于上面的mybatis来的,因为mybatis的拦截器自带分页对象pagehelper。

1、mybatis的分页插件pagehelper在上面操作时已经导入到了pom.xml中了

2、在springboot中分页,要写个类做配置。MyBatisConfiguration类

@Configuration //相当于application-Xxx.xml
public class MyBatisConfiguration {
    //相当于配置文件里面配置<bean>
    @Bean
    public PageHelper pageHelper(){
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        //配置分页的参数设置
        //和startPage中的pageNum效果一样
        p.setProperty("offsetAsPageNum", "true");
        //设置为true时,使用RowBounds分页会进行count查询
        p.setProperty("rowBoundsWithCount", "true");
        // 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

3、在mapper的xml映射文件中写个查询所有的sql语句

在这里插入图片描述

4、在mapper接口中写上相应的查询所有方法

在这里插入图片描述

5、service层接口和实现类

  • 接口:
    在这里插入图片描述
  • 实现类
    在这里插入图片描述

6、测试类

在这里插入图片描述

7、打印结果。数据库中的规定每页三条数据的第二页数据

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值