写在前面
日常操作数据库,小生之前用的都是BeetlSQL,看了很多人用JPA,就试着用了下。 话不多说,开始:
全局配置 Properties
#控制器输出Json字符串格式
spring.jackson.serialization.indent-output=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
#数据源配置(driver-class 飘红是因为pom中mysql依赖设置的是runtime,不影响)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
1.引入坐标
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
2.实体类
@Entity
@Data
@Table(name = "myCostomer") //自定义表名,不指定时默认以类名做表名
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")//指定列名
private String name;
@Column(name = "password")
private String password;
private String email;
private Date birthday;
}
3.Dao 接口
/**
* @创建人:
* @描述:
* JpaRepository<Customer,Integer>
* Integer 是实体类Customer 中作为主键的类型
*/
public interface CustomerDao extends JpaRepository<Customer,Integer> {
}
4. Service接口
public interface CustomerService {
public void addCust(Customer customer) ;
public void deleteCust(Integer id);
}
5. service实现类
@Service
public class ImpCustomerService implements CustomerService {
@Autowired
private CustomerDao custDao;
@Override
public void addCust(Customer customer) {
custDao.save(customer);
}
@Override
public void deleteCust(Integer id) {
custDao.deleteById(id);
}
}
6.Controller
@Controller
public class CustomerController {
@Autowired
private CustomerService service;
@GetMapping("/addcust")
@ResponseBody
public String addCustomer(){
Customer customer=new Customer();
customer.setName("李星云");
customer.setPassword("三圣涅");
customer.setEmail("lixy@qq.com");
customer.setBirthday(new Date());
service.addCust(customer);
return customer.toString();
}
@DeleteMapping("/deletecust/{id}")
@ResponseBody
public String deletCustomer(@PathVariable("id") Integer Id){
service.deleteCust(Id);
return "删除成功";
}
}
测试了这两个方法,是正确的。其他的 更新,查询所有等类似。
另外,在我启动项目的过程中,报了一个错,jpa No bean named ‘transactionManager’ available。
我在 启动类中,已经配置了事务管理器,只是指定的 bean name属性值不是transactionManager。
没办法, 只能改了 。
/**
*事务管理器配置
*/
@Bean(name = "transactionManager")
public DataSourceTransactionManager getDataSourceTransactionManager(@Qualifier("datasource") DataSource datasource) {
DataSourceTransactionManager dsm = new DataSourceTransactionManager();
dsm.setDataSource(datasource);
return dsm;
}