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及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...
随机推荐
- InsetDrawable
表示把一个Drawable嵌入到另外一个Drawable的内部,并且在内部留一些间距, 类似与Drawable的padding属性,但padding表示的是Drawable的内容与Drawable本身 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理
把stus注释掉 正常访问就会报错 第20行 这里的stus为空,所以造成了这个错误. 非空判断 不为空用双问号来判断 <#if stus??><#list stus as stu& ...
- 一百三十六:CMS系统之发布帖子后台逻辑
模型 class PostModel(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True, au ...
- git clone https://chromium.googlesource.com/失败
一.现象 连接着vpn,网页上可以直接打开网站,但是使用terminal 执行git clone https://chromium.googlesource.com/xxxx时, 报错 ...
- 假如React没了JSX
如题,想必React大家早已不陌生,而React里面的JSX都是玩的得心应手了,但是假如说React里面没有了React那会是一种什么样的情形呢,我们来简单的看一下. 首先我们来实现一个简单的list ...
- sed例子
以care.log这个log文件为例, care.log: 05:44:31,816 DEBUG RawAggregationWorker:70 - LTS is working on Raw Dat ...
- Spring Aop(七)——基于XML配置的Spring Aop
转发:https://www.iteye.com/blog/elim-2396043 7 基于XML配置的Spring AOP 基于XML配置的Spring AOP需要引入AOP配置的Schema,然 ...
- C语言I博客作业12—学期总结
一.我学到的内容 二.我的收获(包括我完成的所有作业的链接+收获)不能只有作业链接,没有收获 作业次数 作业链接 第一次 C语言I博客作业01 第二次 C语言I博客作业02 第三次 C语言I博客作业0 ...
- Mac/Windows 跳过sourcetree的注册环节
前几天在电脑上装了个sourcetree,结果它硬要我注册,烦得很. 于是查了一下怎么跳过注册环节,结果还真有,试了一下,真给力! 特此记录. MAC版本: 打开sourcetree 关闭 ...
- [转帖]海思大佬称华为CPU同频追平AMD 注水吹嘘玩文字游戏?
海思大佬称华为CPU同频追平AMD 注水吹嘘玩文字游戏? https://t.cj.sina.com.cn/articles/view/6635931736/18b88485800100cz4h?fr ...