springboot融合redis、jpa、tkmybatis、jdbc

springboot整合文件上传

@Controller
public class FileController {
    @RequestMapping("/uploadFile")
    public String uploadFile(@RequestParam("fileimage")MultipartFile file , @RequestParam("userid") String userid, HttpServletRequest request) throws IOException {

        String originalFilename = file.getOriginalFilename();

      String path=request.getContextPath();

       File file1=new File(path,originalFilename);

       file.transferTo(file1);

       return "index2";

   }
}

redis的简介

1.1、为什么使用redis?

(1)、解决应用服务器cpu和内存压力

(2)、减少io的读操作,减轻io的压力

(3)、关系型数据库的扩展性不强,难以改变表结构

1.2、优点

(1)、nosql数据库没有关联关系,数据结构简单,拓展表比较容易

(2)、nosql读取速度快,对较大数据处理快

注意,非关系型数据库没有事务!

1.3、适用场景:

(1)、数据高并发的读写

(2)、海量数据的读写

(3)、对扩展性要求高的数据

1.4、不适场景:

(1)、需要事务支持(非关系型数据库)

(2)、基于sql结构化查询储存,关系复杂

1.5、Redis结构:

Redis是一个开源的key—value型数据库,支持string、list、set、zset和hash类型数据。对这些数据的操作都是原子性的,Redis为了保证效率会定期持久化数据。

1.6、使用场景:

(1)、配合关系型数据库做高速缓存

· 缓存高频次访问的数据,降低数据库io

· 分布式架构,做session共享

(2)、可以持久化特定数据。

· 利用zset类型可以存储排行榜

· 利用list的自然时间排序存储最新n个数据

1.7、Linux下redis:

(1)、redis目录:usr/local/bin

(2)、linux下redis常用命令:

(2.1)、redis-benchmark:性能测试工具

(2.2)、redis-server:启动redis服务器

(2.3)、redis-cli:启动redis客户端,操作入口

1.8、Redis基础知识

(1)、端口:6379

(2)、默认16个数据库,下标从0开始

(3)、单线程:redis是单线程+io多路复用:检查文件描述的就绪状态

springboot融合Redis

在yml中Redis的一些基本配置

#=========redis基础配置=========
spring.redis.database=0
spring.redis.host=192.168.139.131
spring.redis.port=6379
# 连接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
#=========redis线程池设置=========
# 连接池中的最大空闲连接,默认值也是8。
spring.redis.pool.max-idle=200
#连接池中的最小空闲连接,默认值也是0。
spring.redis.pool.min-idle=200
# 如果赋值为-1,则表示不限制;pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
spring.redis.pool.max-active=2000
# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时
spring.redis.pool.max-wait=1000

1.导入springboot融合的Redis的依赖

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
  </dependency>

2.在yml配置文件中配置相应的属性

spring:
  redis:
    database: 0
    host: localhost
    port: 6379
    timeout: 3000
    pool:
    max-idle: 200
    min-idle: 200
    max-active: 2000
    max-wait: 1000
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/company?characterEncoding=utf8
      username: root
      password: root
    type: com.alibaba.druid.pool.DruidDataSource
logging:
    level:
      com.qs.springboot4_redis.mapper: debug
mybatis:
  mapper-locations: classpath*:*Mapper.xml
  type-aliases-package: com.qs.demo.pojo

3.在启动程序中编写一个Redis实现类,用来json与object的互相转换

  //实例化一个对象,springboot取对象类型是HashMap,不是我们想你中的User类型,重新实例化,将它默认序列化类型修改一下
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        // key采用String的序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        // value序列化方式采用jackson
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }

4.在业务层中di该类RedisTemplate<String, Object>

注意:自动装换的依赖在spring-boot-starter-web依赖中包含了

 @Autowired
 private RedisTemplate<String, Object> redisTemplate;

1.Redis中取出数据,并主动装换为对象
    
     List<Users> list=(List<Users>)redisTemplate.opsForValue().get("userlist");

2.将对象自动以json格式更新Redis
    
    redisTemplate.opsForValue().set("userlist",list);

springboot融合tkmybatis

1.导入相应的依赖 mapper

 <!--        第三方github的mybatis:tkmybatis-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>

2.导入第三方的分页插件依赖 pageHelper

<!--        第三方后台分页插件-->
        <!--        4、pageHelper-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.12</version>
        </dependency>

3.编写dao接口只需要继承Mapper即可

public interface UserMapper extends Mapper<Users> {
    //Mapper包含了基本的增删改查的方法
}

注意导包:import tk.mybatis.mapper.common.Mapper;

4.在启动程序中加上mapper注解扫描

@MapperScan("com.qs.springtkmybatis.mapper")

