新聞中心
在使用Spring+SpringMVC+MyBatis(S)框架進(jìn)行開(kāi)發(fā)時(shí),經(jīng)常會(huì)遇到讀取數(shù)據(jù)庫(kù)出現(xiàn)亂碼的情況。這是因?yàn)樵跀?shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)時(shí),如果字符集和應(yīng)用程序不一致,就會(huì)引發(fā)亂碼問(wèn)題。本文將從以下幾個(gè)方面介紹。

青山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
一、檢查數(shù)據(jù)庫(kù)字符集
首先需要檢查數(shù)據(jù)庫(kù)的字符集,確保數(shù)據(jù)庫(kù)的字符集和應(yīng)用程序的字符集一致。一般來(lái)說(shuō),UTF-8是最常用的字符集,建議將數(shù)據(jù)庫(kù)的字符集設(shè)置為UTF-8??梢酝ㄟ^(guò)執(zhí)行以下SQL語(yǔ)句來(lái)查看數(shù)據(jù)庫(kù)的字符集:
“`
show variables like ‘%character%’;
“`
如果發(fā)現(xiàn)數(shù)據(jù)庫(kù)的字符集不是UTF-8,可以通過(guò)以下SQL語(yǔ)句來(lái)修改:
“`
alter database [database_name] character set utf8;
“`
二、配置MyBatis的字符集
MyBatis是一個(gè)持久層框架,在讀取數(shù)據(jù)庫(kù)的時(shí)候也需要將字符集設(shè)置為UTF-8??梢酝ㄟ^(guò)在MyBatis的配置文件中添加以下代碼來(lái)設(shè)置字符集:
“`
“`
這樣設(shè)置之后,在MyBatis讀取數(shù)據(jù)時(shí),就會(huì)將字符集設(shè)置為UTF-8。
三、在數(shù)據(jù)庫(kù)連接URL上添加字符集信息
除了在MyBatis的配置文件中設(shè)置字符集外,還可以在連接URL上添加字符集信息??梢詫⑦B接URL寫(xiě)成以下形式:
“`
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
“`
其中的useUnicode、characterEncoding和autoReconnect都是設(shè)置連接屬性的參數(shù)。設(shè)置useUnicode=true和characterEncoding=utf-8可以將字符集設(shè)置為UTF-8,設(shè)置autoReconnect=true可以自動(dòng)重新連接。
四、在Spring配置文件中設(shè)置字符集
Spring框架可以讓我們更加方便地管理和配置應(yīng)用程序,在讀取數(shù)據(jù)庫(kù)時(shí),也可以將字符集設(shè)置為UTF-8。可以在Spring的配置文件中通過(guò)以下方式來(lái)設(shè)置字符集:
“`
“`
在url中添加了useUnicode=true&characterEncoding=UTF-8,就可以將字符集設(shè)置為UTF-8了。
五、設(shè)置Tomcat的字符集
除了在應(yīng)用程序中設(shè)置字符集外,還可以在Tomcat中設(shè)置字符集??梢詫omcat的server.xml配置文件中的Connector標(biāo)簽中的URIEncoding屬性設(shè)置為UTF-8,表示使用UTF-8字符集編碼URI。這樣就可以在Tomcat中設(shè)置字符集了。
“`
connectionTimeout=”20230″
redirectPort=”8443″ URIEncoding=”UTF-8″/>
“`
在使用S框架進(jìn)行開(kāi)發(fā)時(shí),遇到讀取數(shù)據(jù)庫(kù)出現(xiàn)亂碼的情況,可以從數(shù)據(jù)庫(kù)、MyBatis、連接URL、Spring和Tomcat這五個(gè)方面來(lái)解決問(wèn)題。通過(guò)設(shè)置字符集,可以讓?xiě)?yīng)用程序和數(shù)據(jù)庫(kù)的字符集保持一致,避免出現(xiàn)亂碼問(wèn)題。同時(shí),也可以提高應(yīng)用程序的性能和可維護(hù)性,讓開(kāi)發(fā)更加簡(jiǎn)單方便。
相關(guān)問(wèn)題拓展閱讀:
- s框架是什么意思
- s框架畢業(yè)答辯常見(jiàn)問(wèn)題有哪些, 例如s如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接?
- S框架下怎么把數(shù)據(jù)庫(kù)數(shù)據(jù)動(dòng)態(tài)顯示到前端頁(yè)面?
s框架是什么意思
s框架的意思為:spring MVC ,spring和mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式。
S框架的使用方法:
先寫(xiě)實(shí)體類entity,定義對(duì)象的祥絕屬性,(可以參照數(shù)據(jù)庫(kù)中表的字段來(lái)設(shè)置,數(shù)謹(jǐn)宴姿據(jù)庫(kù)的設(shè)計(jì)應(yīng)該在所有編碼開(kāi)始之祥段前)。
寫(xiě)Mapper.xml(Mybatis),其中定義你的功能,對(duì)應(yīng)要對(duì)數(shù)據(jù)庫(kù)進(jìn)行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
寫(xiě)Mapper.java,將Mapper.xml中的操作按照id映射成Java函數(shù)。
寫(xiě)Service.java,為控制層提供服務(wù),接受控制層的參數(shù),完成相應(yīng)的功能,并返回給控制層。
寫(xiě)Controller.java,連接頁(yè)面請(qǐng)求和服務(wù)層,獲取頁(yè)面請(qǐng)求的參數(shù),通過(guò)自動(dòng)裝配,映射不同的URL到相應(yīng)的處理函數(shù),并獲取參數(shù),對(duì)參數(shù)進(jìn)行處理,之后傳給服務(wù)層。
S框架的原理:
SpringMVC:
1.客戶端發(fā)送請(qǐng)求到DispacherServlet(分發(fā)器)。
2.由DispacherServlet控制器查詢HanderMapping,找到處理請(qǐng)求的Controller。
3.Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView。
4.DispacherSerclet查詢視圖解析器,找到ModelAndView指定的視圖。
5.視圖負(fù)責(zé)將結(jié)果顯示到客戶端。
我們平時(shí)開(kāi)發(fā)接觸最多的估計(jì)就是IOC容器,它可以裝載bean(也就是我們Java中的類,當(dāng)然也包括service dao里面的),有了這個(gè)機(jī)制,我們就不用在每次使用這個(gè)類的時(shí)候?yàn)樗跏蓟?,很少看到關(guān)鍵字new。另外spring的aop,事務(wù)管理等等都是我們經(jīng)常用到的。
s框架畢業(yè)答辯常見(jiàn)問(wèn)題有哪些, 例如s如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接?
一、Spring常見(jiàn)問(wèn)題
1、Spring 在s中起什么作用?
Spring:輕量級(jí)框架
作用:Bean工廠,用來(lái)管理Bean的
生命周期
和框架集成。
兩大核心:
IOC/DI(控制反轉(zhuǎn)/依賴注入) :把dao依賴注入到service層,service層反轉(zhuǎn)給action層,Spring頂層容器為BeanFactory
AOP:面向切面編程
2、Spring的事務(wù)?
編程式事務(wù)管理:編程方式管理事務(wù),極大靈活性,難維護(hù)。
聲明式事務(wù)管理:可以將業(yè)務(wù)代碼和事務(wù)管理分離,用注解和xml配置來(lái)管理事務(wù)。
3、IOC 在項(xiàng)目中的作用?
作用:Ioc解決對(duì)象之間的依賴問(wèn)題,把所有Bean的依賴關(guān)系通過(guò)
配置文件
或注解關(guān)聯(lián)起來(lái),降低了
耦合度
。
4、Spring的配置文件中的內(nèi)容?
開(kāi)啟事務(wù)注解驅(qū)動(dòng)
事務(wù)管理器
開(kāi)啟注解功能,并配置掃描包
配置數(shù)據(jù)庫(kù)
配置SQL會(huì)話工廠,別名,映射文件
不用編寫(xiě)Dao層的實(shí)現(xiàn)類
5、Spring下的注解?
注冊(cè)
@Controller @Service @Component
注入
@Autowired
@Resource
請(qǐng)求地址
@RequestMapping
返回具體
數(shù)據(jù)類型
而非跳轉(zhuǎn)
@ResponseBody
6、Spring DI 的三種方式?
構(gòu)造器注入:通過(guò)
構(gòu)造方法
初始化
setter方法注入:通過(guò)setter方法初始化
接口注入
7、Spring主要使用了什么模式?
工廠模式
:每個(gè)Bean的創(chuàng)建通過(guò)方法
單例模式
:默認(rèn)的每個(gè)Bean的作用域都是單例
代理模式
:關(guān)于Aop的實(shí)現(xiàn)通過(guò)代理模式
8、IOC,AOP的實(shí)現(xiàn)原理?
IOC:通過(guò)反射機(jī)制生成對(duì)象注入
AOP:動(dòng)態(tài)代理
二、SpringMvc常見(jiàn)問(wèn)題
1、SpringMvc 的控制器是不是單例模式,如果是,有什么問(wèn)題,怎么解決?
問(wèn)題:?jiǎn)卫J?,?/p>
多線程
訪問(wèn)時(shí)有
線程安全
問(wèn)題
解決方法:不要用同步,在控制器里面不能寫(xiě)字段
2、SpringMvc 中控制器的注解?
@Controller:該注解表明該類扮演控制器的角色薯轎
3、@RequestMapping 注解用在類上的作用?
作用:用來(lái)映射一個(gè)URL到一個(gè)類或者一個(gè)特定的處理方法上
4、前臺(tái)多個(gè)參數(shù),這些參數(shù)都是一個(gè)對(duì)象,快速得到對(duì)象?
方法:直接在方法中聲明這個(gè)對(duì)象,SpringMvc就自動(dòng)把屬性賦值到這個(gè)對(duì)象里面
5、SpringMvc中函數(shù)的
返回值
?
String,ModelAndView,List,Set 等
一般String,Ajax請(qǐng)求,返回一個(gè)List
6、SpringMvc中的轉(zhuǎn)發(fā)和重定向?
轉(zhuǎn)發(fā): return:”hello”
重定向 :return:”redirect:hello.jsp”
7、SpringMvc和Ajax之間的相互調(diào)用?
通過(guò)JackSon框架把java里面對(duì)象直接轉(zhuǎn)換成js可識(shí)別的json對(duì)象,具體步驟如下:
1、加入JackSon.jar
2、在配置文件中配置json的映射
3、在接受Ajax方法里面直接返回Object,list等,方法前面需要加上注解明廳@ResponseBody
8、SpringMvc的工作流程圖?
請(qǐng)點(diǎn)擊輸入圖片描述
1、DispatcherServlet前端控制器接收發(fā)過(guò)來(lái)的請(qǐng)求,交給HandlerMapping處理器映射器
2、HandlerMapping處理器映射器,根據(jù)請(qǐng)求路徑找到相應(yīng)的HandlerAdapter處理器
適配器
(處理器適配器就是那些攔截器或Controller)
3、HandlerAdapter處理器適配器,處理一些功能請(qǐng)求,返回一個(gè)ModelAndView對(duì)象(包括模型數(shù)據(jù)數(shù)槐肆、邏輯視圖名)
4、ViewResolver視圖解析器,先根據(jù)ModelAndView中設(shè)置的View解析具體視圖
5、然后再將Model模型中的數(shù)據(jù)渲染到View上
9、Struts2 和 SpringMvc的區(qū)別?
入口不同:
Struts2:filter過(guò)濾器
SpringMvc:一個(gè)Servlet即前端控制器
開(kāi)發(fā)方式不同:
Struts2:基于類開(kāi)發(fā),傳遞參數(shù)通過(guò)類的屬性,只能設(shè)置為多例
SpringMvc:基于方法開(kāi)發(fā)(一個(gè)url對(duì)應(yīng)一個(gè)方法),請(qǐng)求參數(shù)傳遞到方法形參,可以為單例也可以為多例(建議單例)
請(qǐng)求方式不同:
Struts2:值棧村塾請(qǐng)求和響應(yīng)的數(shù)據(jù),通過(guò)OGNL存取數(shù)據(jù)
SpringMvc:通過(guò)參數(shù)解析器將request請(qǐng)求內(nèi)容解析,給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對(duì)象,最后又將ModelAndView中的模型數(shù)據(jù)通過(guò)request域傳輸?shù)巾?yè)面,jsp視圖解析器默認(rèn)使用的是jstl。
三、Mybatis常見(jiàn)問(wèn)題
1、Ibatis和Mybatis?
Ibatis:2023年,apache的Ibatis框架停止更新,并移交給了google團(tuán)隊(duì),同時(shí)更名為MyBatis。從2023年后Ibatis在沒(méi)更新過(guò),徹底變成了一個(gè)孤兒框架。一個(gè)沒(méi)人維護(hù)的框架注定被mybatis拍在沙灘上。
Mybatis:Ibatis的升級(jí)版本。
2、什么是Mybatis的接口綁定,有什么好處?
Mybatis實(shí)現(xiàn)了DAO接口與xml映射文件的綁定,自動(dòng)為我們生成接口的具體實(shí)現(xiàn),使用起來(lái)變得更加省事和方便。
3、什么情況用注解,什么情況用xml綁定?
注解使用情況:Sql語(yǔ)句簡(jiǎn)單時(shí)
xml綁定使用情況:xml綁定 (@RequestMap用來(lái)綁定xml文件)
4、Mybatis在核心處理類叫什么?
SqlSession
5、查詢表名和返回實(shí)體Bean對(duì)象不一致,如何處理?
映射鍵值對(duì)即可
column:數(shù)據(jù)庫(kù)中表的列名
property:實(shí)體Bean中的屬性名
6、Mybatis的好處?
把Sql語(yǔ)句從Java中獨(dú)立出來(lái)。
封裝了底層的JDBC,API的調(diào)用,并且能夠?qū)⒔Y(jié)果集自動(dòng)轉(zhuǎn)換成JavaBean對(duì)象,簡(jiǎn)化了Java數(shù)據(jù)庫(kù)編程的重復(fù)工作。
自己編寫(xiě)Sql語(yǔ)句,更加的靈活。
入?yún)o(wú)需用對(duì)象封裝(或者map封裝),使用@Param注解
7、Mybatis配置一對(duì)多?
property:屬性名
column:共同列
ofType:中元素的類型
select:要連接的查詢
8、Mybatis配置一對(duì)一?
property:屬性名
select:要連接的查詢
column:共同列
javaType:中元素的類型
9 、${} 和 #{}的區(qū)別?
${}:預(yù)編譯處理,把${}直接替換成變量的值,不做任何轉(zhuǎn)換。
#{}:
字符串
替換,sql中的#{}替換成?,有效的防止Sql語(yǔ)句注入。
總結(jié):一般用#{}來(lái)進(jìn)行列的代替
10、獲取上一次自動(dòng)生成的
主鍵
值?
select last _insert_id()
11、Mybatis如何分頁(yè),分頁(yè)原理?
RowBounds對(duì)象分頁(yè)
在Sql內(nèi)直接書(shū)寫(xiě),帶有物理分頁(yè)
12、Mybatis工作原理?
請(qǐng)點(diǎn)擊輸入圖片描述
原理:
通過(guò)SqlSessionFactoryBuilder從mybatis-config.xml配置文件中構(gòu)建出SqlSessionFactory。
SqlSessionFactory開(kāi)啟一個(gè)SqlSession,通過(guò)SqlSession實(shí)例獲得Mapper對(duì)象并且運(yùn)行Mapper映射的Sql語(yǔ)句。
完成數(shù)據(jù)庫(kù)的CRUD操作和事務(wù)提交,關(guān)閉SqlSession。
S框架下怎么把數(shù)據(jù)庫(kù)數(shù)據(jù)動(dòng)態(tài)顯示到前端頁(yè)面?
總結(jié)一下你的問(wèn)題,可以分為以下幾點(diǎn)。
1、怎么使數(shù)據(jù)庫(kù)中的數(shù)據(jù)動(dòng)態(tài)的在前端顯示?
可以通過(guò)ajax的局部刷新來(lái)實(shí)現(xiàn)前端頁(yè)面的動(dòng)態(tài)變化顯示,比如選擇不同的條件,頁(yè)面相應(yīng)的顯示不同的結(jié)果。
2、怎么查詢數(shù)據(jù)庫(kù)?
因?yàn)槟闶褂昧藄框架,所以你可以使用mybatis的mapper功能來(lái)進(jìn)行查詢,而在Mapper里面寫(xiě)好正確的SQL查詢語(yǔ)句就可以了,對(duì)于多個(gè)數(shù)據(jù)庫(kù)中的表顯示在前端一個(gè)表格里神慧面的情況,可以通過(guò)表連接查詢,或者表之間的關(guān)系(比如一對(duì)多、一對(duì)一、多對(duì)多)來(lái)實(shí)現(xiàn),查詢結(jié)果選取前端需要顯示的列即可,這部分是數(shù)據(jù)庫(kù)上的知識(shí)。
3、頁(yè)面用靜態(tài)頁(yè)面還是動(dòng)態(tài)頁(yè)面?
靜態(tài)頁(yè)面(比如html)或者動(dòng)態(tài)頁(yè)面(比如jsp)都是可以的,如果用的ajax訪問(wèn),兩者區(qū)別可以忽略。
4、想查哪條數(shù)游掘答據(jù)就顯示哪條數(shù)據(jù)是怎么做到的?
不知道你有沒(méi)有學(xué)過(guò)數(shù)據(jù)庫(kù),如果學(xué)過(guò)的話,應(yīng)該知道數(shù)據(jù)庫(kù)中通過(guò)SQL的條件查詢可以過(guò)濾掉不需要的數(shù)據(jù),這樣子就可以根據(jù)查詢的條件來(lái)獲取自己想要顯示在頁(yè)面的數(shù)據(jù),然后顯示出來(lái)就可以了。
上面的東西,至少需要一個(gè)基本散租的了解,不然估計(jì)也看不懂我描述的是什么,如果看不懂的話,建議還是先學(xué)習(xí)一下下面列舉的這些東西的基礎(chǔ)知識(shí)再看:
Spring、Spring MVC、MyBatis、SQL、ajax、jQuery、json。
1、首先通過(guò)代碼獲取譽(yù)頃到數(shù)據(jù)里的數(shù)據(jù),$result = $this->service->getListData(); 這個(gè)方法就是獲取數(shù)據(jù)庫(kù)的數(shù)據(jù)的。
2、獲取到數(shù)據(jù)后,就可以在html代碼里輸出這些數(shù)據(jù)了,直接在html里嵌入一些php標(biāo)簽就行了,由于數(shù)據(jù)是一個(gè)數(shù)組,所以可以循環(huán)這個(gè)數(shù)組來(lái)輸出。
3、把數(shù)據(jù)顯腔擾示在table上,數(shù)組里每一條數(shù)據(jù)都顯示一行tr。
4、表格的之一個(gè)單元格我們顯示數(shù)據(jù)的id。
5、同樣表格的第二個(gè)單元格顯示數(shù)據(jù)的name。如果還有其他的數(shù)據(jù)要顯示,再添加td來(lái)顯示就行了。
6、運(yùn)行頁(yè)面,現(xiàn)在就可以看到頁(yè)面顯示出了后臺(tái)數(shù)伍虛旦據(jù)庫(kù)獲取到的數(shù)據(jù)了。
關(guān)于s讀取數(shù)據(jù)庫(kù)數(shù)據(jù)是亂碼的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站營(yíng)銷推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽(yáng)服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽(yáng)服務(wù)器機(jī)房服務(wù)器托管租用。
標(biāo)題名稱:如何解決S中讀取數(shù)據(jù)庫(kù)亂碼問(wèn)題 (s讀取數(shù)據(jù)庫(kù)數(shù)據(jù)是亂碼)
URL鏈接:http://www.dlmjj.cn/article/coipdhh.html


咨詢
建站咨詢
