SpringBoot-JPA入门
SpringBoot-JPA入门
JPA就是Spring集成了hibernate感觉。
注解,方法仓库(顾名思义的方法,封装好了,还有自定义的方法)。
案例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#指定数据库连接池类型
type: org.apache.commons.dbcp2.BasicDataSource
dbcp2:
#最大等待连接中的数量,设0位没有限制
max-idle: 10
#最大连接活动数
max-total: 50
#最大等待毫秒数,单位为ms,超过时间会出错误信息
max-wait-millis: 10000
#数据库连接初始化连接数
initial-size: 5
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: true
hibernate:
ddl-auto: update
package com.lanqiao.springbootjdbc.pojo; import com.lanqiao.springbootjdbc.converter.SexConverter;
import com.lanqiao.springbootjdbc.enumeration.SexEnum;
import lombok.Data; import javax.persistence.*; /**
* @author DeepSleeping
* @date 2019/5/28 16:17
* @description
*/
@Data
@Entity(name = "user")
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id = null;
@Column(name = "user_name")
private String userName = null;
@Convert(converter = SexConverter.class)
private SexEnum sex = null;
private String note = null;
}
package com.lanqiao.springbootjdbc.dao; import com.lanqiao.springbootjdbc.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import java.util.List; public interface JpaUserRepository extends JpaRepository<User, Long> { @Query("from user where user_name like concat('%',?1,'%') and note like concat('',?2,'%') ")
public List<User> findUsers(String userName, String note); /**
* @description 按用户名称模糊查询
* @author DeepSleeping
* @date 2019/5/28 19:40
*/
List<User> findByUserNameLike(String userName); /**
* @description 根据主键查询
* @author DeepSleeping
* @date 2019/5/28 19:41
*/
User getUserById(Long id); /**
* @description 按照用户名称或者备注进行模糊查询
* @author DeepSleeping
* @date 2019/5/28 19:42
*/
List<User> findByUserNameLikeOrNoteLike(String userName, String note);
}
package com.lanqiao.springbootjdbc.service.impl; import com.lanqiao.springbootjdbc.enumeration.SexEnum;
import com.lanqiao.springbootjdbc.pojo.User;
import com.lanqiao.springbootjdbc.service.JdbcTmplUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service; import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List; /**
* @author DeepSleeping
* @date 2019/5/28 16:28
* @description
*/
@Service
public class JdbcTmplUserServiceImpl implements JdbcTmplUserService { @Autowired
private JdbcTemplate jdbcTemplate; /**
* @description 获取映射关系
* @author DeepSleeping
* @date 2019/5/28 16:29
*/
private RowMapper<User> getUserMapper() {
RowMapper<User> userRowMapper = (ResultSet rs, int rownum) -> {
User user = new User();
user.setId(rs.getLong("id"));
user.setUserName(rs.getString("user_name"));
int setId = rs.getInt("sex");
SexEnum sex = SexEnum.getEnumById(setId);
user.setSex(sex);
user.setNote(rs.getString("note"));
return user;
};
return userRowMapper;
} @Override
public User getUser(Long id) {
String sql = "select id,user_name,sex,note from t_user where id = ?";
//参数
Object[] params = new Object[]{id};
User user = jdbcTemplate.queryForObject(sql, params, getUserMapper());
return user;
} @Override
public List<User> findUsers(String userName, String note) {
String sql = "select id,user_name,sex,note from t_user where user_name like concat('%',?,'%') and note like concat('%',?,'%')";
Object[] params = new Object[]{userName, note};
List<User> userList = jdbcTemplate.query(sql, params, getUserMapper());
return userList;
} @Override
public int insertUser(User user) {
String sql = "insert into t_user (user_name,sex,note) values(?,?,?)";
return jdbcTemplate.update(sql, user.getNote(), user.getSex().getId(), user.getNote());
} @Override
public int updateUser(User user) {
String sql = "update t_user set user_name = ?,sex=?,note=? where id = ?";
return jdbcTemplate.update(sql, user.getUserName(), user.getSex().getId(), user.getNote(), user.getId());
} @Override
public int deleteUser(Long id) {
String sql = "delete from t_user where id = ?";
return jdbcTemplate.update(sql, id);
} public User getUser2(Long id) {
User result = this.jdbcTemplate.execute((Statement stmt) -> {
String sql1 = "select count(*) total from t_user where id = " + id;
ResultSet rs1 = stmt.executeQuery(sql1);
while (rs1.next()) {
int total = rs1.getInt("total");
System.out.println(total);
} String sql2 = "select id,user_name,sex,note from t_user where id = " + id;
ResultSet rs2 = stmt.executeQuery(sql2);
User user = null;
while (rs2.next()) {
int rowNum = rs2.getRow();
user = getUserMapper().mapRow(rs2, rowNum);
}
return user;
});
return result;
}
}
package com.lanqiao.springbootjdbc.controller; import com.lanqiao.springbootjdbc.dao.JpaUserRepository;
import com.lanqiao.springbootjdbc.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.nio.cs.US_ASCII; import java.util.List;
import java.util.Optional; /**
* @author DeepSleeping
* @date 2019/5/28 17:05
* @description
*/
@Controller
@RequestMapping("/jpa")
public class JpaController {
//注入jpa接口,这里不需要使用实现类 @Autowired
private JpaUserRepository jpaUserRepository = null; @RequestMapping("/getUser")
@ResponseBody
public User getUser(Long id) {
//使用JPA接口查询对象
Optional<User> user = jpaUserRepository.findById(id);
return user.get();
} @RequestMapping("/getUserById")
@ResponseBody
public User getUserById(Long id) {
//使用JPA接口查询对象
User user = jpaUserRepository.getUserById(id);
return user;
} @RequestMapping("/findByUserNameLike")
@ResponseBody
public List<User> findByUserNameLike(String userName) {
//使用JPA接口查询对象
List<User> userList = jpaUserRepository.findByUserNameLike("%" + userName + "%");
return userList;
} @RequestMapping("/findByUserNameOrNoteLike")
@ResponseBody
public List<User> findByUserNameOrNoteLike(String userName, String note) {
String userNameLike = "%" + userName + "%";
String noteLike = "%" + note + "%";
//使用JPA接口查询对象
List<User> userList = jpaUserRepository.findByUserNameLikeOrNoteLike(userNameLike, noteLike);
return userList;
}
}

