1、创建实体类
package com. yzh. jpa. entity ;
import java. io. Serializable ;
import javax. persistence. Basic ;
import javax. persistence. CascadeType ;
import javax. persistence. Column ;
import javax. persistence. Entity ;
import javax. persistence. FetchType ;
import javax. persistence. GeneratedValue ;
import javax. persistence. GenerationType ;
import javax. persistence. Id ;
import javax. persistence. JoinColumn ;
import javax. persistence. Lob ;
import javax. persistence. ManyToOne ;
import javax. persistence. Table ;
import javax. validation. constraints. NotEmpty ;
import javax. validation. constraints. Size ;
import com. fasterxml. jackson. annotation. JsonIgnore ;
import com. fasterxml. jackson. annotation. JsonIgnoreProperties ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import lombok. ToString ;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table ( name = "article_table" )
@JsonIgnoreProperties ( value = { "hibernateLazyInitializer" } )
public class Article implements Serializable {
private static final long serialVersionUID = 1L ;
@Id
@GeneratedValue ( strategy = GenerationType . IDENTITY)
private int id;
@NotEmpty ( message = "标题不能为空" )
@Size ( min = 2 , max = 50 )
@Column ( nullable = false , length = 50 )
private String title;
@Lob
@Basic ( fetch = FetchType . LAZY)
@NotEmpty ( message = "内容不能为空" )
@Size ( min = 2 )
@Column ( nullable = false )
private String content;
@ManyToOne ( cascade= { CascadeType . MERGE, CascadeType . REFRESH} , optional= false )
@JoinColumn ( name= "id_author_id" )
@JsonIgnore
private Author author;
}
package com. yzh. jpa. entity ;
import java. io. Serializable ;
import java. util. List ;
import javax. persistence. CascadeType ;
import javax. persistence. Entity ;
import javax. persistence. FetchType ;
import javax. persistence. GeneratedValue ;
import javax. persistence. GenerationType ;
import javax. persistence. Id ;
import javax. persistence. OneToMany ;
import javax. persistence. Table ;
import com. fasterxml. jackson. annotation. JsonIgnoreProperties ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import lombok. ToString ;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table ( name = "author_table" )
@JsonIgnoreProperties ( value = { "hibernateLazyInitializer" } )
public class Author implements Serializable {
private static final long serialVersionUID = 1L ;
@Id
@GeneratedValue ( strategy = GenerationType . IDENTITY)
private int id;
private String aname;
@OneToMany (
mappedBy = "author" ,
cascade= CascadeType . ALL,
targetEntity = Article . class ,
fetch= FetchType . LAZY
)
private List < Article > articleList;
}
2、创建数据访问层
package com. yzh. jpa. repository ;
import java. util. List ;
import java. util. Map ;
import com. yzh. jpa. entity. Article ;
import org. springframework. data. jpa. repository. JpaRepository ;
import org. springframework. data. jpa. repository. Query ;
import org. springframework. data. repository. query. Param ;
public interface ArticleRepository2 extends JpaRepository < Article , Integer > {
@Query ( "select new Map(a.title as title, a.content as content) from Article a where a.author.id = ?1" )
public List < Map < String , Object > > findTitleAndContentByAuthorId ( Integer id) ;
@Query ( "select a from Article a where a.author.aname = :aname1 and a.author.id = :id1 " )
public List < Article > findArticleByAuthorAnameAndId ( @Param ( "aname1" ) String aname, @Param ( "id1" ) Integer id) ;
}
package com. yzh. jpa. repository ;
import com. yzh. jpa. entity. Author ;
import org. springframework. data. jpa. repository. JpaRepository ;
import org. springframework. data. jpa. repository. Modifying ;
import org. springframework. data. jpa. repository. Query ;
public interface AuthorRepository2 extends JpaRepository < Author , Integer > {
@Query ( "select a from Author a inner join a.articleList t where t.title like %?1%" )
public Author findAuthorByArticleListtitleContaining ( String title) ;
@Modifying
@Query ( "delete from Author a where a.id = ?1" )
public int deleteAuthorByAuthorId ( int id) ;
}
3、创建业务层
package com. yzh. jpa. service ;
import java. util. List ;
import java. util. Map ;
import com. yzh. jpa. entity. Article ;
import com. yzh. jpa. entity. Author ;
public interface AuthorAndArticleService2 {
public List < Map < String , Object > > findTitleAndContentByAuthorId ( Integer id) ;
public List < Article > findArticleByAuthorAnameAndId ( String aname, Integer id) ;
public Author findAuthorByArticleListtitleContaining ( String title) ;
public int deleteAuthorByAuthorId ( int id) ;
}
package com. yzh. jpa. service ;
import java. util. List ;
import java. util. Map ;
import com. yzh. jpa. entity. Article ;
import com. yzh. jpa. entity. Author ;
import com. yzh. jpa. repository. ArticleRepository2 ;
import com. yzh. jpa. repository. AuthorRepository2 ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Service ;
import org. springframework. transaction. annotation. Transactional ;
@Service
@Transactional
public class AuthorAndArticleServiceImpl2 implements AuthorAndArticleService2 {
@Autowired
private AuthorRepository2 authorRepository2;
@Autowired
private ArticleRepository2 articleRepository2;
@Override
public List < Map < String , Object > > findTitleAndContentByAuthorId ( Integer id) {
return articleRepository2. findTitleAndContentByAuthorId ( id) ;
}
@Override
public List < Article > findArticleByAuthorAnameAndId ( String aname, Integer id) {
return articleRepository2. findArticleByAuthorAnameAndId ( aname, id) ;
}
@Override
public Author findAuthorByArticleListtitleContaining ( String title) {
return authorRepository2. findAuthorByArticleListtitleContaining ( title) ;
}
@Override
public int deleteAuthorByAuthorId ( int id) {
return authorRepository2. deleteAuthorByAuthorId ( id) ;
}
}
4、创建控制器类
package com. yzh. jpa. controller ;
import java. util. List ;
import java. util. Map ;
import com. yzh. jpa. entity. Article ;
import com. yzh. jpa. entity. Author ;
import com. yzh. jpa. service. AuthorAndArticleService2 ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. RestController ;
@RestController
public class TestOneToManyController2 {
@Autowired
private AuthorAndArticleService2 authorAndArticleService2;
@RequestMapping ( "/findTitleAndContentByAuthorId" )
public List < Map < String , Object > > findTitleAndContentByAuthorId ( Integer id) {
return authorAndArticleService2. findTitleAndContentByAuthorId2 ( id) ;
}
@RequestMapping ( "/findArticleByAuthorAnameAndId" )
public List < Article > findArticleByAuthorAnameAndId ( String aname, Integer id) {
return authorAndArticleService2. findArticleByAuthorAnameAndId2 ( aname, id) ;
}
@RequestMapping ( "/findAuthorByArticleListtitleContaining" )
public Author findAuthorByArticleListtitleContaining ( String title) {
return authorAndArticleService2. findAuthorByArticleListtitleContaining2 ( title) ;
}
@RequestMapping ( "/deleteAuthorByAuthorId" )
public int deleteAuthorByAuthorId ( int id) {
return authorAndArticleService2. deleteAuthorByAuthorId2 ( id) ;
}
}