一、快速开始一个 MyBatis项目(详解)
1.0 概述
1.三層架構(gòu)
界面層: 和用戶打交道的, 接收用戶的請求參數(shù), 顯示處理結(jié)果的。(jsp ,html ,servlet)
業(yè)務(wù)邏輯層: 接收了界面層傳遞的數(shù)據(jù),計(jì)算邏輯,調(diào)用數(shù)據(jù)庫,獲取數(shù)據(jù)
數(shù)據(jù)訪問層: 就是訪問數(shù)據(jù)庫, 執(zhí)行對(duì)數(shù)據(jù)的查詢,修改,刪除等等的。
2.框架
框架是一個(gè)舞臺(tái), 一個(gè)模版
模版:
1. 規(guī)定了好一些條款,內(nèi)容。
2. 加入自己的東西
框架是一個(gè)模塊
1.框架中定義好了一些功能。這些功能是可用的。
2.可以加入項(xiàng)目中自己的功能, 這些功能可以利用框架中寫好的功能。
框架是一個(gè)軟件,半成品的軟件,定義好了一些基礎(chǔ)功能, 需要加入你的功能就是完整的。
基礎(chǔ)功能是可重復(fù)使用的,可升級(jí)的。
框架特點(diǎn):
1. 框架一般不是全能的, 不能做所有事情
2. 框架是針對(duì)某一個(gè)領(lǐng)域有效。 特長在某一個(gè)方面,比如mybatis做數(shù)據(jù)庫操作強(qiáng),但是他不能做其它的。
3. 框架是一個(gè)軟件
mybatis框架
一個(gè)框架,早期叫做ibatis, 代碼在github。
mybatis是 MyBatis SQL Mapper Framework for Java (sql映射框架)
1)sql mapper :sql映射
可以把數(shù)據(jù)庫表中的一行數(shù)據(jù) 映射為 一個(gè)java對(duì)象。
一行數(shù)據(jù)可以看做是一個(gè)java對(duì)象。操作這個(gè)對(duì)象,就相當(dāng)于操作表中的數(shù)據(jù)
2)Data Access Objects(DAOs) : 數(shù)據(jù)訪問 , 對(duì)數(shù)據(jù)庫執(zhí)行增刪改查。
mybatis提供了哪些功能:
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt(“id”));
stu.setName(rs.getString(“name”));
stu.setAge(rs.getInt(“age”));
//從數(shù)據(jù)庫取出數(shù)據(jù)轉(zhuǎn)為 Student 對(duì)象,封裝到 List 集合
stuList.add(stu);
}
開發(fā)人員做的是: 提供sql語句
最后是: 開發(fā)人員提供sql語句–mybatis處理sql—開發(fā)人員得到List集合或java對(duì)象(表中的數(shù)據(jù))
總結(jié):
mybatis是一個(gè)sql映射框架,提供的數(shù)據(jù)庫的操作能力。增強(qiáng)的JDBC,
使用mybatis讓開發(fā)人員集中精神寫sql就可以了,不必關(guān)心Connection,Statement,ResultSet
的創(chuàng)建,銷毀,sql的執(zhí)行。
1.1 使用 Mybatis 準(zhǔn)備
下載 mybatis
https://github.com/mybatis/mybatis-3/releases
1.2 搭建 MyBatis 開發(fā)環(huán)境
(1) 創(chuàng)建 mysql 數(shù)據(jù)庫和表
數(shù)據(jù)庫名 ssm ;表名 student
CREATE TABLE `student` (`id` int(11) NOT NULL ,`name` varchar(255) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(2) 創(chuàng)建 maven 工程
添加模塊:
創(chuàng)建 maven 工程,信息如下:
選擇模板:
加入
這兩行代碼
目的:加速M(fèi)aven項(xiàng)目的加載
然后點(diǎn)擊 完成->應(yīng)用 即可
新建一個(gè)resources目錄,鼠標(biāo)右鍵該resources,選擇標(biāo)記目錄為并設(shè)置為Test Resources根
(3) 刪除默認(rèn)創(chuàng)建的 App 類文件
(4) 在pom.xml文件中加入 maven 坐標(biāo)
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--mybatis依賴--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><!--mysql驅(qū)動(dòng)--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.9</version></dependency></dependencies>(5) 在pom.xml文件中加入 maven 插件
<build><resources><resource><directory>src/main/java</directory><!--所在的目錄--><includes><!--包括目錄下的.properties,.xml 文件都會(huì)掃描到--><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>(6) 編寫 Student 實(shí)體類(setter,getter,toString)
創(chuàng)建包 com.zep.domain, 包中創(chuàng)建 Student 類
項(xiàng)目結(jié)構(gòu)如下所示:
Student.java文件:
package com.zep.domain; // 推薦和表名一樣,容易記憶 public class Student {// 定義屬性,目前要求是 屬性名和列名保持一致private Integer id;private String name;private String email;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", email='" + email + '\'' +", age=" + age +'}';} }(7) 編寫 Dao 接口 StudentDao
創(chuàng)建 com.zep.dao 包,創(chuàng)建 StudentDao 接口
StudentDao.java文件:
(8) 編寫 Dao 接口 Mapper 映射文件 StudentDao.xml
要求:
(9) 創(chuàng)建 MyBatis 主配置文件
項(xiàng)目 src/main 下創(chuàng)建 resources 目錄,設(shè)置 resources 目錄為 resources root
創(chuàng)建主配置文件:名稱為 mybatis.xml
說明:主配置文件名稱是自定義的,內(nèi)容如下:
(10) 創(chuàng)建測試類 MyBatisTest
src/test/java/com/zep/ 創(chuàng)建 MyBatisTest.java 文件
package com.zep;import com.zep.domain.Student; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test;import java.io.IOException; import java.io.InputStream; import java.util.List;public class TestMybatis {@Testpublic void testSelect() throws IOException {// 1.定義mybatis主配置文件的名稱,從類路徑的跟開始,也就是(target/classes)String config = "mybatis.xml";// 2.讀取這個(gè)config表示的文件InputStream in = Resources.getResourceAsStream(config);// 3.創(chuàng)建SqlSessionFactoryBulider對(duì)象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 4.創(chuàng)建SqlSessionFactorySqlSessionFactory factory = builder.build(in);// 5.【重要】獲取SqlSession對(duì)象,從SqlSessionFactory中獲取SqlSessionSqlSession sqlSession = factory.openSession();// 6.【重要】指定要執(zhí)行的sql語句的標(biāo)識(shí)。sql映射文件中的namespace + “.” + 標(biāo)簽的id值String sqlId = "com.zep.dao.StudentDao"+ "." +"selectStudents";// 7.執(zhí)行sql語句,通過sqlId找到語句List<Student> studentList = sqlSession.selectList(sqlId);// 8.輸出結(jié)果// studentList.forEach(student -> System.out.println(student));for (Student student : studentList) {System.out.println("查詢到的學(xué)生=" + student);}// 9.關(guān)閉SqlSession對(duì)象sqlSession.close();}//測試方法,測試功能@Testpublic void testInsert() throws IOException {//1.mybatis 主配置文件String config = "mybatis.xml";//2.讀取配置文件InputStream in = Resources.getResourceAsStream(config);//3.創(chuàng)建 SqlSessionFactory 對(duì)象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.獲取 SqlSessionSqlSession session = factory.openSession();//5.創(chuàng)建保存數(shù)據(jù)的對(duì)象Student student = new Student();student.setId(1005);student.setName("張麗");student.setEmail("zhangli@163.com");student.setAge(20);//6.執(zhí)行插入 insertint rows = session.insert("com.zep.dao.StudentDao.insertStudent", student);//7.提交事務(wù)session.commit();System.out.println("增加記錄的行數(shù):" + rows);//8.關(guān)閉 SqlSessionsession.close();}@Testpublic void testUpdate() throws IOException {//1.mybatis 主配置文件String config = "mybatis.xml";//2.讀取配置文件InputStream in = Resources.getResourceAsStream(config);//3.創(chuàng)建 SqlSessionFactory 對(duì)象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.獲取 SqlSessionSqlSession session = factory.openSession();//5.創(chuàng)建保存數(shù)據(jù)的對(duì)象Student student = new Student();student.setId(1005);//要修改的 idstudent.setAge(30); //要修改的年齡值//6.執(zhí)行更新 updateint rows = session.update("com.zep.dao.StudentDao.updateStudent", student);//7.提交事務(wù)session.commit();System.out.println("修改記錄的行數(shù):" + rows);//8.關(guān)閉 SqlSessionsession.close();}@Testpublic void testDelete() throws IOException {//1.mybatis 主配置文件String config = "mybatis.xml";//2.讀取配置文件InputStream in = Resources.getResourceAsStream(config);//3.創(chuàng)建 SqlSessionFactory 對(duì)象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.獲取 SqlSessionSqlSession session = factory.openSession();//5.刪除的 idint id = 1005;//6.執(zhí)行刪除 deleteint rows = session.delete("com.zep.dao.StudentDao.deleteStudent",id);//7.提交事務(wù)session.commit();System.out.println("修改記錄的行數(shù):"+rows);//8.關(guān)閉 SqlSessionsession.close();} }(11)運(yùn)行結(jié)果如下:
1.3總結(jié)
1.4開發(fā)中常見的問題
原因:target目錄下確實(shí)不存在StudentDao.xml文件,所有讀取不到
解決方案:在pom.xml文件中加入以下配置:
2. 讀取不到resources文件夾下的mybatis.xml文件
原因:沒有將resources文件夾標(biāo)記為Test resources 根
解決方案:
注意:如果以上兩種方法嘗試后,仍然存在讀取不到文件的問題,則使用以下方法
還不行的話,重構(gòu)工程:
還不行就刪除緩存,重啟IDEA:
最后還是不行的話,暴力解決,相當(dāng)于手動(dòng)讀取:
直接將項(xiàng)目目錄下的StudentDao.xml文件復(fù)制粘貼到classes目錄下對(duì)應(yīng)的位置
把mybatis.xml復(fù)制粘貼到classes目錄下
解決方案:
解決方案:手動(dòng)重新導(dǎo)入即可
重新導(dǎo)入成功后就能看見對(duì)應(yīng)的jar包了
總結(jié)
以上是生活随笔為你收集整理的一、快速开始一个 MyBatis项目(详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web框架——Flask系列之WTF表单
- 下一篇: art-template模板引擎详解