日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

随堂笔记_2

發(fā)布時間:2024/10/6 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随堂笔记_2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MAVEN

maven三大組件如何協(xié)同

1.依賴

maven高級依賴原則之二:聲明順序依賴


2.mybatis高級映射column屬性如何傳遞多個值?

子查詢調用

3.因為當前應用的MyBatis3&Spring5這兩個版本較高版本框架對環(huán)境有要求

會造成以下影響

因為當前環(huán)境下的maven其實用的JDK版本不是1.8所以要設置jdk版本為1.8

  • 局部配置
pom.xml <modelVersion>4.0.0</modelVersion><groupId>com.yyjc.mybatis.spring</groupId><artifactId>mybatis_spring_xml</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
  • 全局配置
%maven-home%\conf\settings.xml <profile> <id>jdk18</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>

4.mybatis與spring整合,applicationContext.xml中設置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--1、關聯數據資源屬性文件--><context:property-placeholder location="classpath:config.properties"/><bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${conn.driverclass}"/><property name="url" value="${conn.url}"/><property name="username" value="${conn.username}"/><property name="password" value="${conn.userpass}"/></bean><!--3、配置sqlsessionfactory bean--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidDataSource"/><property name="mapperLocations" value="classpath*:*Mapper.xml"/><property name="typeAliasesPackage" value="com.yyjc.spring.pojo"/></bean>

5.spring配置-mybatis基于mapper接口動態(tài)代理生成實現類并注入

  • 使用mybaitis的mapper接口執(zhí)行sql語句時,我們拿到其實是接口實現類的代理,這個代理類是由mybatis使用動態(tài)代理生成的接口實現類。
  • mybatis通過配置 MapperFactoryBean來生成Mapper接口的代理。如:
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.example.mapper.UserMapper" /><!-- MapperFactoryBean繼承了SqlSessionDaoSupport,在此將sqlSessionFactory注入--><property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean>

上面這種配置的缺點是為每一個mapper接口都要加入配置,因此有了使用MapperScannerConfigurer,它會將包下的每個mapper接口都自動創(chuàng)建MapperFactoryBean,無需自己單獨添加,MapperScannerConfigurer的配置如下:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.mapper" /><!-- 無需在此指定SqlSessionFactory或SqlSessionTemplate , 因為 MapperScannerConfigurer將會創(chuàng)建MapperFactoryBean之后自動裝配。可以使用 sqlSessionFactoryBeanName或sqlSessionTemplateBeanName 屬性來設置正確的bean 名稱 --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean>

下面是一個更簡單的配置

<mybatis:scan base-package="com.example.mapper"/>

在此框架中獲取動態(tài)代理的實現類的bean的id:即為實現接口的駝峰法名稱,但也有問題

eg:接口(IEmplo),id(iEmplo),

? 以上會報錯:

現階段:不以大寫I開頭的遵循駝峰法即可

6.開啟事務的幾種方式:

sqlSessionFactory.sessionOpen(true); sqlSession.commit(); 基于注解開啟事務在要開啟事務的方法上用以下該方法級別的注解@Transactional(rollbackFor = Throwable.class)

7.基于mybatis注解實現關聯映射

1.pojo類要實現序列化接口(Serializable)

①【在主配置文件中的映射配置文件沒了怎么配置?】

基于mapper接口動態(tài)代理【把接口當映射配置文件看】

<mappers><mapper class="com.yyjc.mybatis.daoInter.EmployeeDaoInter"/></mappers>

class指向的是接口的字節(jié)碼文件

②【字段名和pojo屬性的關聯】

@Results(value={@Result(id=true,column="",property=""),@Result(column="",property=""),@Result(column="",property="")} )

③@Results中字段名和pojo已經關聯了如何重用呢?

在本類中重用

在本類中的其它方法重用(在@Results中設置id[唯一標識符],在想要重用此注解的方法外用@ResultMap其值等于id即可[value=“id”])注:其他類引用時只能是其方法名

/*根據員工編號查詢員工信息*/@Select(value="select * from employees where employee_id=#{emId}")@Results(id = "selectOne",value ={@Result(id=true,column = "employee_id",property = "employeeId"),@Result(column = "first_name",property = "firstName"),............})Employee selectOne(int emId);@Select(value="select * from employees where employee_id=#{emId}")@ResultMap(value = "selectOne")Employee test(int emId);
在其他類中重用
一對多分布式關聯映射查詢EmployeeDaoInter: @Select(value="select * from employees where department_id=#{departId}")@ResultMap( /*重用@Results */value = "commonsResult")List<Employee> selectEmployeeList(int departId);DepartmentDaoInter: @Result(column = "department_id",property = "employeesList",many = @Many(select = "com.yyjc.mybatis.daoInter.EmployeeDaoInter.selectEmployeeList"))

④注解中設置加載 的方式

