微架構(gòu) springcloud-04. springboot-druid+mysql、JPA

springboot druid+mysql掉瞳、使用JAP

這一節(jié)講述springboot 連接Mysql 數(shù)據(jù)庫(kù)钻蹬,并使用JPA 進(jìn)行CRUD操作

一:Springboot 集成druid+mysql阵难,取得數(shù)據(jù)源

準(zhǔn)備概述: 新建一個(gè)Maven java 項(xiàng)目,注意:是java 項(xiàng)目英上,不是Webapp 項(xiàng)目,以后的章節(jié)將通通采用Springboot 的官網(wǎng)推薦胧瓜,盡可能避免使用jsp、Servlet

01 pom.xml 導(dǎo)入依賴(lài):springboot跺株、熱部署复濒、模板引擎:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
</parent>

<dependencies>
    <!--springboot-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--springboot 熱部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    <!--thymeleaf 模板引擎-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

02 pom.xml 添加springboot-jdbc、druid乒省、mysql

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.18</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

03 創(chuàng)建 resources/application.properties 文件巧颈,并添加數(shù)據(jù)源屬性:

# 配置默認(rèn)數(shù)據(jù)源,并使用 阿里連接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

04 pom.xml添加Springboot Junti 測(cè)試環(huán)境依賴(lài):

<!--測(cè)試環(huán)境-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

05 創(chuàng)建測(cè)試類(lèi)袖扛,測(cè)試

@RunWith(SpringJUnit4ClassRunner.class) /*添加SpringJUnit支持砸泛,引入Spring-Test框架*/
@SpringBootTest(classes = App.class) /*指定Springboot啟動(dòng)類(lèi)啟動(dòng)*/
public class TestMysql {

    @Autowired
    private DataSource dataSource;

    @Test
    public void test() throws SQLException {
        System.out.println(dataSource);
        System.out.println(dataSource.getConnection());
    }
}

控制臺(tái)打印:

……
{
    CreateTime:"2018-02-07 12:17:10",
    ActiveCount:0,
    PoolingCount:0,
    CreateCount:0,
    DestroyCount:0,
    CloseCount:0,
    ConnectCount:0,
    Connections:[
    ]
}
2018-02-07 12:17:11.745  INFO 20776 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
Wed Feb 07 12:17:11 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
com.mysql.jdbc.JDBC4Connection@736309a9
……

# 數(shù)據(jù)源蛆封、mysql連接獲取成功

二:使用JPA 進(jìn)行 CRUD 操作

01 pom.xml 導(dǎo)入jpa 依賴(lài)

<!--JPA-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

02 何為JPA唇礁?

JPA=JAVA Persistence;AJVA 持久化
針對(duì)持久化操作,java 提供了一套標(biāo)準(zhǔn)的API惨篱,供開(kāi)發(fā)者實(shí)現(xiàn)盏筐,目前最常用的JPA框架是Hibernate-JPA.
spring-boot-starter-data-jpa 采用的就是 Hibernate-JPA

03 配置jpa 屬性:

######JPA 配置#####
# 聲明數(shù)據(jù)庫(kù)
spring.jpa.database=mysql
# 是否顯示SQL語(yǔ)句
spring.jpa.show-sql = true
# Hibernate 自動(dòng)DDL 操作
# create 每次加載hibernate時(shí)都會(huì)刪除上一次的生成的表
# create-drop 每次加載hibernate時(shí)根據(jù)model類(lèi)生成表,但是sessionFactory一關(guān)閉,表就自動(dòng)刪除
# update 最常用的屬性妒蛇,第一次加載hibernate時(shí)根據(jù)model類(lèi)會(huì)自動(dòng)建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫(kù))
spring.jpa.hibernate.ddl-auto=create
#配置方言
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

04 創(chuàng)建實(shí)體類(lèi) person.jack.bean/User.java,對(duì)應(yīng)建包机断、類(lèi):

@Entity
@Table(name = "user_info")
public class User {
    @Id @GeneratedValue
    private long id;

    @Column(name = "user_name")
    private String userName;

    @Column(name = "user_age")
    private String userAge;

    @Column(name = "user_sex")
    private String userSex;
    
    public User(){
        System.out.println("對(duì)象實(shí)例化楷拳!");
    }
    //get set 方法忽略
}

05 啟功服務(wù)绣夺,查看控制臺(tái)信息,初始體驗(yàn)hibernate JPA

#控制臺(tái)打印

對(duì)象實(shí)例化欢揖!
2018-02-07 13:53:37.617  INFO 25604 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table if exists user_info
Hibernate: create table user_info (id bigint not null auto_increment, user_age varchar(255), user_name varchar(255), user_sex varchar(255), primary key (id))

# 因?yàn)橛性O(shè)置:
spring.jpa.hibernate.ddl-auto=create陶耍,所以服務(wù)在啟動(dòng)時(shí)會(huì)先檢查刪除user_info,然后再建表
# 因?yàn)橛性O(shè)置:
spring.jpa.show-sql = true她混,控制臺(tái)就會(huì)打印JPA操作的Sql 語(yǔ)句

