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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

一、快速开始一个 MyBatis项目(详解)

發布時間:2024/7/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、快速开始一个 MyBatis项目(详解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.0 概述

1.三層架構
界面層: 和用戶打交道的, 接收用戶的請求參數, 顯示處理結果的。(jsp ,html ,servlet)
業務邏輯層: 接收了界面層傳遞的數據,計算邏輯,調用數據庫,獲取數據
數據訪問層: 就是訪問數據庫, 執行對數據的查詢,修改,刪除等等的。

三層對應的包界面層: controller包 (servlet)業務邏輯層: service 包(XXXService類)數據訪問層: dao包(XXXDao類)三層中類的交互用戶使用界面層--> 業務邏輯層--->數據訪問層(持久層)-->數據庫(mysql)三層對應的處理框架界面層---servlet---springmvc(框架)業務邏輯層---service類--spring(框架)數據訪問層---dao類--mybatis(框架)

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提供了哪些功能:

  • 提供了創建Connection ,Statement, ResultSet的能力 ,不用開發人員創建這些對象了
  • 提供了執行sql語句的能力, 不用你執行sql
  • 提供了循環sql, 把sql的結果轉為java對象, List集合的能力
    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);
    }
  • 提供了關閉資源的能力,不用你關閉Connection, Statement, ResultSet
  • 開發人員做的是: 提供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 工程,信息如下:
    選擇模板:


    加入

    archetypeCatalog Internal

    這兩行代碼
    目的:加速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文件:

    package com.zep.dao;import com.zep.domain.Student;import java.util.List;// 接口,操作student表 public interface StudentDao {//查詢student表中的所有數據List<Student> selectStudents();//插入方法//參數:student,表示要插入到數據庫的數據//返回值:int,表示執行insert操作后的,影像數據庫的行數int insertStudent(Student student);//更新方法int updateStudent(Student student);//刪除方法int deleteStudent(int id);}

    (8) 編寫 Dao 接口 Mapper 映射文件 StudentDao.xml

    要求:

  • 在 dao 包中創建文件 StudentDao.xml
  • 要 StudentDao.xml 文件名稱和接口 StudentDao 一樣,區分大小寫的一樣。
  • <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:必須有值,自定義的唯一字符串推薦使用:dao 接口的全限定名稱 --> <mapper namespace="com.zep.dao.StudentDao"><!--<select>: 查詢數據, 標簽中必須是 select 語句id: sql 語句的自定義名稱,推薦使用 dao 接口中方法名稱,使用名稱表示要執行的 sql 語句resultType: 查詢語句的返回結果數據類型,使用全限定類名--><select id="selectStudents" resultType="com.zep.domain.Student"><!--要執行的 sql 語句-->select id,name,email,age from student order by id</select><!--select:表示查詢操作。id:你要執行的sql語句的唯一標識,mybatis會使用這個id的值找到要執行的sql語句。可以自定義,但是要求你使用接口中的方法名稱。resultType:表示結果類型,是sql語句執行后得到的ResultSet,遍歷這個ResultSet的到的java對象的類型值寫的是類型的全限定名稱--><!--插入操作,#{id},#{name},#{email},#{age}中的id,name,email,age是student實體類中的屬性名稱--><insert id="insertStudent">insert into student(id,name,email,age) values(#{id},#{name},#{email},#{age})</insert><update id="updateStudent">update student set age = #{age} where id=#{id}</update><delete id="deleteStudent">delete from student where id=#{studentId}</delete></mapper><!--sql映射文件:寫sql語句的,mybatis會執行這些sql1.指定約束文件<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">mybatis-3-mapper.dtd是約束文件的名稱,擴展名是dtdd的。2.約束文件的作用:用來限制,檢查在當前文件中出現的標簽和屬性,必須符合mybatis的要求3.mapper 是當前文件的跟標簽,必須有namespace:叫做命名空間,唯一值,可以是自定義的字符串要求你使用dao接口的全限定名稱。4.在當前文件中,可以使用特定的標簽,表示數據庫的特定操作<select>:表示執行查詢操作<update>:表示執行更新數據庫的操作,就是在<update>標簽中,寫的是update sql語句<insert>:表示插入,放的是insert語句<delete>:表示刪除,執行的delete語句-->

    (9) 創建 MyBatis 主配置文件

    項目 src/main 下創建 resources 目錄,設置 resources 目錄為 resources root
    創建主配置文件:名稱為 mybatis.xml
    說明:主配置文件名稱是自定義的,內容如下:

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!--mybatis.xml 文件加入日志配置,可以在控制臺輸出執行的 sql 語句和參數--> <settings><setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <!-- 配置 mybatis 環境:數據庫的連接信息 default:必須和某個environment標簽中的id值一樣。 告訴mybatis使用哪個數據庫的連接信息。也就是訪問哪個數據庫 --> <environments default="mysql"><!--id:數據源的名稱,一個唯一值,可自定義,用來表示環境的名稱--><environment id="mysql"><!--配置事務類型:使用 JDBC 事務(使用 Connection 的提交和回滾)type:JDBC(表示使用jdbc中的Connection對象的commit,rollback做事務處理)--><transactionManager type="JDBC"/><!--數據源 dataSource:創建數據庫 Connection 對象type: POOLED 使用數據庫的連接池--><dataSource type="POOLED"><!--連接數據庫的四個要素:driver,user,username,password名字是固定的,不能自定義--><!--數據庫的驅動類名--><property name="driver" value="com.mysql.jdbc.Driver"/><!--連接數據庫的url字符串--><property name="url" value="jdbc:mysql://localhost:3306/ssm"/><!--訪問數據庫的用戶名--><property name="username" value="root"/><!--密碼--><property name="password" value="root"/></dataSource></environment> </environments> <mappers><!--告訴 mybatis 要執行的 sql 語句的位置sql mapper(sql映射文件)的位置一個mapper標簽指定一個文件的位置。位置是從類路徑開始的路徑信息。類路徑:target/classes(類路徑)--><mapper resource="com/zep/dao/StudentDao.xml"/> </mappers> </configuration><!--mybatis的主配置文件:主要定義了數據庫的配置信息,sql映射文件的位置。1.約束文件<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">mybatis-3-config.dtd:約束文件的名稱2.configuration 根標簽-->

    (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開發中常見的問題

  • 讀取不到dao文件夾下的StudentDao.xml文件
    原因:target目錄下確實不存在StudentDao.xml文件,所有讀取不到
    解決方案:在pom.xml文件中加入以下配置:
  • <build><resources><resource><directory>src/main/java</directory><!--所在的目錄--><includes><!--包括目錄下的.properties,.xml 文件都會掃描到--><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>


    2. 讀取不到resources文件夾下的mybatis.xml文件
    原因:沒有將resources文件夾標記為Test resources 根
    解決方案:

    注意:如果以上兩種方法嘗試后,仍然存在讀取不到文件的問題,則使用以下方法

    還不行的話,重構工程:

    還不行就刪除緩存,重啟IDEA:

    最后還是不行的話,暴力解決,相當于手動讀取:
    直接將項目目錄下的StudentDao.xml文件復制粘貼到classes目錄下對應的位置
    把mybatis.xml復制粘貼到classes目錄下

  • 目錄結構中找不到target文件夾
    解決方案:
  • pom.xml文件中的依賴沒有導入成功
    解決方案:手動重新導入即可

    重新導入成功后就能看見對應的jar包了
  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的一、快速开始一个 MyBatis项目(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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