正在学习jpa+springboot。
jpa的优势是快捷开发。
实体类的注解会帮助你自动生成表。
jpa自带的方法使你不用写sql.
大多地方我都加了注释。我也正在学习所以存在诸多不足请见谅。
工程内有一些是次日要用到的文件夹 没截图的就是与本次demo 无关的内容。
最后希望能帮到你。
步骤如下:
1.创建一个 基础的springBoot项目。
不添加任何依赖,
手动在pom.xml 文件中添加 如下依赖
<!--springboot的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--测试方法的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--jpa 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
配置application.properties文件
#数据库连接地址
spring.datasource.url=jdbc:mysql://192.168.100.39:3306/training_camp?useSSL=false&serverTimezone=UTC
#数据库账号
spring.datasource.username= training_camp
#数据库密码
spring.datasource.password= haylion
#数据库驱动
spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
#jpa设置 此处可百度一下。 create 和别的的区别。
spring.jpa.hibernate.ddl-auto= create
#是否在控制台显示数据库语句
spring.jpa.show-sql=true
controller 层
dao层
package com.haylion.springboot.dao;
import com.haylion.springboot.entity.Mengpeng;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* jpa方式小demo
*/
public interface UserRepository extends JpaRepository<Mengpeng, Long> {
// 通过名称找到用户
Mengpeng findByName(String name);
// 通过名称和年龄找到用户
Mengpeng findByNameAndAge(String name, Integer age);
// 通过名称模糊查询
List<Mengpeng> findByNameLike(String name);
// 使用sql查询
@Query(value = "select * from mengpeng where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一个参数,?2表示第二个参数
Mengpeng findBySQL(String name, Integer age);
/* //不能这样用会出错。数据库交互通过不了。
@Query(value = "update mengpeng set name =?1 where id = ?2", nativeQuery = true)//?1表示第一个参数,?2表示第二个参数
void updateySQL(String name, Long id);
*/
}
实体类啊。
package com.haylion.springboot.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Mengpeng {
@Id //id
@GeneratedValue //表自增
private Long id;
@Column(length = 32) //设置长度
private String name;
@Column(nullable = false) //创建时不为空
private Integer age;
public Mengpeng() {
}
public Mengpeng(String name, Integer age) {
this.name = name;
this.age = age;
}
public Mengpeng(Long id,String name, Integer age) {
this.id=id;
this.name = name;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Mengpeng{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
service层
package com.haylion.springboot.service;
import com.haylion.springboot.dao.UserRepository;
import com.haylion.springboot.entity.Mengpeng;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
/**
* 通过姓名获取用户信息
* @param name
* @return
*/
public Mengpeng getUserService(String name){
Mengpeng mengpeng=new Mengpeng();
try{
mengpeng=userRepository.findByName(name);
}catch (Exception e){
e.printStackTrace();
}
return mengpeng;
}
/**
* 添加用户信息
* @param mengpeng
* @return
*/
public void addUserService(Mengpeng mengpeng){
try{
userRepository.save(mengpeng);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 删除用户信息
* @param mengpeng
*/
public void deleteUserService(Mengpeng mengpeng){
try{
userRepository.delete(mengpeng);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 修改用户
* @param mengpeng
*/
public void updateUserService(Mengpeng mengpeng){
try{
userRepository.save(mengpeng);
}catch (Exception e){
e.printStackTrace();
}
}
}
测试方法
package com.haylion.springboot;
import com.haylion.springboot.dao.UserRepository;
import com.haylion.springboot.entity.Mengpeng;
import com.haylion.springboot.service.HelloService;
import org.junit.Assert;
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;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {
@Autowired
private UserRepository userDao;
@Test
public void contextLoads() {
//修改设置项 每次都删除表,才能运行此测试项。
userDao.save(new Mengpeng("QQQ",1));
userDao.save(new Mengpeng("WWW",2));
userDao.save(new Mengpeng("EEE",3));
userDao.save(new Mengpeng("AAA",4));
userDao.save(new Mengpeng("SSS",5));
userDao.save(new Mengpeng("DDD",6));
userDao.save(new Mengpeng("ZZZ",7));
userDao.save(new Mengpeng("XXX",8));
userDao.save(new Mengpeng("CCC",9));
userDao.save(new Mengpeng("QQQ2",10));
//二者一致则继续运行不一致则抛出异常。
// 测试findAll, 查询所有记录
Assert.assertEquals(10, userDao.findAll().size());
System.out.println("共有"+userDao.findAll().size()+"条记录");
// 测试findByName, 查询姓名为AAA的User
Assert.assertEquals(4, userDao.findByName("AAA").getAge().longValue());
System.out.println(userDao.findByName("AAA").toString());
// 测试findByHQL, 查询姓名为AAA的User
// Assert.assertEquals(4, userDao.findByHQL("AAA").getAge().longValue());
// 测试findByNameAndAge, 查询姓名为SSS并且年龄为5的User
Assert.assertEquals("SSS", userDao.findByNameAndAge("SSS", 5).getName());
// 测试findBySQL, 查询姓名为SSS并且年龄为5的User
Assert.assertEquals("SSS", userDao.findBySQL("SSS", 5).getName()) ;
System.out.println("名为SSS,年龄为5的用户"+userDao.findBySQL("SSS",5).toString());
// 测试删除姓名为AAA的User
userDao.delete(userDao.findByName("AAA"));
// 测试findAll, 查询所有记录, 验证上面的删除是否成功
Assert.assertEquals(9, userDao.findAll().size());
// 测试findAll, 查询名字有Q的有几个
Assert.assertEquals(2,userDao.findByNameLike("%Q%").size());
}
}
注意看注释,以上。