springboot持久层

/ springboot / 2 条评论 / 1293浏览

springboot持久层支持

主要操作方式有JPA、Mybatis-xml、Mybatis-注解等
JPA(Java Persistence API)是Sun官方提出的Java持久化规范,默认是Hibernate

JPA

导入maven依赖

  <!-- mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.21</version>
    </dependency>

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

配置数据源

  #数据源配置
spring:  
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/how2j?characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
      #当数据库中没有实体类所对应的表,会根据实体类创建对应的表
      ddl-auto: update
    #显示sql语句
    show-sql: true

创建实体类并和数据表建立联系

@Entity 注解表示这是个实体类
@Table(name = "category_") 表示这个类对应的表名是 category_ ,注意有下划线哦
@Id 表明主键
@GeneratedValue(strategy = GenerationType.IDENTITY) 表明自增长方式
@Column(name = "id") 表明对应的数据库字段名
@Data是lombok的注解,可以省掉get/set方法

@Entity
@Table(name = "category_")
@Data
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;
}

创建dao继承JpaRepository<实体类,主键类别>

public interface CategoryDAO extends JpaRepository<Category, Integer>{
}

在controller中注入CategoryDAO即可

@Autowired
private CategoryDAO categoryDAO;

jpa的分页查询

@RequestMapping("/listCategory")
public String listCategory(Model model,
                           @RequestParam(value = "start", defaultValue = "0")int start,
                           @RequestParam(value = "size", defaultValue = "5")int size)throws Exception{
    //语法糖 防止start小于0
    start = start<0?0:start;
    Sort sort = Sort.by(Sort.Direction.DESC, "id");
    PageRequest pageRequest = PageRequest.of(start, size, sort);
    Page<Category> page = categoryDAO.findAll(pageRequest);
    model.addAttribute("page", page);
    return "/category/listCategory";
}

MyBatis注解方式

导入maven依赖,在此之前已经导入过mysql

<!--mybtais-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

配置数据源

#mybatis配置
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml      # mybatis配置文件所在路径
  type-aliases-package: io.imwj.springcloud.entity        # 所有Entity别名类所在包
  mapper-locations:
    - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件

# 打印sql语句 io.imwj.springcloud是包名
logging:
  level:
    io.imwj.springcloud: debug
    io.imwj.springcloud.dao: trace

创建实体类

@Data
public class Category {
    private Integer id;
    private String name;
}

书写mapper接口

@Mapper //标识mapper接口
public interface CategoryMapper {
    /**
     * 查询所有类别
     * 直接使用@select注解执行sql语句
     * @return
     */
    @Select("select * from category_")
    List<Category> findAll();
}

controller中注入mapper

@Autowired
private CategoryMapper categoryMapper;

MyBatis的xml方式

[导入maven依赖、配置数据源、创建实体类]同注解方式,注意如果xml文件在src中 则需要在pom中添加否则无法编译

<build>
    <resources>
        <!--编译src/main/java目录下的xml文件-->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

书写mapper接口

@Mapper //标识mapper接口
public interface CategoryMapper {
    /**
     * 根据id查询类别数据
     * @param id
     * @return
     */
    Category findById(Integer id);
}

书写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="com.imwj.how2j.mapper.CategoryMapper">
    <select id="findById" parameterType="Integer" resultType="Category">
            select * from category_ where id = #{id}
    </select>
</mapper>

controller中注入mapper

@Autowired
private CategoryMapper categoryMapper;

PageHelper分页

导入maven依赖

<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>4.1.6</version>
</dependency>

添加PageHelperConfig配置

@Configuration:标识该类做配置用 @Bean:注入spring容器

@Configuration
public class PageHelperConfig {

    @Bean
    public PageHelper 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;
    }
}

CategoryMapper

@Select("select * from category_ ")
List<Category> findAll();

Controller中使用

PageHelper:分页操作类

@ResponseBody
@RequestMapping("/listCategory1")
public Result listCategory1(Model model,
                           @RequestParam(value = "start", defaultValue = "0")int start,
                           @RequestParam(value = "size", defaultValue = "5")int size)throws Exception{
    PageHelper.startPage(start, size, "id desc");
    List<Category> all = categoryMapper.findAll();
    PageInfo<Category> page = new PageInfo<>(all);
    return ResultUtil.ok(page);
}