SpringBoot整合Spring data jpa

1、首先引入pom依赖

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

2、application.yml的配置

server:
  port: 9002
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
    username: ******
    password: ******
  jpa:
    show-sql: true   #控制台显示sql
    hibernate:
      ddl-auto: update   # 处理DDL语句的策略,update不存在创建,存在更新

3、代码实现

1、创建实体类

jpa是通过注解将实体类与数据库对应起来,不用编写xml文件进行映射,直接使用注解

@Table(name = "tb_user")
@Entity
@Data
@ToString
public class User {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Integer id;

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

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

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

    @Column(name = "del")
    private Integer del;

    @Column(name = "create_time")
    private Date createTime;

    @Column(name = "update_time")
    private Date updateTime;
}
2、dao层编写,基本的crud方法可以不用写,直接使用
public interface UserRepository extends JpaRepository<User, Integer>{
    /**
     * findBy系列,后面跟属性名进行查询
     * @param userName
     * @return
     */
    List<User> findByUserName(String userName);
    /**
     * nativeQuery 表示是否是本地查询 默认就是false,表示是jpql查询,true表示是sql查询
     * @param phone  下面这个是jpql查询,使用的是对象和属性,User  userName/phone
     * @return
     */
    @Query(value = "from User where userName=?1 and phone=?2")
    List<User> findObj(String userName,String phone);

    /**
     * nativeQuery = true表示下面使用的是原生的sql查询,使用表名称和字段名查询,直接写sql语句查询
     * @param userName   tb_user   name/phone
     * @return
     */
    @Query(value = "select * from tb_user where name=?1 and phone=?2" ,nativeQuery = true)
    List<User> findObject(String userName,String phone);

}

上面是我自定义的三个方法,三种方式:

  • findBy系列,可以使用AND,Or,OrderBy等来多个条件查询,这种是jpql查询语句
  • @Query注解两种用法,既可以写原生的sql也可以拼接jpql查询语句,根据nativeQuery的值控制
3、service层

这层其实可以直接省略,因为是直接调用dao层的接口,下面随便写几个

# service层接口
public interface UserService {

    void save(User user);

    void upate(User user);

    User findOne(Integer id);
    List<User> findAll();

    void delete(Integer id);

}
# service层实现类型
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRrpository;


    @Override
    public void save(User user) {
        //插入有问题不是动态sql,如果是null值插入的就是null,不会使用默认值
        userRrpository.save(user);
    }

    @Override
    public void upate(User user) {
        userRrpository.saveAndFlush(user);
    }

    @Override
    public User findOne(Integer id) {
        return userRrpository.findById(id).get();
    }

    @Override
    public List<User> findAll() {
        return userRrpository.findAll();
    }

    @Override
    public void delete(Integer id) {
        userRrpository.deleteById(id);
    }
}
4、单元测试的编写
@SpringBootTest
@RunWith(SpringRunner.class)
class UserServiceTest {

    @Autowired
    private UserService userService;
    @Autowired
    UserRepository userRepository;

    @Test
    void save() {
        User user = new User();
        user.setUserName("lqq");
        user.setPassword("123456");
        user.setPhone("13254155411");
        userService.save(user);
    }
    @Test
    void findOne() {
        User user = userService.findOne(1);
        System.err.println(user);
    }
    @Test
    void findAll() {
        List<User> users = userService.findAll();
        System.err.println(users);
    }
    @Test
    void select(){
        List<User> users = userRepository.findByUserName("lqq");
        System.err.println(users);
        List<User> user = userRepository.findObj("lqq", "13294119010");
        System.out.println(user);
        List<User> users1 = userRepository.findObject("lqq", "13294119010");
        System.out.println(users1);
    }    
}

上面的单元测试只是随便测试了几个,因为自定义的方法没有在service层中定义,所以直接使用的是dao层进行单元测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值