06 新建 person/jack/dao/UserRepository.java 接口烈钞,使其繼承CrudRepository<S,T> 并傳遞相關(guān)泛型:

package person.jack.dao;

import org.springframework.data.repository.CrudRepository;
import person.jack.bean.User;

public interface UserRepository extends CrudRepository<User,Long> {
}

07 新建 person/jack/service/UserService,注入 UserRepository:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional(rollbackFor=Exception.class)
    public void save(User user){ //新增或更改;執(zhí)行更改坤按,id字段必須有值毯欣,否則為新增
        userRepository.save(user);
    }

    public List<User> getAll() { //查找所有

        /**默認(rèn)返回的是個(gè)迭代**/
        Iterable<User> userAll = userRepository.findAll();

        /*轉(zhuǎn)換為 List 集合返回*/
        Iterator<User> iterator = userAll.iterator();
        List<User> userList = new ArrayList<User>();
        while (iterator.hasNext()) {
            userList.add(iterator.next());
        }
        return userList;
    }

    public User findOne(Long id){
        return userRepository.findOne(id);
    }

    public void delete(User user){
        userRepository.delete(user);
    }

    public void delete(Long id){
        userRepository.delete(id);
    }
}

08 新建 person/jack/controller/UserController,注入 UserService:

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @RequestMapping("/addUser")
    public String addUser(Map map,User user){
        userRepository.save(user);
        map.put("mesg", user);
        return "result";
    }
}

09 在resources 下新建默認(rèn)模板目錄:templates,創(chuàng)建模板:result.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
    <h1 th:text="${mesg}"></h1>
</body>
</html>

10 重啟服務(wù)臭脓,ddl-auto=create 會(huì)重新建表酗钞,瀏覽器地址欄輸入:http://localhost:8080/user/addUser/?userName=Jack&userAge=18&userSex=man ,測(cè)試新增

#頁(yè)面打印 剛剛添加的user對(duì)象的內(nèi)存地址
person.jack.bean.User@68ee4410

11 檢查控制臺(tái):

#控制臺(tái)打印
對(duì)象實(shí)例化!
Hibernate: insert into user_info (user_age, user_name, user_sex) values (?, ?, ?)

12 檢查數(shù)據(jù)庫(kù):

mysql> select * from user_info;
+----+----------+-----------+----------+
| id | user_age | user_name | user_sex |
+----+----------+-----------+----------+
|  1 | 18       | Jack      | man      |
+----+----------+-----------+----------+
1 row in set (0.00 sec)

mysql>

# 數(shù)據(jù)添加成功砚作!

13 瀏覽器地址欄重新輸入:http://localhost:8080/user/addUser/?id=1&userName=Jack&userAge=19&userSex=man窘奏,現(xiàn)在有id參數(shù),查看數(shù)據(jù)庫(kù)是否更新葫录!

#瀏覽器打印
person.jack.bean.User@58bd6a84

14 檢查數(shù)據(jù):

mysql> select * from user_info;
+----+----------+-----------+----------+
| id | user_age | user_name | user_sex |
+----+----------+-----------+----------+
|  1 | 19       | Jack      | man      |
+----+----------+-----------+----------+
1 row in set (0.00 sec)

mysql>
# user_age 由18->19 數(shù)據(jù)成功更改着裹!

總結(jié):以上即為:druid+mysql+jpa 操作數(shù)據(jù)庫(kù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市米同,隨后出現(xiàn)的幾起案子骇扇,更是在濱河造成了極大的恐慌,老刑警劉巖面粮,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匠题,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡但金,警方通過(guò)查閱死者的電腦和手機(jī)韭山,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冷溃,“玉大人钱磅,你說(shuō)我怎么就攤上這事∷普恚” “怎么了盖淡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凿歼。 經(jīng)常有香客問(wèn)我褪迟,道長(zhǎng),這世上最難降的妖魔是什么答憔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任味赃,我火速辦了婚禮,結(jié)果婚禮上虐拓,老公的妹妹穿的比我還像新娘心俗。我一直安慰自己,他們只是感情好蓉驹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布城榛。 她就那樣靜靜地躺著,像睡著了一般态兴。 火紅的嫁衣襯著肌膚如雪狠持。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,043評(píng)論 1 291
  • 那天瞻润,我揣著相機(jī)與錄音喘垂,去河邊找鬼献汗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛王污,可吹牛的內(nèi)容都是我干的罢吃。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼昭齐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尿招!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起阱驾,我...
    開(kāi)封第一講書(shū)人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤就谜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后里覆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丧荐,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年喧枷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虹统。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隧甚,死狀恐怖车荔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戚扳,我是刑警寧澤忧便,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站帽借,受9級(jí)特大地震影響珠增,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砍艾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一蒂教、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辐董,春花似錦悴品、人聲如沸禀综。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)定枷。三九已至孤澎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欠窒,已是汗流浹背覆旭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工退子, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人型将。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓寂祥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親七兜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丸凭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容