SSM架構———初識MyBatis
一.什麼是MyBatis?
MyBatis源自Apache的iBatis開源項目, 從iBatis3.x開始正式更名為MyBatis。它是一個優秀的持久層架構。
二.為什麼使用MyBatis?
為了和資料庫進行互動,通常的做法是将SQL語句寫在Java代碼中,SQL語句和Java代碼耦合在一起不利于後期維護修改,而MyBatis能夠幫助我們将SQL語句和Java代碼分離,友善了後期因需求變動而對SQL語句進行修改。(聯系properties檔案的作用)
三. 如何使用MyBatis
a、下載下傳MyBatis相應jar包:
https://github.com/mybatis/mybatis-3/releasesb、建立Java工程,導入MyBatis jar包(mybatis-3.4.4.jar)和資料庫驅動包
c、建立user_info表并添加資料(此處使用MySQL)
create table user_info(
id char(36) primary key,
user_name varchar(15) unique,
password varchar(15) not null
)
insert into user_info (id, user_name, password)
values ('3ddcf637-15a8-49d9-a378-b3fa2f2f9c65', 'Aimee', '1983_2560x');
values ('7eb9deed-ec87-416e-abb3-1a5a2ce819de', 'Cassie', 'xm@560_lq');
java代碼部分
方法一:
在src根目錄下建立名為config-mybatis.xml的XML File檔案,代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置資料庫連接配接資訊 -->
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="pro">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 注冊xml檔案 -->
<mappers>
<mapper resource="./student.xml"/>
</mappers>
在src根目錄下建立名為student.xml的XML File檔案,代碼如下:
<!-- id:唯一辨別;resultType:傳回值類型; -->
<select id="getNameById" resultType="java.lang.String">
select name from student where id=1
</select>
在com.jd.test包下建立Test類。代碼如下
public class Test {
public static void main(String[] args) {
try {
InputStream inputStream = Resources.getResourceAsStream("config-mybatis.xml");
//擷取SqlSessionFactory對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//擷取SqlSession對象,代表與資料庫的一次會話,用完需要關閉。注意:由于SqlSession為非線程安全的,是以該變量應定義為局部變量,不要定義成全局變量
SqlSession sqlSession = sqlSessionFactory.openSession();
String name = openSession.selectOne("com.jd.student.getNameById");
System.out.println(name);
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
說明:這種配置方式在為SQL語句傳資料時由于參數類型為Object,是以隐藏類型安全問題。
補充說明的是
新手學習mybatis編寫實體映射檔案時,eclipse或者STS或者其他會顯示紅叉叉,将滑鼠放在紅叉叉上會得到這樣的一串提示."The content of element type "mapper" must match "EMPTY". Children of type "comment" are not allowed."
這是因為定義實體映射xml檔案的文檔類型裡面的屬性不對的緣故。
如果是這樣寫的:沒有網絡時,mybatis-3-mapper.dtd加載不到,是以下面定義的元素标簽就會報紅叉叉。
改成這樣就好了
方法二:
建立接口檔案IStudentDao
public interface IStudentDao {
String getNameById();
在方法一的基礎上,
擷取了SqlSession對象後,try-catch中的代碼變更為
IStudentDao studentDao=sqlSession.getMapper(IStudentDao.class);
System.out.println(studentDao.getClass().getName());
String name=studentDao.getNameById();
System.out.println(name);
說明:這種方法不僅實作了SQL語句的分離,而且彌補了第一種方法的不足,是以推薦使用這種使用方式。
方法三:,
在方法二的的基礎上,
在接口檔案中,在接口方法之前添加注解
@Select("select name from student where id=1")
config-mybatis.xml的XML File檔案中,變更的内容,更改mapper的屬性,把之前的resource指向變為接口的路徑
說明:這種方式不僅使得SQL語句與Java代碼出現了耦合,而且不便于寫複雜的SQL語句,比如當依據多個字段查詢時,where關鍵字後面的條件是動态的,這時就不便于使用注解的方式寫該SQL語句。
作者:馬一鳴Ivk
來源:CSDN
原文:
https://blog.csdn.net/qq_44724446/article/details/94735943版權聲明:本文為部落客原創文章,轉載請附上博文連結!