Spring Boot - æ°æ®åºé ç½®
æ´åJdbcTemplate
- pom.xmlé ç½®mavenä¾èµ
- application.propertiesé ç½®æ°æ®æº
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
spring.datasource.url=jdbc:mysql://localhost:/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=
spring.datasource.max-wait=
spring.datasource.min-idle=
spring.datasource.initial-size=
spring.datasource.validation-query=SELECT
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=
å®è·µï¼æ¥è¯¢ç¨æ·è¡¨
- å建表user
CREATE TABLE `user` (
`id` int() unsigned NOT NULL AUTO_INCREMENT,
`name` varchar() NOT NULL DEFAULT '',
`age` int() NOT NULL,
`create` int() NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8mb4;
- å建ç¨æ·å®ä½
package com.wanye.entity;
/**
* Created by wanye on 2017/6/3.
*/
public class User {
private int id;
private String name;
private int age;
private int create;
// çç¥get set
}
- å建UserServiceå¹¶æ³¨å ¥JdbcTemplateï¼å®ç°æ¥è¯¢â½ æ³
package com.wanye.service;
import com.wanye.entity.User;
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.SQLException;
import java.util.List;
/**
* Created by wanye on 2017/6/3.
*/
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<User> getUserList() {
return jdbcTemplate.query("select * from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
user.setCreate(resultSet.getInt("create"));
return user;
}
});
}
}
-
å¢å Controllerï¼å¹¶è¿åç»æ
代ç ç段å¦ä¸ï¼å ³äºå¦ä½å®ç°webæ¥å£ï¼è¯·åè
@Autowired
private UserService userService;
@RequestMapping("/userlist")
public List<User> getUserList() {
return userService.getUserList();
}
æ´åMyBatis
- pom.xmlé ç½®mavenä¾èµ
- application.propertiesé ç½®mybatis
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
<!-- çç¥mysql驱å¨ä¾èµ -->
#å
³äºmapperæ件ä½ç½®åentityç±»ä½ç½®ï¼å¤§å®¶éè¦æèªå·±éè¦è¿è¡ä¿®æ¹
mybatis.mapper-locations=classpath*:mapper/*Mapper.xml
mybatis.type-aliases-package=com.wanye.entity
å®è·µï¼éè¿ç¨æ·idæ¥è¯¢æå®ç¨æ·ä¿¡æ¯
- å建mapperæ¥å£ @Mapper
package com.wanye.mapper;
import com.wanye.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* Created by wanye on 2017/6/3.
*/
@Repository
@Mapper
public interface UserMapper {
public User getUserById(int id);
}
- å建mapper.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!-- namespaceè¦æåå®ä¹çmapperæ¥å£ -->
<mapper namespace="com.wanye.mapper.UserMapper">
<!-- idå³mapperæ¥å£ä¸çå
·ä½æ¹æ³å -->
<!-- resultTypeå³æ¹æ³è¿åå¼-->
<select id="getUserById" resultType="com.wanye.entity.User">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
- å®ç°æ¥è¯¢â½ æ³ï¼å¨userserviceç±»ä¸å¢å
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
return userMapper.getUserById(id);
}
- å¨controllerä¸è¿åJsonç»æï¼çç¥
äºå¡
äºå¡æ¦å¿µååç
- å®ä¹ï¼ä»æ°æ®åºè§åº¦è¯´ï¼å°±æ¯ä¸ç»SQLæ令ï¼è¦ä¹å ¨é¨æ§è¡æåï¼è¥å 为æ个åå å ¶ä¸ä¸æ¡æ令æ§è¡æé误ï¼åæ¤éå åæ§è¡è¿çæææ令ãæ´ç®çç说就æ¯ï¼è¦ä¹å ¨é¨æ§è¡æåï¼è¦ä¹æ¤éä¸æ§è¡ã
- javaäºå¡ï¼æ¢ç¶äºå¡çæ¦å¿µä»æ°æ®åºèæ¥ï¼é£Javaäºå¡æ¯ä»ä¹ï¼ä¹é´æä»ä¹èç³»ï¼å®é ä¸ï¼ä¸ä¸ªJavaåºç¨ç³»ç»ï¼å¦æè¦æä½æ°æ®åºï¼åéè¿JDBCæ¥å®ç°çãå¢å ãä¿®æ¹ãå é¤é½æ¯éè¿ç¸åºæ¹æ³é´æ¥æ¥å®ç°çï¼äºå¡çæ§å¶ä¹ç¸åºè½¬ç§»å°Javaç¨åºä»£ç ä¸ãå æ¤ï¼æ°æ®åºæä½çäºå¡ä¹ æ¯ä¸å°±ç§°ä¸ºJavaäºå¡ã
- å®ç°åç(åæºäºå¡)ï¼JDBC äºå¡æ¯ç¨ Connection 对象æ§å¶çãJDBC Connection æ¥å£ï¼ java.sql.Connection ï¼æä¾äºä¸¤ç§äºå¡æ¨¡å¼ï¼èªå¨æ交åæå·¥æ交ã java.sql.Connection æä¾äºä»¥ä¸æ§å¶äºå¡çæ¹æ³ï¼
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
ä½¿ç¨ JDBC äºå¡æ¶ï¼æ¨å¯ä»¥å°å¤ä¸ª SQL è¯å¥ç»åå°ä¸ä¸ªäºå¡ä¸ãJDBC äºå¡çä¸ä¸ªç¼ºç¹æ¯äºå¡çèå´å±éäºä¸ä¸ªæ°æ®åºè¿æ¥ãä¸ä¸ª JDBC äºå¡ä¸è½è·¨è¶å¤ä¸ªæ°æ®åºã
4. JTAï¼Java Transaction APIï¼äºå¡(å¤æºäºå¡)ï¼éè¿xaå®ç°ï¼éè¦é©±å¨æ¯æãäºå¡å¯ä»¥è·¨è¶å¤ä¸ªæ°æ®åºæå¤ä¸ªDAOï¼åæ¯è¾å¤ï¼ä½¿ç¨ä¹æ¯è¾å¤æã
5. 容å¨äºå¡ï¼ç±j2ee容å¨æä¾ï¼åºæ¬ä¸æ¯åºäºJTAæ¥å®ç°ãå±éäºEJBåºç¨ä½¿ç¨ã
å¦ä½é ç½®äºå¡
- 使ç¨æ³¨è§£ @EnableTransactionManagement å¼å¯äºå¡æ¯æï¼å»ºè®®å¨å¯å¨ç±»ä¸å¢å ï¼ä¾å¦
@EnableTransactionManagement
@SpringBootApplication
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
}
}
- å¨è®¿é®æ°æ®åºçServiceæ¹æ³ä¸æ·»å 注解 @Transactional 便å¯
å®è·µï¼å®ç°æ·è´ç¨æ·ä¿¡æ¯ï¼å¹¶å°åç¨æ·çnameä¿®æ¹ä¸ºxiaoming
- Case1:æ£å¸¸ï¼æ°å¢1æ¡è®°å½name=xiaohongï¼æ´æ°1æ¡è®°å½name=xiaoming)
- Case2:å¼å¸¸ï¼nameé¿åº¦è¶ åºvarchar(8)ï¼å¯¼è´åæ»
userService.java
@Transactional
public void copyUser(long id, String name) {
User user = getUserById(id);
int i = jdbcTemplate.update("insert INTO USER (name,age,`CREATE`) VALUES (?,?,?)", new Object[]{user.getName(), user.getAge(), user.getCreate()});
logger.info("å¤å¶æå: i=" + i + " name=" + name + " id=" + id);
i = jdbcTemplate.update("update USER SET name=? where id=?", new Object[]{name, user.getId()});
logger.info("æ´æ°æåï¼i=" + i + " name=" + name + " id=" + id);
}
userController.java
@RequestMapping("/user/cp/{id}/{name}")
public List<User> cpUser(@PathVariable("id") long id, @PathVariable("name") String name) {
userService.copyUser(id, name);
return userList();
}
大家èªè¡éªè¯ä¸ä¸ï¼å¦æ{name}é¿åº¦è¶ è¿8个åèï¼ä¼å¯¼è´å¤å¶æåçæ°æ®åæ»ãå¦å¤ï¼mysqlæ°æ®åºå¼æéè¦ä½¿ç¨InnoDBï¼å¹¶ä¸æ¯ææçå¼æé½æ¯æäºå¡ï¼å¤§å®¶å¯ä»¥æ¥è¯¢æ°æ®åºå¼æç¸å ³èµæã
æ»ç»
æ¬æ讲解Spring Bootæ´åJdbcTemplateãæ´åmybatisï¼ä»ç»å¹¶éç¹è®²è§£äºäºå¡å¤çåé ç½®ï¼æ¬ææªæåå ³äºåâ»æ¥è¯¢åæ°æ®åºè¿æ¥æ± ï¼æ认为å页æ¥è¯¢çéç¹æ¯å页ç®æ³å¦ä½å°è£ ï¼å¹¶ä¸æ¯Spring Bootå ³æ³¨çéç¹ï¼å¤§å®¶å¯ä»¥èªå·±å®ç°ï¼å¦å¤ç°å¨å¸¸ç¨çæ°æ®åºè¿æ¥æ± æc3p0/dbcp/tomcat-jdbc/HikariCPï¼é¡ºä¾¿æä¸ä¸ï¼å¨Spring Bootä¸æ´æ¹æ°æ®æºï¼åªéè¦å¨application.propertiesé ç½®æ件ä¸å¢å spring.datasource.typeé ç½®å³å¯ï¼ä¾å¦ï¼
æå
å¦æè§å¾æçæç« å¯¹æ¨æç¨ï¼è¯·ç¹èµãæ¶èãæ¨çæ¯æå°é¼å±æ继ç»åä½ï¼
为äºæé«å¤§å®¶å¦ä¹ ææï¼å½å¶äºåæ¥çè§é¢è¯¾ç¨ï¼è¿æ大家æ¯æè§é¢è¯¾ç¨