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》