package com.lanqiao.springbootjdbc.converter; import com.lanqiao.springbootjdbc.enumeration.SexEnum; import javax.persistence.AttributeConverter; /**
* @author DeepSleeping
* @date 2019/5/28 17:00
* @description
*/
public class SexConverter implements AttributeConverter<SexEnum, Integer> { /**
* @description 将枚举转换为数据库列
* @author DeepSleeping
* @date 2019/5/28 17:01
*/
@Override
public Integer convertToDatabaseColumn(SexEnum sex) {
return sex.getId();
} @Override
public SexEnum convertToEntityAttribute(Integer id) {
return SexEnum.getEnumById(id);
}
}
package com.lanqiao.springbootjdbc; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @SpringBootApplication
@EnableJpaRepositories(basePackages = "com.lanqiao.springbootjdbc.dao")
@EntityScan(basePackages = "com.lanqiao.springbootjdbc.pojo")
public class SpringbootJdbcApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootJdbcApplication.class, args);
} }
参考书籍:《深入浅出SpringBoot2.x》
SpringBoot-JPA入门的更多相关文章
- SpringBoot Jpa入门案例
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 我们先来了解一下是什么是springboot jpa,springboo ...
- SpringData 基于SpringBoot快速入门
SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...
- SpringBoot 初入门
SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, ...
- SpringBoot基础篇-SpringBoot快速入门
SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...
- Spring Data Jpa 入门学习
本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...
- IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统
先放上github地址:spike-system,可以直接下载完整项目运行测试 SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统 技术栈:SpringBoot, MyS ...
- JPA入门例子(采用JPA的hibernate实现版本) 转
JPA入门例子(采用JPA的hibernate实现版本) jpahibernate数据库jdbcjava框架(1).JPA介绍: JPA全称为Java Persistence API ,Java持久化 ...
- 补习系列(19)-springboot JPA + PostGreSQL
目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...
- 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限
上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...
- 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限
开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...
随机推荐
- 使 nodejs 代码 在后端运行(forever)
情境 运行nodejs的程序,使用命令:node xxx.js,但是关掉终端,程序也关闭了,如何让node app的程序一直运行? 解决 1.安装forever npm install -g fore ...
- 010-HTTP协议
一.概述 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议.它可以使浏览器更加高效,使网络传输减少.它不仅保证 ...
- spring常用模式--委派模式
1.委派模式简介 在常用的23种设计模式中其实面没有委派模式(delegate)的影子,但是在Spring中委派模式确实用的比较多的一种模式. 在spring中的体现:Spring MVC框架中的Di ...
- nodejs连接mongodb(密码)
const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://user:password@localhost:2 ...
- Ubuntu安装teamview客户端
1,下载teamviem客户端的Ubuntu版本 下载地址 https://www.teamviewer.com/en/download/linux/ 2,安装 apt install ./teamv ...
- Flutter之切换导航TabBar组件
TabController 这是Tab页的控制器,用于定义Tab标签和内容页的坐标,还可配置标签页的切换动画效果等. TabController的创建有两种形式,一种是使用系统的DefaultTabC ...
- Jmeter 逻辑控制器 之 循环控制器
今天和大家分享下循环控制器的使用. 一.认识循环控制器 如下图:新增一个循环控制器 循环控制器的设置界面: 循环次数:永远和自定义次数,这个应该比较好理解. 二.使用循环控制器 其实大家对Jmeter ...
- Map对象,Set对象使用(2)
今天重点见一下Set Set 在我印象里它主要就是去重,Set 是一个值的集合,这个集合中所有的值仅出现一次 Set 属性size:和Map的size一样,返回成员的总数 Set的方法: Set.pr ...
- [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中
本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...
- [Agc028B]Removing Blocks_排列组合
Removing Blocks 题目链接:https://atcoder.jp/contests/agc028/tasks/agc028_b 数据范围:略. 题解: 这种问题的第一步很套路,就是对于每 ...