最近的工作要开发一个新项目,想用 SpringBoot 在此记录一下jpa的使用。
1.工欲善其事必先利其器,第一步自然是引入jar包了,我用的是maven,在pom.xml文件中加入如下即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.我们来创建一张数据库表来试试
CREATE TABLE `product_category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(64) NOT NULL COMMENT '类目名字',
`category_type` int(11) NOT NULL COMMENT '类目编号',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
3.在项目中创建对应的实体类,如下
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.DynamicUpdate;
import lombok.Data;
/**
*
* @author ljh
* @since 2018-03-12
*/
@Entity
@DynamicUpdate
@Data
public class ProductCategory{
@Id
@GeneratedValue
private Integer categoryId;
/**
* 类目名字
*/
private String categoryName;
/**
* 类目编号
*/
private Integer categoryType;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
public ProductCategory() {
super();
}
public ProductCategory(String categoryName, Integer categoryType) {
super();
this.categoryName = categoryName;
this.categoryType = categoryType;
}
@Override
public String toString() {
return "ProductCategory{" +
"categoryId=" + categoryId +
", categoryName=" + categoryName +
", categoryType=" + categoryType +
", createTime=" + createTime +
", updateTime=" + updateTime +
"}";
}
}
上面代码中用到的jpa注解说明如下:
@Entity:告诉框架这个实体是对应数据库的某张表的,我这里的表名和类名是驼峰式一一对应的,如果你的表名和类名不同那么你可以加一个注解@Table(name="数据库表名");
@Id:声明这个参数对应数据库的主键;
@GeneratedValue:主键是自增的;
@data:这个注解可以让我们不用写get/set方法。它会在打包的时候自动帮我们生成get/set代码很方便,但是需要额外引入lombok的jar包,第一次使用的话编译器还要安装相应的插件,这个百度搜索一下有很多。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
4.编写dao层
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import com.imooc.dataobject.ProductCategory;
public interface ProductCategoryRepository extends JpaRepository<ProductCategory, Integer>{
List<ProductCategory> findByCategoryTypeIn(List<Integer> CategoryTypeList);
}
dao层非常简单只要继承一下 JpaRepository<T, Serializable> 就好了 T:写的是dao操作对应的实体 ,Serializable:是主键的类型。dao中可以声明自己的方法,如上的findByCategoryTypeIn方法。
5.测试
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class ProductCategoryRepositoryTest {
@Autowired
private ProductCategoryRepository repository;
@Test
public void testFindOne() {
ProductCategory productCategory = repository.findOne(2);
productCategory.setCategoryType(10);
log.info("productCategory{}:"+productCategory);
}
@Test
public void testFindByCategoryType() {
List<Integer> list = Arrays.asList(2,3,4);
List<ProductCategory> categories = repository.findByCategoryTypeIn(list);
Assert.assertNotEquals(0, categories.size());
}
}
以上内容有参考慕课网的课程,毕竟自己闭门造车,不如让老司机带着飞~