<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot之旅-數(shù)據(jù)訪問

          共 11001字,需瀏覽 23分鐘

           ·

          2023-08-01 10:10

          走過路過不要錯過

          點擊藍字關注我們


          一、引言
          大部分系統(tǒng)都離不開數(shù)據(jù)訪問,數(shù)據(jù)庫包括SQL和NOSQL,SQL是指關系型數(shù)據(jù)庫,常見的有SQL Server,Oracle,MySQL(開源),NOSQL是泛指非關系型數(shù)據(jù)庫,常見的有MongoDB,Redis。
          用spring開發(fā)時我們常用的ORM框架有JDBC、Mybatis,Hibernate,現(xiàn)在最常用的應該是Mybatis。
          在Springboot中對于數(shù)據(jù)訪問層,無論是SQL還是NOSQL,都默認采用整合Spring Data的方式進行統(tǒng)一處理,Springboot會幫我們添加大量自動配置,屏蔽了很多設置。并引入各種xxxTemplate,xxxRepository來簡化我們對數(shù)據(jù)訪問層的操作。對我們來說只需要進行簡單的設置即可。這篇就來學習springboot整合JDBC,mybatis、JPA。
          我們需要用什么數(shù)據(jù)訪問,就引入相關的start進行開發(fā)。
          二、JDBC
          jdbc是我們最先學習的一個數(shù)據(jù)庫框架,SpringBoot也進行了相應整合.
          2.1、 引入依賴
          <!--JDBC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--mysql 驅(qū)動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

          2.2、數(shù)據(jù)源配置
          我們可以做個測試:
          @Autowiredprivate DataSource dataSource;
          @Testpublic void test() throws SQLException { System.out.println(dataSource.getClass()); Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close();}

          輸出為:com.zaxxer.hikari.HikariDataSource
          說明默認數(shù)據(jù)源是com.zaxxer.hikari.HikariDataSource,而在springboot 2.0之前為org.apache.tomcat.jdbc.pool.DataSource。我們也可以通過改變spring.datasource.type 屬性來更改我們想自定義的數(shù)據(jù)源。數(shù)據(jù)源的相關配置都在DataSourceProperties,我們可以參考這個類進行配置。
          2.3、DataSourceInitializer
          DataSourceInitializer這里面有兩個方法runSchemaScripts()可以運行建表語句,runDataScripts()可以運行插入數(shù)據(jù)的sql語句。
          默認使用schema-.sql創(chuàng)建建表語句,用data-.sql插入數(shù)據(jù)語句,當然我們也可以自己配置:
          spring:datasource:schema:- classpath:department.sql

          2.4、操作數(shù)據(jù)庫
          由于spingboot已經(jīng)幫我們自動配置了,那我們可以直接使用JdbcTemplate進行數(shù)據(jù)庫操作:
          @AutowiredJdbcTemplate jdbcTemplate;
          @Testpublic void jdbcTest(){ List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select * from user "); System.out.println(mapList.get(0));}

          結果:{id=1, username=王五, birthday=null, sex=2, address=null}
          三、整合Druid數(shù)據(jù)源
          上面講到我們有默認的數(shù)據(jù)源,但一般情況我們還是會使用阿里提供的Druid數(shù)據(jù)源,因為Druid提供的功能更多,并且能夠監(jiān)控統(tǒng)計,這個時候我們需要先引入pom依賴,然后將spring.datasource.type 修改:
          <!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency>

          Druid的常用配置如下:
          type: com.alibaba.druid.pool.DruidDataSource#   數(shù)據(jù)源其他配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#   配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

          配置之后不會立刻生效,我們還需要編寫配置類:
          @Configurationpublic class DruidConfig {
          @ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druid(){return new DruidDataSource(); }}

          再次運行上面查詢數(shù)據(jù)源的方法,可以得到如下結果:
          注:必須引入日志依賴,否則會報錯
          <!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

          我們在加上Druid的監(jiān)控配置:
          //配置Druid的監(jiān)控//1、配置一個管理后臺的Servlet@Beanpublic ServletRegistrationBean statViewServlet(){    ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");    Map<String,String> initParams = new HashMap<>();
          initParams.put("loginUsername","admin"); initParams.put("loginPassword","123456"); initParams.put("allow","");//默認就是允許所有訪問 initParams.put("deny","192.168.15.21");
          bean.setInitParameters(initParams);return bean;}

          //2、配置一個web監(jiān)控的filter@Beanpublic FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter());
          Map<String,String> initParams = new HashMap<>(); initParams.put("exclusions","*.js,*.css,/druid/*");
          bean.setInitParameters(initParams);
          bean.setUrlPatterns(Arrays.asList("/*"));
          return bean;}

          這樣我們可以直接通過后臺監(jiān)控數(shù)據(jù)源訪問情況。
          四、Mybatis
          第一步也是引入依賴:
          <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency>

          也導入Druid數(shù)據(jù)源,并加入之前學習Mybatis時用到的實體,而后就可以進行測試,Mybatis的使用也有兩種方法,注解版和配置文件版,注解版用的很少,一般都是配置文件。
          4.1、注解版
          @Mapperpublic interface DepartmentMapper {@Select("select * from department where id=#{id}")Department getDeptById(Integer id);
          @Delete("delete from department where id=#{id}")int deleteDeptById(Integer id);
          @Options(useGeneratedKeys = true,keyProperty = "id")@Insert("insert into department(departmentName) values(#{departmentName})")int insertDept(Department department);
          @Update("update department set departmentName=#{departmentName} where id=#{id}")int updateDept(Department department);}

          測試:
          @AutowiredUserMapper userMapper;
          @AutowiredDepartmentMapper departmentMapper;
          @Testpublic void mybatisTest(){ Department deptById = departmentMapper.getDeptById(1); System.out.println(deptById);
          }

          結果:Department(id=1, departmentName=AA)
          4.2、配置文件版
          使用配置文件版方式也很簡單,也是先新增一個接口:
          @Mapperpublic interface UserMapper {User queryUserById(Integer id);}

          然后新增一個全局配置文件:SqlMapConfig.xml
          <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>
          </configuration>

          里面暫時什么配置都不需要,然后再引入相應的XXXMapper.xml文件,最后在配置文件中加上掃描文件配置即可
          mybatis:  config-location: classpath:mybatis/SqlMapConfig.xml  mapper-locations: classpath:mybatis/mapper/*.xml

          UserMapper.xml內(nèi)容:
          <?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"><mapper namespace="com.yuanqinnan.mapper.UserMapper"><select id="queryUserById" parameterType="int" resultType="com.yuanqinnan.model.User">    SELECT * FROM `user`where id=#{id}</select>
          </mapper>

          測試:
          @Testpublic void mybatisTest(){    Department deptById = departmentMapper.getDeptById(1);    System.out.println(deptById);    User userById = userMapper.queryUserById(1);    System.out.println(userById);}

          Mybatis的配置就是這么簡單,基本不需要額外配置。
          五、JPA
          JDBC和Mybatis我們之前都學習過,SpringBoot只不過是幫我們整合配置,而JPA我們之前沒有接觸過,所以還是要先解釋下,了解JPA之前我們先了解Spring Data:
          Spring Data 項目的目的是為了簡化構建基于Spring 框架應用的數(shù)據(jù)訪問技術,包括非關系數(shù)據(jù)庫、Map-Reduce 框架、云數(shù)據(jù)服務等等;另外也包含對關系數(shù)據(jù)庫的訪問支持。
          Spring Data 主要特點是:
          SpringData為我們提供使用統(tǒng)一的API來對數(shù)據(jù)訪問層進行操作;這主要是Spring Data Commons項目來實現(xiàn)的。Spring Data Commons讓我們在使用關系型或者非關系型數(shù)據(jù)訪問技術時都基于Spring提供的統(tǒng)一標準,標準包含了CRUD(創(chuàng)建、獲取、更新、刪除)、查詢、排序和分頁的相關操作。
          SpringData幫我們封裝了數(shù)據(jù)庫操作,我們只需要進程接口,就可以進行操作,SpringData有如下統(tǒng)一的接口
          Repository :統(tǒng)一接口 RevisionRepository<t, id="" extends="" serializable,="" n="" number="" &="" comparable >:基于樂觀鎖機制 CrudRepository :基本CRUD操作 PagingAndSortingRepository :基本CRUD及分頁
          我們要使用JPA,就是繼承JpaRepository,我們只要按照它的命名規(guī)范去對命名接口,便可以實現(xiàn)數(shù)據(jù)庫操作功能,這樣說有些抽象,還是用一個例子來說明:
          第一步:引入依賴
          <!-- springdata jpa依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>

          第二步:編寫表對應實體:
          //使用JPA注解配置映射關系@Entity //告訴JPA這是一個實體類(和數(shù)據(jù)表映射的類)@Table(name = "order") //@Table來指定和哪個數(shù)據(jù)表對應;order;@Datapublic class Order {
          @Id //這是一個主鍵@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主鍵private Integer id;
          @Column(name = "user_Id")private Integer userId;//這是和數(shù)據(jù)表對應的一個列@Column(name="number",length = 32)private String number;// 訂單創(chuàng)建時間,省略默認列名就是屬性名private Date createtime;// 備注private String note;}

          第三步:編寫倉庫接口:
          @Repositorypublic interface OrderRepository extends JpaRepository<Order, Integer> {}

          這個時候OrderRepository 已經(jīng)有了很多實現(xiàn)好的方法,我們只要跟著調(diào)用即可
          測試:
          @AutowiredOrderRepository orderRepository;
          @Testpublic void jpaTest(){ List<Order> all = orderRepository.findAll(); System.out.println(all);
          }

          一個簡單的JPA實現(xiàn)完成,當然JPA的內(nèi)容很多,這里只是一個非常簡單的例子,要進一步的學習的話還是要去看官方文檔。

          想進大廠的小伙伴請注意,

          大廠面試的套路很神奇,

          早做準備對大家更有好處,

          埋頭刷題效率低,

          看面經(jīng)會更有效率!

          小編準備了一份大廠常問面經(jīng)匯總集

          剩下的就不會給大家一展出來了,以上資料按照一下操作即可獲得

          ——將文章進行轉發(fā)評論關注公眾號【Java烤豬皮】,關注后繼續(xù)后臺回復領取口令“ 666 ”即可免費領文章取中所提供的資料。




          往期精品推薦



          騰訊、阿里、滴滴后臺試題匯集總結 — (含答案)

          面試:史上最全多線程序面試題!

          最新阿里內(nèi)推Java后端試題

          JVM難學?那是因為你沒有真正看完整這篇文章


          結束


          關注作者微信公眾號 — 《JAVA烤豬皮》


          了解了更多java后端架構知識以及最新面試寶典



          看完本文記得給作者點贊+在看哦~~~大家的支持,是作者來源不斷出文的動力~

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  女人18片毛片90分钟视频播放 | 色老板最新网址 | 授乳奶水x88MAV | 欧美成人性网站 | 午夜在线成人视频 |