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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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ù)的查詢,修改,刪除等等的。

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

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

  • 提供了創(chuàng)建Connection ,Statement, ResultSet的能力 ,不用開發(fā)人員創(chuàng)建這些對(duì)象了
  • 提供了執(zhí)行sql語句的能力, 不用你執(zhí)行sql
  • 提供了循環(huán)sql, 把sql的結(jié)果轉(zhuǎn)為java對(duì)象, List集合的能力
    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);
    }
  • 提供了關(guān)閉資源的能力,不用你關(guān)閉Connection, Statement, ResultSet
  • 開發(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 工程,信息如下:
    選擇模板:


    加入

    archetypeCatalog Internal

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

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

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

    要求:

  • 在 dao 包中創(chuàng)建文件 StudentDao.xml
  • 要 StudentDao.xml 文件名稱和接口 StudentDao 一樣,區(qū)分大小寫的一樣。
  • <?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>: 查詢數(shù)據(jù), 標(biāo)簽中必須是 select 語句id: sql 語句的自定義名稱,推薦使用 dao 接口中方法名稱,使用名稱表示要執(zhí)行的 sql 語句resultType: 查詢語句的返回結(jié)果數(shù)據(jù)類型,使用全限定類名--><select id="selectStudents" resultType="com.zep.domain.Student"><!--要執(zhí)行的 sql 語句-->select id,name,email,age from student order by id</select><!--select:表示查詢操作。id:你要執(zhí)行的sql語句的唯一標(biāo)識(shí),mybatis會(huì)使用這個(gè)id的值找到要執(zhí)行的sql語句。可以自定義,但是要求你使用接口中的方法名稱。resultType:表示結(jié)果類型,是sql語句執(zhí)行后得到的ResultSet,遍歷這個(gè)ResultSet的到的java對(duì)象的類型值寫的是類型的全限定名稱--><!--插入操作,#{id},#{name},#{email},#{age}中的id,name,email,age是student實(shí)體類中的屬性名稱--><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會(huì)執(zhí)行這些sql1.指定約束文件<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">mybatis-3-mapper.dtd是約束文件的名稱,擴(kuò)展名是dtdd的。2.約束文件的作用:用來限制,檢查在當(dāng)前文件中出現(xiàn)的標(biāo)簽和屬性,必須符合mybatis的要求3.mapper 是當(dāng)前文件的跟標(biāo)簽,必須有namespace:叫做命名空間,唯一值,可以是自定義的字符串要求你使用dao接口的全限定名稱。4.在當(dāng)前文件中,可以使用特定的標(biāo)簽,表示數(shù)據(jù)庫的特定操作<select>:表示執(zhí)行查詢操作<update>:表示執(zhí)行更新數(shù)據(jù)庫的操作,就是在<update>標(biāo)簽中,寫的是update sql語句<insert>:表示插入,放的是insert語句<delete>:表示刪除,執(zhí)行的delete語句-->

    (9) 創(chuàng)建 MyBatis 主配置文件

    項(xiàng)目 src/main 下創(chuàng)建 resources 目錄,設(shè)置 resources 目錄為 resources root
    創(chuàng)建主配置文件:名稱為 mybatis.xml
    說明:主配置文件名稱是自定義的,內(nèi)容如下:

    <?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 文件加入日志配置,可以在控制臺(tái)輸出執(zhí)行的 sql 語句和參數(shù)--> <settings><setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <!-- 配置 mybatis 環(huán)境:數(shù)據(jù)庫的連接信息 default:必須和某個(gè)environment標(biāo)簽中的id值一樣。 告訴mybatis使用哪個(gè)數(shù)據(jù)庫的連接信息。也就是訪問哪個(gè)數(shù)據(jù)庫 --> <environments default="mysql"><!--id:數(shù)據(jù)源的名稱,一個(gè)唯一值,可自定義,用來表示環(huán)境的名稱--><environment id="mysql"><!--配置事務(wù)類型:使用 JDBC 事務(wù)(使用 Connection 的提交和回滾)type:JDBC(表示使用jdbc中的Connection對(duì)象的commit,rollback做事務(wù)處理)--><transactionManager type="JDBC"/><!--數(shù)據(jù)源 dataSource:創(chuàng)建數(shù)據(jù)庫 Connection 對(duì)象type: POOLED 使用數(shù)據(jù)庫的連接池--><dataSource type="POOLED"><!--連接數(shù)據(jù)庫的四個(gè)要素:driver,user,username,password名字是固定的,不能自定義--><!--數(shù)據(jù)庫的驅(qū)動(dòng)類名--><property name="driver" value="com.mysql.jdbc.Driver"/><!--連接數(shù)據(jù)庫的url字符串--><property name="url" value="jdbc:mysql://localhost:3306/ssm"/><!--訪問數(shù)據(jù)庫的用戶名--><property name="username" value="root"/><!--密碼--><property name="password" value="root"/></dataSource></environment> </environments> <mappers><!--告訴 mybatis 要執(zhí)行的 sql 語句的位置sql mapper(sql映射文件)的位置一個(gè)mapper標(biāo)簽指定一個(gè)文件的位置。位置是從類路徑開始的路徑信息。類路徑:target/classes(類路徑)--><mapper resource="com/zep/dao/StudentDao.xml"/> </mappers> </configuration><!--mybatis的主配置文件:主要定義了數(shù)據(jù)庫的配置信息,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 根標(biāo)簽-->

    (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ā)中常見的問題

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


    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目錄下

  • 目錄結(jié)構(gòu)中找不到target文件夾
    解決方案:
  • pom.xml文件中的依賴沒有導(dǎo)入成功
    解決方案:手動(dòng)重新導(dǎo)入即可

    重新導(dǎo)入成功后就能看見對(duì)應(yīng)的jar包了
  • 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。