spring boot 1.5.4 기반 jpa+hibenate+jdbcTemplate 통합(상세 설명)
<!-- spring data jpa, tomcat jdbc pool/hibernate -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
2.데이터 원본 설정 추가(DataSource 같은 것 은 일련의 대상 spring boot 가 주입 할 것 입 니 다.설정 하면 됩 니 다!)
spring.datasource.url=jdbc:mysql://localhost/test?characterEncoding=utf8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#database pool config
# Number of ms to wait before throwing an exception if no connection is available.
spring.datasource.tomcat.max-wait=10000
# Maximum number of active connections that can be allocated from this pool at the same time.
spring.datasource.tomcat.max-active=300
# Validate the connection before borrowing it from the pool.
spring.datasource.tomcat.test-on-borrow=true
# initial pool size
spring.datasource.tomcat.initial-size=20
#=====================jpa config================================
# :update/create/create-drop/validate/none
spring.jpa.hibernate.ddl-auto=none
# sql
spring.jpa.show-sql=true
# json
spring.jackson.serialization.indent_output=true
3.새 실체
@Entity
@Table(name="user")
public class User {
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name="number")
private String number;
@Column(name="name")
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.dao 층
public interface UserDao{
User getById(int id);
User getByNumber(String number);
int addUser(User user);
void deleteUserById(int id);
User updateUser(User user);
}
@Repository
public class UserDaoImpl implements UserDao {
@PersistenceContext
private EntityManager entityManager;
@Override
public User getById(int id) {
//find by primary key
return this.entityManager.find(User.class,id);
}
@Override
public User getByNumber(String number) {
Query query = this.entityManager.createQuery("from User u where u.number=:number",User.class);
query.setParameter("number",number);
User user = (User)query.getSingleResult();
return user;
}
@Override
public int addUser(User user) {
this.entityManager.persist(user);
//print the id
System.out.println(user.getId());
return user.getId();
}
@Override
public void deleteUserById(int id) {
User user = this.entityManager.find(User.class,id); // ,
this.entityManager.remove(user);
}
@Override
public User updateUser(User user) {
User userNew = this.entityManager.merge(user);
return userNew;
}
}
5.서비스 계층
public interface UserService {
User getById(int id);
User getByNumber(String number);
int addUser(User user,boolean throwEx);
void deleteUserById(int id);
User updateUser(User user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional(readOnly = true)
public User getById(int id) {
return userDao.getById(id);
}
@Override
@Transactional(readOnly = true)
public User getByNumber(String number) {
return userDao.getByNumber(number);
}
@Override
public int addUser(User user,boolean throwEx) {
int id= this.userDao.addUser(user);
if(throwEx){
throw new RuntimeException("throw a ex");
}
return id;
}
@Override
public void deleteUserById(int id) {
this.userDao.deleteUserById(id);
}
@Override
public User updateUser(User user) {
return this.userDao.updateUser(user);
}
}
6.controller 층
@Controller("user1")
@RequestMapping("/jpa/user")
public class UserController {
/**
* (slf4j->logback)
*/
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
/**
* text
* @param id id
* @return json
*/
@RequestMapping("/get/id/{id}")
@ResponseBody
public String getUserById(@PathVariable("id")String id){
logger.info("request /user/get/id/{id}, parameter is "+id);
User user = userService.getById(Integer.parseInt(id));
return JSONObject.toJSONString(user);
}
/**
* json
* @param number
* @return
*/
@RequestMapping("/get/number/{number}")
@ResponseBody
public User getUserByNumber(@PathVariable("number")String number){
User user = userService.getByNumber(number);
return user;
}
@RequestMapping("/add/{number}/{name}")
@ResponseBody
public String addUser(@PathVariable("number")String number,@PathVariable("name")String name,boolean throwEx){
User user = new User();
user.setNumber(number);
user.setName(name);
int id = -1;
try{
id = userService.addUser(user,throwEx);
}catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
return String.valueOf(id);
}
@RequestMapping("/delete/{id}")
@ResponseBody
public void getUserById(@PathVariable("id")int id){
this.userService.deleteUserById(id);
}
@RequestMapping("/update/{id}/{number}/{name}")
@ResponseBody
public User addUser(@PathVariable("id")int id, @PathVariable("number")String number, @PathVariable("name")String name){
User user = new User();
user.setId(id);
user.setNumber(number);
user.setName(name);
return userService.updateUser(user);
}
}
7.spring data jpa 새로운 사용 방식,고급
1.dao
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
/**
* spring data jpa ( )
* @return
*/
User findByNumber(String number);
@Modifying
@Query("delete from User u where u.id = :id")
void deleteUser(@Param("id")int id);
}
2.service
public interface UserService {
User findById(int id);
User findByNumber(String number);
List<User> findAllUserByPage(int page,int size);
User updateUser(User user,boolean throwEx);
void deleteUser(int id);
}
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User findById(int id) {
return this.userRepository.findOne(id);
}
@Override
public User findByNumber(String number) {
return this.userRepository.findByNumber(number);
}
@Override
public List<User> findAllUserByPage(int page,int size) {
Pageable pageable = new PageRequest(page, size);
Page<User> users = this.userRepository.findAll(pageable);
return users.getContent();
}
@Override
public User updateUser(User user,boolean throwEx) {
User userNew = this.userRepository.save(user);
if(throwEx){
throw new RuntimeException("throw a ex");
}
return userNew;
}
@Override
public void deleteUser(int id) {
this.userRepository.deleteUser(id);
}
}
3.controller
@Controller("user2")
@RequestMapping("/datajpa/user")
public class UserController {
/**
* (slf4j->logback)
*/
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
/**
* text
* @param id id
* @return json
*/
@RequestMapping("/get/id/{id}")
@ResponseBody
public String getUserById(@PathVariable("id")String id){
logger.info("request /user/get/id/{id}, parameter is "+id);
User user = userService.findById(Integer.parseInt(id));
return JSONObject.toJSONString(user);
}
/**
* json
* @param number
* @return
*/
@RequestMapping("/get/number/{number}")
@ResponseBody
public User getUserByNumber(@PathVariable("number")String number){
User user = userService.findByNumber(number);
return user;
}
@RequestMapping("/get/all/{page}/{size}")
@ResponseBody
public List<User> getAllUserByPage(@PathVariable("page")int page,@PathVariable("size")int size){
return this.userService.findAllUserByPage(page,size);
}
@RequestMapping("/update/{id}/{number}/{name}")
@ResponseBody
public User addUser(@PathVariable("id")int id, @PathVariable("number")String number, @PathVariable("name")String name,boolean throwEx){
User user = new User();
user.setId(id);
user.setNumber(number);
user.setName(name);
User userNew = null;
try{
userService.updateUser(user,throwEx);
}catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
return userNew;
}
@RequestMapping("/delete/{id}")
@ResponseBody
public void getUserById(@PathVariable("id")int id){
this.userService.deleteUser(id);
}
}
8.jdbcTemplate 와 transaction Template 를 주입 하고 전통 적 인 방식 으로 데이터 베 이 스 를 조작 하 며 더욱 유연 합 니 다.방법 은 다음 과 같 습 니 다.
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private TransactionTemplate transactionTemplate;
/**
*
* @param throwEx
*/
@Override
public void testTransactionManually(boolean throwEx) {
try {
transactionTemplate.execute(new TransactionCallback<Boolean>() {
/**
*
*
* @param transactionStatus
* @return
*/
@Override
public Boolean doInTransaction(TransactionStatus transactionStatus) {
User user = new User();
user.setId(1);
int a = new Random().nextInt(10); //0-9
user.setNumber("10000u" + a);
jdbcTemplate.update("UPDATE USER SET NUMBER=? WHERE ID=?", new Object[]{user.getNumber(), user.getId()}, new int[]{Types.VARCHAR, Types.INTEGER});
if (throwEx) {
throw new RuntimeException("try throw exception"); //
}
return true;
}
});
}catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
}
/**
* jdbc
*/
@Override
public void testJdbcTemplate() {
User user = new User();
int a = new Random().nextInt(10); //0-9
user.setNumber("10000i"+ a );
user.setName("name"+a);
this.jdbcTemplate.update("INSERT into USER(NUMBER,NAME )VALUES (?,?)",user.getNumber(),user.getName());
}
이로써 저 는 세 가지 방식(jpa 두 가지+jdbcTemplate)으로 데이터 베 이 스 를 어떻게 조작 하 는 지 말씀 드 렸 습 니 다.당신 이 사용 하고 자 하 는 대로 사용 하 세 요.상기 코드 는 모두 실천 이 가능 하 다 는 것 을 증명 합 니 다!이상 의 이 편 은 spring boot 1.5.4 를 기반 으로 jpa+hibenate+jdbcTemplate(상세 설명)를 통합 하여 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.