5.测试tkmybatis基本的CRUD

  @Autowired
    private UserMapper userMapper;
    @Test
    void insertUsers() {
        Users users=new Users("18","6","6","6","6","6");
        userMapper.insertSelective(users);
    }
    @Test
    void delUsers() {
        Users users=new Users();
        users.setUserid("555");
        userMapper.deleteByPrimaryKey(users);
    }
    @Test
    void updateUsers() {
        Users users=new Users("18","66","56","66","66","666");
        userMapper.updateByPrimaryKeySelective(users);
    }

6.分页查询的测试

  • tkmybatis自己的分页
    //tkmybatis自己的分页  
	Users users=new Users();
        users.setUserid("18");
        userMapper.select(users);
        //userMapper.selectAll();
        int page=2;
       //tkmybatis
        RowBounds rowBounds=new RowBounds((page-1)*5,5);
       List<Users> users1 = userMapper.selectByRowBounds(new Users(), rowBounds);
        System.out.println(users1);
  • 第三方pagehelper插件的分页测试

    1.先设置开始页

    PageHelper.startPage(2,5);

    2.PageInfo pageInfo=new PageInfo<>(userMapper.selectAll());

     		PageHelper.startPage(2,5);
            PageInfo<Users> pageInfo=new PageInfo<>(userMapper.selectAll());
            System.out.println(pageInfo);
            System.out.println(pageInfo.getPages());//4  总页数
            System.out.println(pageInfo.getTotal());//20 总条数
            System.out.println(pageInfo.getPageNum());//2 第几页
            System.out.println(pageInfo.getPageSize());//5 每页几条
            System.out.println(pageInfo.getNextPage());//3 下一页
            System.out.println(pageInfo.getList());//数据springboot融合jpa
    

springboot融合jpa

1.导入依赖

   <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

2.在yml中可以配置jpa的日志

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/company?characterEncoding=utf8
      username: root
      password: root
    type: com.alibaba.druid.pool.DruidDataSource
  jpa:
    show-sql: true
    open-in-view: true

3.编写dao接口

注意:只需要继承JpaRepository<Users,String>类即可泛型里面左边的实体类类型Users,右边是主键类型String

jpa此处不用再主程序中实例化扫描这个接口,而tkmybatis需要

public interface UserDao extends JpaRepository<Users,String> {
    //JpaRepository<Users,String>中有基本的CRUD不需要自己写
}

4.jpa的实体类 以下为jpa的语法

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "tb_users")//类名与数据库名不一致时,需要加这个
public class Users implements Serializable {
    @Id//声明此列是主键   
    private String userid;
    @Column(name = "username")//当字段名与数据库名不一致时可以加此注解
    private String username;
    private String pwd;
    private String status;
    private String phone;
    private String address;
}

5.测试CRUD

注意:jpa的添加和修改都是save方法

jpa会根据主键先查找一遍,如果有则修改,没有则是添加

    @Test
    void saveandUpdateUser() {
        Users users=new Users();
        users.setUserid("234");
        users.setStatus("vip");
        users.setUsername("shuhao6767");
        users.setPwd("666");
        users.setPhone("17277");
        users.setAddress("453");
        userDao.save(users);
    }
    @Test
    void delUser() {
        Users users=new Users();
        users.setUserid("234");
        users.setStatus("vip");
        users.setUsername("shuhao6767");
        users.setPwd("666");
        users.setPhone("17277");
        users.setAddress("453");
        userDao.delete(users);
    }
    @Test
    void findUser() {
        List<Users> all = userDao.findAll();
        System.out.println(all);

    

6.jpa的分页 1.PageRequest 2.Page 对比tkmybatis的分页 1.PageHelper 2.PageInfo

 //测试分页
    @Test
    void findpageUser() {
        PageRequest request=PageRequest.of(2,3);
        Page<Users> page=userDao.findAll(request);
        for (Users users : page) {
            System.out.println(users);
        }
        System.out.println(page.getTotalElements());//20 总条数
        System.out.println(page.getTotalPages());// 7 总页数
        System.out.println(page.getContent());// 数据源
        System.out.println(page.getNumber());// 2  当前页+1,第三页
        System.out.println(page.getPageable());//
        System.out.println(page.getSize());//每页显示几条3
    }

springboot融合jdbc

1.导入依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-jdbc</artifactId>
  </dependency>

2.测试CRUD

@Autowired
    private JdbcTemplate jdbcTemplate;
    @Test
    void jdbcpageUser() {
        //添加
        String sql="insert into tb_users values(?,?,?,?,?,?)";
        int update = jdbcTemplate.update(sql, "6868", "2", "2", "2", "2", "2");
        System.out.println(update);
    }
    @Test
    void jdbcfindpageUser() {
        //查询返回单个对象
        String sql="select * from tb_users where userid=?";
        Users users = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Users>(Users.class),"6868");
        System.out.println(users);
    }
    @Test
    void jdbcfindlistUser() {
        //查询返回一个集合
        String sql="select * from tb_users";
        List<Users> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Users>(Users.class));
        System.out.println(users);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值