一、快速开始一个 MyBatis项目(详解)
1.0 概述
1.三層架構
界面層: 和用戶打交道的, 接收用戶的請求參數, 顯示處理結果的。(jsp ,html ,servlet)
業務邏輯層: 接收了界面層傳遞的數據,計算邏輯,調用數據庫,獲取數據
數據訪問層: 就是訪問數據庫, 執行對數據的查詢,修改,刪除等等的。
2.框架
框架是一個舞臺, 一個模版
模版:
1. 規定了好一些條款,內容。
2. 加入自己的東西
框架是一個模塊
1.框架中定義好了一些功能。這些功能是可用的。
2.可以加入項目中自己的功能, 這些功能可以利用框架中寫好的功能。
框架是一個軟件,半成品的軟件,定義好了一些基礎功能, 需要加入你的功能就是完整的。
基礎功能是可重復使用的,可升級的。
框架特點:
1. 框架一般不是全能的, 不能做所有事情
2. 框架是針對某一個領域有效。 特長在某一個方面,比如mybatis做數據庫操作強,但是他不能做其它的。
3. 框架是一個軟件
mybatis框架
一個框架,早期叫做ibatis, 代碼在github。
mybatis是 MyBatis SQL Mapper Framework for Java (sql映射框架)
1)sql mapper :sql映射
可以把數據庫表中的一行數據 映射為 一個java對象。
一行數據可以看做是一個java對象。操作這個對象,就相當于操作表中的數據
2)Data Access Objects(DAOs) : 數據訪問 , 對數據庫執行增刪改查。
mybatis提供了哪些功能:
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt(“id”));
stu.setName(rs.getString(“name”));
stu.setAge(rs.getInt(“age”));
//從數據庫取出數據轉為 Student 對象,封裝到 List 集合
stuList.add(stu);
}
開發人員做的是: 提供sql語句
最后是: 開發人員提供sql語句–mybatis處理sql—開發人員得到List集合或java對象(表中的數據)
總結:
mybatis是一個sql映射框架,提供的數據庫的操作能力。增強的JDBC,
使用mybatis讓開發人員集中精神寫sql就可以了,不必關心Connection,Statement,ResultSet
的創建,銷毀,sql的執行。
1.1 使用 Mybatis 準備
下載 mybatis
https://github.com/mybatis/mybatis-3/releases
1.2 搭建 MyBatis 開發環境
(1) 創建 mysql 數據庫和表
數據庫名 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) 創建 maven 工程
添加模塊:
創建 maven 工程,信息如下:
選擇模板:
加入
這兩行代碼
目的:加速Maven項目的加載
然后點擊 完成->應用 即可
新建一個resources目錄,鼠標右鍵該resources,選擇標記目錄為并設置為Test Resources根
(3) 刪除默認創建的 App 類文件
(4) 在pom.xml文件中加入 maven 坐標
<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驅動--><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 文件都會掃描到--><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 實體類(setter,getter,toString)
創建包 com.zep.domain, 包中創建 Student 類
項目結構如下所示:
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
創建 com.zep.dao 包,創建 StudentDao 接口
StudentDao.java文件:
(8) 編寫 Dao 接口 Mapper 映射文件 StudentDao.xml
要求:
(9) 創建 MyBatis 主配置文件
項目 src/main 下創建 resources 目錄,設置 resources 目錄為 resources root
創建主配置文件:名稱為 mybatis.xml
說明:主配置文件名稱是自定義的,內容如下:
(10) 創建測試類 MyBatisTest
src/test/java/com/zep/ 創建 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.讀取這個config表示的文件InputStream in = Resources.getResourceAsStream(config);// 3.創建SqlSessionFactoryBulider對象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 4.創建SqlSessionFactorySqlSessionFactory factory = builder.build(in);// 5.【重要】獲取SqlSession對象,從SqlSessionFactory中獲取SqlSessionSqlSession sqlSession = factory.openSession();// 6.【重要】指定要執行的sql語句的標識。sql映射文件中的namespace + “.” + 標簽的id值String sqlId = "com.zep.dao.StudentDao"+ "." +"selectStudents";// 7.執行sql語句,通過sqlId找到語句List<Student> studentList = sqlSession.selectList(sqlId);// 8.輸出結果// studentList.forEach(student -> System.out.println(student));for (Student student : studentList) {System.out.println("查詢到的學生=" + student);}// 9.關閉SqlSession對象sqlSession.close();}//測試方法,測試功能@Testpublic void testInsert() throws IOException {//1.mybatis 主配置文件String config = "mybatis.xml";//2.讀取配置文件InputStream in = Resources.getResourceAsStream(config);//3.創建 SqlSessionFactory 對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.獲取 SqlSessionSqlSession session = factory.openSession();//5.創建保存數據的對象Student student = new Student();student.setId(1005);student.setName("張麗");student.setEmail("zhangli@163.com");student.setAge(20);//6.執行插入 insertint rows = session.insert("com.zep.dao.StudentDao.insertStudent", student);//7.提交事務session.commit();System.out.println("增加記錄的行數:" + rows);//8.關閉 SqlSessionsession.close();}@Testpublic void testUpdate() throws IOException {//1.mybatis 主配置文件String config = "mybatis.xml";//2.讀取配置文件InputStream in = Resources.getResourceAsStream(config);//3.創建 SqlSessionFactory 對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.獲取 SqlSessionSqlSession session = factory.openSession();//5.創建保存數據的對象Student student = new Student();student.setId(1005);//要修改的 idstudent.setAge(30); //要修改的年齡值//6.執行更新 updateint rows = session.update("com.zep.dao.StudentDao.updateStudent", student);//7.提交事務session.commit();System.out.println("修改記錄的行數:" + rows);//8.關閉 SqlSessionsession.close();}@Testpublic void testDelete() throws IOException {//1.mybatis 主配置文件String config = "mybatis.xml";//2.讀取配置文件InputStream in = Resources.getResourceAsStream(config);//3.創建 SqlSessionFactory 對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.獲取 SqlSessionSqlSession session = factory.openSession();//5.刪除的 idint id = 1005;//6.執行刪除 deleteint rows = session.delete("com.zep.dao.StudentDao.deleteStudent",id);//7.提交事務session.commit();System.out.println("修改記錄的行數:"+rows);//8.關閉 SqlSessionsession.close();} }(11)運行結果如下:
1.3總結
1.4開發中常見的問題
原因:target目錄下確實不存在StudentDao.xml文件,所有讀取不到
解決方案:在pom.xml文件中加入以下配置:
2. 讀取不到resources文件夾下的mybatis.xml文件
原因:沒有將resources文件夾標記為Test resources 根
解決方案:
注意:如果以上兩種方法嘗試后,仍然存在讀取不到文件的問題,則使用以下方法
還不行的話,重構工程:
還不行就刪除緩存,重啟IDEA:
最后還是不行的話,暴力解決,相當于手動讀取:
直接將項目目錄下的StudentDao.xml文件復制粘貼到classes目錄下對應的位置
把mybatis.xml復制粘貼到classes目錄下
解決方案:
解決方案:手動重新導入即可
重新導入成功后就能看見對應的jar包了
總結
以上是生活随笔為你收集整理的一、快速开始一个 MyBatis项目(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web框架——Flask系列之WTF表单
- 下一篇: Linux Shell快速入门