全局加載(懶):第一步:在主配置文件開啟延時加載<setting name="lazyLoadingEnabled" value="true"/> <!--把積極加載改為按需加載--><setting name="aggressiveLazyLoading" value="false"/> 局部:懶加載:延時加載 @Result(column = "department_id",property = "employeesList",many = @Many(select = "com.yyjc.mybatis.daoInter.EmployeeDaoInter.selectEmployeeList",fetchType = FetchType.LAZY))} 立即加載:默認的加載方式@Result(column = "department_id",property = "employeesList",many = @Many(select = "com.yyjc.mybatis.daoInter.EmployeeDaoInter.selectEmployeeList",fetchType = FetchType.EAGER))}
延遲加載
1.全局延遲加載:在主配置文件的設置

2.局部延遲加載,在映射文件中設置

效果

8.mybatis基于映射配置文件二級緩存如何配置

①存配置

要正確的使用二級緩存,需完成如下配置的。

  • 在MyBatis的主配置文件中開啟二級緩存。name="cacheEnabled"value=“true”/>`
  • 在MyBatis的映射XML中配置cache或者 cache-ref 。
  • cache標簽用于聲明這個namespace使用二級緩存,并且可以自定義配置。

    <cache/>
    • type:cache使用的類型,默認是PerpetualCache,這在一級緩存中提到過。
    • eviction: 定義回收的策略,常見的有FIFO(先入先出),LRU。
    • flushInterval: 配置一定時間自動刷新緩存,單位是毫秒。
    • size: 最多緩存對象的個數。
    • readOnly: 是否只讀,若配置可讀寫,則需要對應的實體類能夠序列化。
    • blocking: 若緩存中找不到對應的key,是否會一直blocking,直到有對應的數據進入緩存。

    cache-ref代表引用別的命名空間的Cache配置,兩個命名空間的操作使用的是同一個Cache。

    <cache-ref namespace="mapper.StudentMapper"/>

    當開啟緩存后,數據的查詢執(zhí)行的流程就是 二級緩存 -> 一級緩存 -> 數據庫。

    ②緩存中相關屬性介紹

    select元素中的屬性

    ? useCache="true|or"默認為true

    一級緩存無效,二級緩存有效

    ?

    ? select flushC、e="默認為false"清理緩存,一二級緩存都會受到影響。

    insrt/delete/update flushCache="默認為true"清理緩存,一二級緩存都會受到影響。

    sqlSession.clearCache();只清除一級緩存

    第三方緩存配置文件的defaultCache元素的屬性意思

    ehcache.xml

    <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"><!-- 磁盤保存路徑 --><diskStore path="E:\" />defaultCache:默認的緩存配置信息,如果不加特殊說明,則所有對象按照此配置項處理maxElementsInMemory:設置了緩存的上限,最多存儲多少個記錄對象eternal:代表對象是否永不過期timeToIdleSeconds:最大的發(fā)呆時間timeToLiveSeconds:最大的存活時間overflowToDisk:是否允許對象被寫入到磁盤<defaultCachemaxElementsInMemory="10000"maxElementsOnDisk="10000000"eternal="false"overflowToDisk="true"timeToIdleSeconds="120"timeToLiveSeconds="120"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"></defaultCache> </ehcache>

    9.基于mybatis注解和主配置文件開啟和使用二級緩存

    1.在主配置文件中開啟緩存【默認是開啟的可以不寫】 <setting name="cacheEnabled" value="true"/>2.在要使用二級緩存的類前加入類注解開啟 二級緩存```開啟二級緩存 @CacheNamespace(blocking = true)

    序列化和反序列化

    Java序列化是指把Java對象轉換為字節(jié)序列的過程,而Java反序列化是指把字節(jié)序列恢復為Java對象的過程:(就像是加密和解密的過程一樣)

    10.pojo實現序列化

    是==對象永久化的一種機制==。

    確切的說應該是對象的序列化,一般程序在運行時,產生對象,這些對象隨著程序的停止運行而消失,但如果我們想把某些對象(因為是對象,所以有各自不同的特性)保存下來,==在程序終止運行后,這些對象仍然存在,可以在程序再次運行時讀取這些對象的值,或者在其他程序中利用這些保存下來的對象。==這種情況下就要用到對象的序列化。

    11.JDBC操作數據庫的步驟

    加載并注冊驅動Class.forName("com.mysql.jdbc.Driver"); 基于驅動管理類創(chuàng)建連接對象Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName",userName,passWord); 定義待執(zhí)行的SQL語句String sql="insert/delete/update"or"select"; 基于連接對象創(chuàng)建【預編譯】命令語句對象①Statement statement=conn.createStatement();②PreparedStatement statement=conn.prepareStatement(sql)

    12.數據庫事務

    ? 并發(fā):理解(一群人打一個球)

    ? 并行:理解(每個人都有一個球)

    ①把DOS命令窗口切換成MySQL窗口

    mysql -uroot -p0610mysql -u[數據庫用戶賬戶] -p[數據庫用戶密碼]退出mysql窗口返回DOS窗口quit/exit

    ②MySQL命令行操作常用命令【重點】

    1、通過命令行窗口連接MySQL服務mysql -uroot -proot;2、查看當前所有數據庫show databases;3、使用指定數據庫use databasename; (use myemployees)4、查看當前使用的數據庫select database();5、查看MySQL數據庫的引擎show engines;6、查看當前數據庫的所有表show tables;7、查看指定表的結構desc employees;8、查看當前自動提交事務的狀態(tài)show variables like 'autocommit'; (ON表啟用 ,OFF表禁用)9、設置當前自動事務的狀態(tài)set autocommit = 0 | 1 ;10、查看當前MySQL數據庫默認的事務隔離級別select @@tx_isolation;11、設置當前會話事務隔離級別set session|global transaction isolation level 隔離級別;

    ③事務的并發(fā)問題

    3.1 臟讀

    事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據

    3.2 不可重復讀

    事務 A 多次讀取同一數據,事務 B 在事務A多次讀取的過程中,

    對數據作了更新并提交,導致事務A多次讀取同一數據時,結果 不一致。

    3.3 幻讀

    系統(tǒng)管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,

    但是系統(tǒng)管理員B就在這個時候插入了一條具體分數的記錄,

    當系統(tǒng)管理員A改結束后發(fā)現還有一條記錄沒有改過來,

    就好像發(fā)生了幻覺一樣,這就叫幻讀。

    ④事務的隔離級別

    . 事務隔離級別存在的意義:在一定的層面上避免事務并發(fā)引發(fā)的問題

    4.1 讀未提交(read-uncommitted)

    4.2 已提交讀(不可重復讀)(read-committed)

    4.3 可重復讀(repeatable-read)

    4.4 串行化(serializable)(序列化)

    面試題:事務并發(fā)與事務隔離級別的聯系?

    答:因為有事務并發(fā)影響才會導致出現事務隔離級別來解決它;事務隔離級別能在一定層面上避免事務并發(fā)引發(fā)的問題

    --------------------------------------------------------| 事務隔離級別 | 臟讀 | 不可重復讀 | 幻讀 |------------------------------------------------------| 讀未提交(read-uncommitted)||||------------------------------------------------------| 不可重復讀(read-committed)||||------------------------------------------------------| 可重復讀(repeatable-read) ||||------------------------------------------------------| 串行化(serializable) |||| ------------------------------------------------------

    13.http中post和get的區(qū)別

    都是http(超文本傳輸協(xié)議)中瀏覽器與服務器交互的方法。

    HTTP協(xié)議中定義了瀏覽器和服務器進行交互的不同方法,基本方法有4種,分別是GET,POST,PUT,DELETE。這四種方法可以理解為,對服務器資源的查,改,增,刪。

    GET:從服務器上獲取數據,也就是所謂的查,僅僅是獲取服務器資源,不進行修改。

    POST:向服務器提交數據,這就涉及到了數據的更新,也就是更改服務器的數據。

    PUT:PUT的英文含義是放置,也就是向服務器新添加數據,就是所謂的增。

    DELETE:從字面意思也能看出,這種方式就是刪除服務器數據的過程。

    其實get和post的區(qū)別不大,比如說安全方面,get請求參數在URL地址上會直接暴露出來,post請求參數放在request body部分,通過F12也可以看見,他們的安全性其實差不多,再加上http底層是TCP/IP,所以get和post的底層也是TCP/IP,也就是說,post和get都是TCP鏈接,他們之間能做的事情是一樣的,你要給GET加上request body,給POST帶上url參數,技術上是完全行的通的。 但是由于HTTP的規(guī)定和瀏覽器/服務器的限制,導致他們在應用過程中體現一些不同:

    ? 如get產生一個TCP數據包,post產生兩個數據包。

    詳細的來說就是:對于get的請求,瀏覽器會把HTTP header和data一并發(fā)送過去,服務器響應200(返回數據)。而對于post的請求,瀏覽器會先發(fā)送header,服務器響應100 continue,瀏覽器再次發(fā)送data,服務器響應200。

    舉個例子來說就是:比如說送貨,get方式只需一趟就把貨送到。而post得跑兩趟,第一趟,過去跟服務器打個招呼,告訴他等會會送貨過來,讓他打開門迎接,第二趟,則是把貨送了過來。

    因為postT需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。其實這并不一定,

    \1. GET與POST都有自己的語義,不能隨便混用。

    \2. 據研究,在網絡環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視。而在網絡環(huán)境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優(yōu)點。

    \3. 并不是所有瀏覽器都會在POST中發(fā)送兩次包,Firefox就只發(fā)送一次。

    14.Redis如何設置密碼及驗證密碼?

    設置密碼:config set requirepass 123456

    授權密碼:auth 123456

    總結

    以上是生活随笔為你收集整理的随堂笔记_2的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。