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》