springboot---JPA

一、springbootJPA介绍

1、JPA介绍

JPA是Java持久层API  ; 

说明:可以实现以对象的方式操作数据库,并且内部实现了数据的CURD等操作,通过反射机制实现的;

1)添加JPA的jar包

<!--添加jpa的组件-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

 

<!--添加mysql的组件-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

2)导入数据库的SQL文件

3)配置yum配置文件

spring:

  datasource:

      driver-class-name: com.mysql.jdbc.Driver

      url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8

      username: root

      password: root

  jpa:

    show-sql: true  

    hibernate:

    ddl-auto: update

3)编辑pojo对象

@Entity   实体:可以根据该实体创建数据表

//实体:可以根据该实体创建数据表
@Entity
public class User {
	
	@Id	//定义主键信息
	@GeneratedValue //表示主键自增
	private Integer id;
	private String name;
	private Integer age;
	private String sex;
    
    set..() , get..() ;
 
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}

}

4)编辑UserDao接口文件

public interface UserDao extends JpaRepository<User, Integer>{
   
   List<User> findByName(String name,String sex);

   List<User> findByNameAndSex(String name, String sex);
}

5)编辑UserService.java

public interface UserService {
	
	List<User> findAll();

	void saveUser(User user);

	void updateUser(User user);

	List<User> findUserByName(User user);
}

6)编辑UserServiceImpl.java

@Transactional(propagation=Propagation.REQUIRED) //需要事务控制

@Service
public class UserServiceImpl implements UserService{
   
   @Autowired
   private UserDao userDao;      //mybatis中的对象由spring为其创建代理对象
                           //JPA中的对象也是由Spring自动创建
   @Override
   public List<User> findAll() {
      System.out.println("获取动态的代理对象:"+userDao.getClass());
      return userDao.findAll();
   }
   
   @Transactional(propagation=Propagation.REQUIRED) //需要事务控制
   @Override
   public void saveUser(User user) {
      userDao.save(user);
      System.out.println("新增入门成功!!!");
      //int a = 1/0;
   }
   
   //说明:JAP中没有提供专门的Update方法,它根据save方法中的id实现的更新操作
   //如果主键值中有数据,则在做数据操作时,如果数据库中已经有了这个ID值,则做更新操作
   //如果数据库中的主键没有这个ID值,则做保存操作.
   @Override
   public void updateUser(User user) {
      userDao.save(user);
      System.out.println("更新操作成功!!!");
   }
   
   /**
    * Mapper的查询的原则:查询的where条件会自动的拼接其中不为null的数据
    *     where name = "王昭君" and sex = "女"
    * JPA的查询的语法规则:
    * 
    */
   @Override
   public List<User> findUserByName(User user) {
      String name = user.getName();
      return userDao.findByNameAndSex(name,"女"); //这里会自动拼接成where name = "王昭君" and sex = "女"
   }
}

说明:使用JPA查询时,如果需要指定条件查询,需要编辑特定的方法.查看方法的格式参数表格文件,如下:

JPA的语法规则

关键字

方法命名

sql where字句

And

findByNameAndPwd

where name= ? and pwd =?

Or

findByNameOrSex

where name= ? or sex=?

Is,Equals

findById,findByIdEquals

where id= ?

Between

findByIdBetween

where id between ? and ?

LessThan

findByIdLessThan

where id < ?

LessThanEquals

findByIdLessThanEquals

where id <= ?

GreaterThan

findByIdGreaterThan

where id > ?

GreaterThanEquals

findByIdGreaterThanEquals

where id > = ?

After

findByIdAfter

where id > ?

Before

findByIdBefore

where id < ?

IsNull

findByNameIsNull

where name is null

isNotNull,NotNull

findByNameNotNull

where name is not null

Like

findByNameLike

where name like ?

NotLike

findByNameNotLike

where name not like ?

StartingWith

findByNameStartingWith

where name like '?%'

EndingWith

findByNameEndingWith

where name like '%?'

Containing

findByNameContaining

where name like '%?%'

OrderBy

findByIdOrderByXDesc

where id=? order by x desc

Not

findByNameNot

where name <> ?

In

findByIdIn(Collection<?> c)

where id in (?)

NotIn

findByIdNotIn(Collection<?> c)

where id not  in (?)

True

findByAaaTue

where aaa = true

False

findByAaaFalse

where aaa = false

IgnoreCase

findByNameIgnoreCase

where UPPER(name)=UPPER(?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值