From bad0771144d9c07bc4ea53052adf1fbd88c4e160 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Mon, 4 Nov 2019 00:35:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20jpa=20=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../target/classes/sql/users.sql | 8 ++++ .../lab13/jpa/dataobject/UserDO.java | 3 +- .../jpa/repository/UserRepository03.java | 16 +++++++ .../jpa/repository/UserRepository04.java | 24 ++++++++++ .../jpa/repository/UserRepository03Test.java | 41 +++++++++++++++++ .../jpa/repository/UserRepository04Test.java | 45 +++++++++++++++++++ 6 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03.java create mode 100644 lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04.java create mode 100644 lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03Test.java create mode 100644 lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04Test.java diff --git a/lab-12/lab-12-mybatis-xml/target/classes/sql/users.sql b/lab-12/lab-12-mybatis-xml/target/classes/sql/users.sql index e69de29b..02a9b8eb 100644 --- a/lab-12/lab-12-mybatis-xml/target/classes/sql/users.sql +++ b/lab-12/lab-12-mybatis-xml/target/classes/sql/users.sql @@ -0,0 +1,8 @@ +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号', + `username` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号', + `password` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `idx_username` (`username`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/dataobject/UserDO.java b/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/dataobject/UserDO.java index 86d74abe..0711b1d9 100644 --- a/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/dataobject/UserDO.java +++ b/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/dataobject/UserDO.java @@ -6,7 +6,8 @@ import java.util.Date; /** * 用户 DO */ -@Entity(name = "users") +@Entity +@Table(name = "users") public class UserDO { /** diff --git a/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03.java b/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03.java new file mode 100644 index 00000000..3e6f66e2 --- /dev/null +++ b/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03.java @@ -0,0 +1,16 @@ +package cn.iocoder.springboot.lab13.jpa.repository; + +import cn.iocoder.springboot.lab13.jpa.dataobject.UserDO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.PagingAndSortingRepository; + +import java.util.Date; + +public interface UserRepository03 extends PagingAndSortingRepository { + + UserDO findByUsername(String username); + + Page findByCreateTimeAfter(Date createTime, Pageable pageable); + +} diff --git a/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04.java b/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04.java new file mode 100644 index 00000000..a4c4f5f2 --- /dev/null +++ b/lab-13/lab-13-jpa/src/main/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04.java @@ -0,0 +1,24 @@ +package cn.iocoder.springboot.lab13.jpa.repository; + +import cn.iocoder.springboot.lab13.jpa.dataobject.UserDO; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; + +public interface UserRepository04 extends PagingAndSortingRepository { + + @Query("SELECT u FROM UserDO u WHERE u.username = ?1") + UserDO findByUsername01(String username); + + @Query("SELECT u FROM UserDO u WHERE u.username = :username") + UserDO findByUsername02(@Param("username") String username); + + @Query(value = "SELECT * FROM users u WHERE u.username = :username", nativeQuery = true) + UserDO findByUsername03(@Param("username") String username); + + @Query("UPDATE UserDO u SET u.username = :username WHERE u.id = :id") + @Modifying + int updateUsernameById(Integer id, String username); + +} diff --git a/lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03Test.java b/lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03Test.java new file mode 100644 index 00000000..6770d9d0 --- /dev/null +++ b/lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03Test.java @@ -0,0 +1,41 @@ +package cn.iocoder.springboot.lab13.jpa.repository; + +import cn.iocoder.springboot.lab13.jpa.dataobject.UserDO; +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.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Calendar; +import java.util.Date; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class UserRepository03Test { + + @Autowired + private UserRepository03 userRepository; + + @Test + public void testFindByUsername() { + UserDO user = userRepository.findByUsername("yunai"); + System.out.println(user); + } + + @Test + public void testFindByCreateTimeAfter() { + // 创建分页条件 + Pageable pageable = PageRequest.of(1, 10); + // 执行分页操作 + Date createTime = new Date(2018 - 1990, Calendar.FEBRUARY, 24); // 临时 Demo ,实际不建议这么写 + Page page = userRepository.findByCreateTimeAfter(createTime, pageable); + // 打印 + System.out.println(page.getTotalElements()); + System.out.println(page.getTotalPages()); + } + +} diff --git a/lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04Test.java b/lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04Test.java new file mode 100644 index 00000000..b784a6c8 --- /dev/null +++ b/lab-13/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository04Test.java @@ -0,0 +1,45 @@ +package cn.iocoder.springboot.lab13.jpa.repository; + +import cn.iocoder.springboot.lab13.jpa.dataobject.UserDO; +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; + +import javax.transaction.Transactional; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class UserRepository04Test { + + @Autowired + private UserRepository04 userRepository; + + @Test + public void testFindIdByUsername01() { + UserDO user = userRepository.findByUsername01("yunai"); + System.out.println(user); + } + + @Test + public void testFindIdByUsername02() { + UserDO user = userRepository.findByUsername02("yunai"); + System.out.println(user); + } + + @Test + public void testFindIdByUsername03() { + UserDO user = userRepository.findByUsername03("yunai"); + System.out.println(user); + } + + @Test + // 更新操作,需要在事务中。 + // 在单元测试中,事务默认回滚,所以胖友可能怎么测试,事务都不更新。 + @Transactional + public void testUpdateUsernameById() { + userRepository.updateUsernameById(5, "yudaoyuanma"); + } + +}