<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tszr</groupId> <artifactId>chapter033</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> <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> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- Spring Data JPA依赖启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 阿里巴巴的Druid数据源依赖启动器 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!-- MyBatis依赖启动器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!-- MySQL数据库连接驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version><!--$NO-MVN-MAN-VER$ --> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build> </project>
server: port: 8082 spring: datasource: name: druidDataSource type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/springbootdata?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8 username: root password: admin initial-size: 20 min-idle: 10 max-active: 100 mybatis: configuration: map-underscore-to-camel-case: true mapper-locations: - classpath:mapper/*.xml type-aliases-package: com.itheima.domain
package com.itheima.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity(name = "t_comment") // 设置ORM实体类,并指定映射的表名 public class Discuss { @Id // 表明映射对应的主键id @GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键自增策略 private Integer id; private String content; private String author; @Column(name = "a_id") // 指定映射的表字段名 private Integer aId; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Integer getaId() { return aId; } public void setaId(Integer aId) { this.aId = aId; } @Override public String toString() { return "Discuss{" + "id=" + id + ", content='" + content + '\'' + ", author='" + author + '\'' + ", aId=" + aId + '}'; } }
package com.itheima.repository; import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.transaction.annotation.Transactional; import com.itheima.domain.Discuss; public interface DiscussRepository extends JpaRepository<Discuss, Integer> { // 1、查询author非空的Discuss评论集合 public List<Discuss> findByAuthorNotNull(); // 2、根据文章id分页查询Discuss评论集合 @Query("SELECT c FROM t_comment c WHERE c.aId = ?1") public List<Discuss> getDiscussPaged(Integer aid, Pageable pageable); // 3、使用元素SQL语句,根据文章id分页查询Discuss评论集合 @Query(value = "SELECT * FROM t_comment WHERE a_Id = ?1", nativeQuery = true) public List<Discuss> getDiscussPaged2(Integer aid, Pageable pageable); // 4、 根据评论id修改评论作者author @Transactional @Modifying @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2") public int updateDiscuss(String author, Integer id); // 5、根据评论id删除评论 @Transactional @Modifying @Query("DELETE t_comment c WHERE c.id = ?1") public int deleteDiscuss(Integer id); }
package com.itheima; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
package com.itheima; import java.util.List; import java.util.Optional; 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.data.domain.Example; import org.springframework.data.domain.ExampleMatcher; import org.springframework.data.domain.ExampleMatcher.GenericPropertyMatchers; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.test.context.junit4.SpringRunner; import com.itheima.domain.Discuss; import com.itheima.repository.DiscussRepository; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class ApplicationTest { @Autowired private DiscussRepository repository; // 1、使用JpaRepository内部方法进行数据操作 @Test public void selectComment() { Optional<Discuss> optional = repository.findById(1); if (optional.isPresent()) { System.out.println(optional.get()); } System.out.println(); } // 2、使用方法名关键字进行数据操作 @Test public void selectCommentByKeys() { List<Discuss> list = repository.findByAuthorNotNull(); System.out.println(list); } // 3、使用@Query注解进行数据操作 @Test public void selectCommentPaged() { Pageable pageable = PageRequest.of(0, 3); List<Discuss> allPaged = repository.getDiscussPaged(1, pageable); System.out.println(allPaged); } // 4、使用Example封装参数进行数据查询操作 @Test public void selectCommentByExample() { Discuss discuss = new Discuss(); discuss.setAuthor("张三"); Example<Discuss> example = Example.of(discuss); List<Discuss> list = repository.findAll(example); System.out.println(list); } @Test public void selectCommentByExampleMatcher() { Discuss discuss = new Discuss(); discuss.setAuthor("张"); ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("author", GenericPropertyMatchers.startsWith()); Example<Discuss> example = Example.of(discuss, matcher); List<Discuss> list = repository.findAll(example); System.out.println(list); } }