SpringBoot-JPA入门
JPA就是Spring集成了hibernate感觉。
注解,方法仓库(顾名思义的方法,封装好了,还有自定义的方法)。
案例:
spring:datasource:url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driver#指定数据库连接池类型type: org.apache.commons.dbcp2.BasicDataSourcedbcp2:#最大等待连接中的数量,设0位没有限制max-idle: 10#最大连接活动数max-total: 50#最大等待毫秒数,单位为ms,超过时间会出错误信息max-wait-millis: 10000#数据库连接初始化连接数initial-size: 5jpa:database-platform: org.hibernate.dialect.MySQLDialectshow-sql: truehibernate: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 {@Autowiredprivate 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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());}@Overridepublic 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());}@Overridepublic 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接口,这里不需要使用实现类 @Autowiredprivate JpaUserRepository jpaUserRepository = null;@RequestMapping("/getUser")@ResponseBodypublic User getUser(Long id) {//使用JPA接口查询对象Optional<User> user = jpaUserRepository.findById(id);return user.get();}@RequestMapping("/getUserById")@ResponseBodypublic User getUserById(Long id) {//使用JPA接口查询对象User user = jpaUserRepository.getUserById(id);return user;}@RequestMapping("/findByUserNameLike")@ResponseBodypublic List<User> findByUserNameLike(String userName) {//使用JPA接口查询对象List<User> userList = jpaUserRepository.findByUserNameLike("%" + userName + "%");return userList;}@RequestMapping("/findByUserNameOrNoteLike")@ResponseBodypublic 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*/@Overridepublic Integer convertToDatabaseColumn(SexEnum sex) {return sex.getId();}@Overridepublic 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》