首頁 > 軟體

Java SSM框架講解

2023-03-29 06:02:37

介紹SSM框架<原理>

一、什麼是SSM框架?

SSM框架是spring、spring MVC 、和mybatis框架的整合,是標準的MVC模式。標準的SSM框架有四層,分別是dao層(mapper),service層,controller層和View層。使用spring實現業務物件管理,使用spring MVC負責請求的轉發和檢視管理,mybatis作為資料物件的持久化引擎。

1)持久層:dao層(mapper)層

作用:主要是做資料持久層的工作,負責與資料庫進行聯絡的一些任務都封裝在此。

  • Dao層首先設計的是介面,然後再Spring的組態檔中定義介面的實現類。
  • 然後可以在模組中進行介面的呼叫來進行資料業務的處理。(不在關心介面的實現類是哪個類)
  • 資料來源的設定以及有關資料庫連線的引數都在Spring的組態檔中進行設定。

2)業務層:Service層

作用:Service層主要負責業務模組的邏輯應用設計。

  • 先設計介面然後再設計實類,然後再在Spring的組態檔中設定其實現的關聯。(業務邏輯層的實現具體要呼叫到自己已經定義好的Dao的介面上)這樣就可以在應用中呼叫Service介面來進行業務處理。
  • 建立好Dao之後再建立service層,service層又要在controller層之下,因為既要呼叫Dao層的介面又要提供介面給controller層。每個模型都有一個service介面,每個介面分別封裝各自的業務處理的方法。

3)表現層:Controller層(Handler層)

作用:負責具體的業務模組流程的控制。

  • 設定也同樣是在Spring的組態檔裡面進行,
  • 呼叫Service層提供的介面來控制業務流程。
  • 業務流程的不同會有不同的控制器,在具體的開發中可以將我們的流程進行抽象的歸納,設計出可以重複利用的子單元流程模組。

4)View層

作用:主要和控制層緊密結合,主要負責前臺jsp頁面的表示。

各層之間的聯絡

這裡是參照
DAO層,Service層這兩個層次都可以單獨開發,互相的耦合度很低,完全可以獨立進行,這樣的一種模式在開發大專案的過程中尤其有優勢,Controller,View層因為耦合度比較高,因而要結合在一起開發,但是也可以看作一個整體獨立於前兩個層進行開發。這樣,在層與層之前我們只需要知道介面的定義,呼叫介面即可完成所需要的邏輯單元應用,一切顯得非常清晰簡單。

 1.Spring

Spring裡面的IOC容器和AOP是我們平時使用最多的。

1)IOC(控制反轉)

它可以裝載bean,也是一種降低物件之間耦合關係的設計思想。(比如租房子。以前租房子需要一個房子一個房子找,費時費力,然後現在加入一個房屋中介,把你需要的房型告訴中介,就可以直接選到需要的房子,中介就相當於spring容器。)

2)AOP(面向切面)

是物件導向開發的一種補充,它允許開發人員在不改變原來模型的基礎上動態的修改模型以滿足新的需求,如:動態的增加紀錄檔、安全或例外處理等。AOP使業務邏輯各部分間的耦合度降低,提高程式可重用性,提高開發效率。

1.橫切關注點:從每個方法中抽取出來的同一類非核心業務程式碼。
2.切面:封裝橫切資訊點的類,每個關注點體現為一個通知方法。
3.通知:切面必須要完成的各個具體工作,也就是切面裡的一個個方法。
4.目標:被通知的物件,也就是被通知方法所作用的物件。
5.代理:像目標物件應用通知之後所建立的代理物件。
6.連線點:橫切關注點在程式程式碼中的具體體現,對應用程式執行的某個特定位置。(通俗來講就是一個個的方法)
7.切入點:切入點就是定位連線點的方式。每個通知上的切入點表示式找到對應的連線點,執行通知之後連線點也就變成了切入點。

2.Spring MVC

<複雜版>
1、 使用者傳送請求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。
3、 處理器對映器找到具體的處理器(可以根據xml設定、註解進行查詢),生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
4、 DispatcherServlet呼叫HandlerAdapter處理器介面卡。
5、 HandlerAdapter經過適配呼叫具體的處理器(Controller,也叫後端控制器)。
6、 Controller執行完成返回ModelAndView。
7、 HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
8、 DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器。
9、 ViewReslover解析後返回具體View。
10、DispatcherServlet根據View進行渲染檢視(即將模型資料填充至檢視中)。
11、 DispatcherServlet響應使用者。

<簡單版>
1.使用者端傳送請求到DispacherServlet(分發器)
2.由DispacherServlet控制器查詢HanderMapping,找到處理請求的Controller
3.Controller呼叫業務邏輯處理後,返回ModelAndView
4.DispacherSerclet查詢檢視解析器,找到ModelAndView指定的檢視
5.檢視負責將結果顯示到使用者端

3.Mybatis (核心是SqlSession)
mybatis是對jdbc的封裝,它讓資料庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory範例展開的。mybatis通過組態檔關聯到各實體類的Mapper檔案,Mapper檔案中設定了每個類對資料庫所需進行的sql語句對映。在每次與資料庫互動時,通過sqlSessionFactory拿到一個sqlSession,再執行sql命令。

二、程式碼實戰

1.建立設定工程

1)建立maven工程
2)建立目錄

  • src——main下建立兩個資料夾(Java和resources)。
  • 和main同級的建立一個test,test裡面建立一個Java。

3)設定工程

  • file——project structure——modules

4)建立包

  • 在src——java下建立問價夾(XXX),
  • (XXX)下建立entity,mapper,,service和util包。

5)設定依賴pom.xml加入依賴,一個是Mybatis的,一個是MySQL的。

程式碼如下(範例):

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.36</version>
    </dependency>

2.程式碼實戰(查詢記錄數)

1)設計資料庫

1)建立實體類在entity下new一個名為person的class

程式碼如下(範例):

public class Person {
    private Integer Id;
    private String name;
    private String nickname;
    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 getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "Id=" + Id +
                ", name='" + name + ''' +
                ", nickname='" + nickname + ''' +
                ", age=" + age +
                '}';
    }
}

2)Mapper介面

定義方法(實體名+Mapper)

在mapper下建立一個名為PersonMapper的interface

public interface PersonMapper {
    //定義查詢記錄方法數
    public Integer findCount();
    }

3)resources包

  • resources包下建立cn包
  • cn包下建立kgc包
  • kgc包下建立一個XML(這裡的xml檔名與mapper介面名一致)
    xml檔案中有兩個部分組成,一個是頭部檔案,一個是主體

//標頭檔案:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
//查詢對映標籤(select):
<mapper namespace="cn.kgc.mapper.PersonMapper">
    <select id="findCount" resultType="java.lang.Integer">
    </select>
</mapper>

(1)mapper叫根節點,根節點有個屬性是namespace=""、namespace=""、的作用是對映我們mapper的全路徑,在以後的使用中會自動對映成我們mapper的實現類
(2)select裡面的Id=“”一般和我們PersonMapper裡面的方法名保持一致
(3)返回值這裡有一個專門的屬性叫resultType="java.lang.Integer"
(4)方法名和返回值都對應之後看有無引數,如果有要加上parameterType=""

4)寫sql語句`

<mapper namespace="cn.kgc.mapper.PersonMapper">
    <select id="findCount" resultType="java.lang.Integer">
        select count(*) from t_user
    </select>
</mapper>

5)設定主組態檔mybatis-config.xml`

在resources裡新建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
//根節點:爺爺
<configuration>
       //子節點:爸爸
    <environments default="development">
    //爸爸天生有很多的孫子(這裡可以設定很多個資料庫,比如development1,development2等等)
     <environment id="development">
      <transactionManager type="JDBC" /> </transactionManager>//事務裡面有一個型別type,可以配JDBC(JDBC利用的機制是資料庫它的一個資料來源的一個事務JDBC。可以允許不用資料庫的事務)
      <dataSource type="POOLED"></dataSource>//(dataSource屬性,代表資料來源,連結資料庫。「POOLED」這裡的連線池根據需要可以更改。)
     </environment>
     //development2(一般企業裡配一個開發環境,一個測試環境)
      //    <environment id="development2">
    //  <transactionManager type="" /> </transactionManager>
    //  <dataSource type=""></dataSource>
   //  </environment>
  //  </environments>
</configuration>
mybatis-config.xml完整程式碼:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<configuration>
    <!--jdbc.properties組態檔-->
    <properties resource="jdbc.properties"></properties>
    <!--setttings:控制mybatis全域性設定行為-->
    <settings>
        <!--設定mybatis輸出紀錄檔-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--環境設定:資料庫的連線資訊-->
    <!--default:中設定的值需要和某個environment設定的id相同,
        通知mybatis使用具體哪一個資料庫的連線資訊,即具體存取對應的資料庫-->
    <environments default="development">
        <!--environment:一個資料庫資訊的設定,環境-->
        <!--id屬性:一個唯一值,自定義,表示環境的名稱-->
        <environment id="development">
            <!--transactionManager屬性:mybatis的事務型別-->
            <transactionManager type="JDBC" />
            <!--dataSoure屬性:代表資料來源,連線資料庫-->
            <!--type屬性:JDBC 表示使用的是使用連線池的資料來源-->
            <dataSource type="POOLED">
                <!--設定驅動-->
                <property name="driver" value="${driver}"/>
                <!--設定連線資料庫的url字串-->
                <property name="url" value="${url}"/>
                <!--設定連線資料庫的使用者名稱-->
                <property name="username" value="${username}"/>
                <!--設定連線資料庫的密碼-->
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--sql對映檔案標籤-->
    <mappers>
        <!--reource:從類路徑開始的路徑資訊:target/clasess(類路徑)-->
        <mapper resource="cn/kgc/mapper/PersonMapper.xml"/>
    </mappers>
</configuration>

5)測試`

在test——Java包下新建一個名為TestMybatis的測試類
測試用例怎麼寫:測一個物件sqlSession,需要通過sqlSessionFactor()物件才能建立sqlSession。sqlSessionFactor()需要通過sqlSessionFactor()Builder()來建立出來。

1. 先new一個SqlSessionFactoryBuilder(),得到一個返回值builder

 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

2. 獲取我們的SqlSessionFactory,要用builder.上我們的builder()方法,通過流的形式傳一個In的引數。

3. 通過Resources.getResourceAsStream(“”)讀取我們的主組態檔才能呼叫我們的依賴資訊,在這裡拋異常。這裡有一個返回值nputStream in(位元組流),通過位元組流就可以讀取

4. 這時builder.build(in);得到喲個返回值就是SqlSessionFactory factory。

5. 得到SqlSessionFactory factory之後,根據圖片的流程就要得到我們的SqlSession。

6. factory.openSession()開啟我們的Session,就可以得到我們的Session

7. 執行sql語句。sqlSession.getMapper(這裡的mapper利用的是我們的一個反射機制,機制利用的時我們的一個介面)通過sqlSession.getMapper(PersonMapper.class)呼叫一個呼叫方法,得到一個返回值count

8. 輸出對應的返回值

9. 關閉sqlsession

public class TestMybatis {
    @Test
    public void testHelloWorld() throws IOException {
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        //5.呼叫介面的方法
        Integer count = sqlSession.getMapper(PersonMapper.class).findCount();
        //6.輸出對應的返回值count
        System.out.println("count:" + count);
        //7.關閉 SqlSession
        sqlSession.close();
    }
 }

3.程式碼實戰(增加)

PersionMapper

public interface PersonMapper {
    //定義查詢記錄方法數
    public Integer findCount();
    //增加
    public Integer addPerson(Person person);
    }

PersonMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kgc.mapper.PersonMapper">
    <select id="findCount" resultType="java.lang.Integer">
        select count(*) from t_user
    </select>
    <insert id="addPerson" parameterType="cn.kgc.entity.Person">
        insert into t_user(name,nickname,age) values(#{name},#{nickname},#{age})
    </insert>
    </mapper>

測試類

    @Test
    public void testInsert() throws Exception {
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        //5.呼叫介面的方法
        Person p = new Person();
        p.setName("李四");
        p.setNickname("一個人的夜晚上");
        p.setAge(22);
        sqlSession.getMapper(PersonMapper.class).addPerson(p);
        //6.提交實物,該行程式碼必須放在關閉sqlsession之前
        sqlSession.commit();
        sqlSession.close();
    }

3.程式碼實戰(增刪改查,模糊精確查詢集合)

完整工程程式碼

Person類

package cn.kgc.entity;

public class Person {
    private Integer Id;
    private String name;
    private String nickname;
    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 getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "Id=" + Id +
                ", name='" + name + ''' +
                ", nickname='" + nickname + ''' +
                ", age=" + age +
                '}';
    }
}


PersonMapper類

package cn.kgc.mapper;

import cn.kgc.entity.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PersonMapper {
    //定義查詢記錄方法數
    public Integer findCount();
    //增加
    public Integer addPerson(Person person);
    //修改功能
    public Integer updatePerson(Person person);
    //刪除功能
    public Integer delById(Integer Id);
    //刪除功能2
    public Integer delById2(Person person);
    //查詢物件
    public Person findById(Integer Id);
    //查詢集合
    public List<Person> findAll();
    //模糊查詢
    public List<Person> findByName(String name);
    //通過使用者名稱和暱稱 絕對查詢
    public List<Person> findByPerson(Person person);
    //通過使用者名稱和暱稱 絕對查詢2
    public List<Person> findByPerson2(@Param("name")String name,@Param("nickname")String nickname);
    //測試¥(不安全)符號和#(安全)的作用
    public List<Person> findColList(@Param("colname")String colname);
}

MybatisUtil類

package cn.kgc.util;

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 java.io.IOException;
import java.io.InputStream;

public class MytabisUtil {
    private static SqlSessionFactory factory = null;

    static {
        try {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            factory = builder.build(in);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    //獲取SqlSession物件
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        if(factory!=null){
            sqlSession = factory.openSession();
        }
        return sqlSession;
    }
}

PersonMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kgc.mapper.PersonMapper">
    <select id="findCount" resultType="java.lang.Integer">
        select count(*) from t_user
    </select>
    <insert id="addPerson" parameterType="cn.kgc.entity.Person">
        insert into t_user(name,nickname,age) values(#{name},#{nickname},#{age})
    </insert>
    <update id="updatePerson" parameterType="cn.kgc.entity.Person">
        update t_user set name=#{name},nickname=#{nickname},age=#{age} where Id = #{Id}
    </update>
    <delete id="delById" parameterType="cn.kgc.entity.Person" >
        delete from t_user where id = #{Id}
    </delete>
    <delete id="delById2" parameterType="cn.kgc.entity.Person">
        delete from t_user where id = #{Id}
    </delete>
    <select id="findById" resultType="cn.kgc.entity.Person" parameterType="java.lang.Integer">
        select * from t_user where id = #{Id}
    </select>
    <select id="findAll" resultType="cn.kgc.entity.Person">
        select * from t_user
    </select>
    <select id="findByName" resultType="cn.kgc.entity.Person" parameterType="java.lang.String">
        select * from t_user where `name` like concat('%',#{name},'%')
    </select>
    <select id="findByPerson" parameterType="cn.kgc.entity.Person" resultType="cn.kgc.entity.Person">
        select * from t_user where  `name` = #{name} and nickname = #{nickname}
    </select>
    <select id="findByPerson2" parameterType="cn.kgc.entity.Person" resultType="cn.kgc.entity.Person">
        select * from t_user where  `name` = #{name} and nickname = #{nickname}
    </select>
    <select id="findColList" resultType="cn.kgc.entity.Person">
         select * from t_user order by ${colname}
    </select>
</mapper>

jdbc.properties(組態檔)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_202125
username=root
password=123

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<configuration>
    <!--jdbc.properties組態檔-->
    <properties resource="jdbc.properties"></properties>
    <!--setttings:控制mybatis全域性設定行為-->
    <settings>
        <!--設定mybatis輸出紀錄檔-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--環境設定:資料庫的連線資訊-->
    <!--default:中設定的值需要和某個environment設定的id相同,
        通知mybatis使用具體哪一個資料庫的連線資訊,即具體存取對應的資料庫-->
    <environments default="development">
        <!--environment:一個資料庫資訊的設定,環境-->
        <!--id屬性:一個唯一值,自定義,表示環境的名稱-->
        <environment id="development">
            <!--transactionManager屬性:mybatis的事務型別-->
            <transactionManager type="JDBC" />
            <!--dataSoure屬性:代表資料來源,連線資料庫-->
            <!--type屬性:JDBC 表示使用的是使用連線池的資料來源-->
            <dataSource type="POOLED">
                <!--設定驅動-->
                <property name="driver" value="${driver}"/>
                <!--設定連線資料庫的url字串-->
                <property name="url" value="${url}"/>
                <!--設定連線資料庫的使用者名稱-->
                <property name="username" value="${username}"/>
                <!--設定連線資料庫的密碼-->
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--sql對映檔案標籤-->
    <mappers>
        <!--reource:從類路徑開始的路徑資訊:target/clasess(類路徑)-->
        <mapper resource="cn/kgc/mapper/PersonMapper.xml"/>
    </mappers>
</configuration>

TestMybatis類

import cn.kgc.entity.Person;
import cn.kgc.mapper.PersonMapper;
import cn.kgc.util.MytabisUtil;
import jdk.internal.util.xml.impl.Input;
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 {
    @Test
    public void testHelloWorld() throws IOException {
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        //5.呼叫介面的方法
        Integer count = sqlSession.getMapper(PersonMapper.class).findCount();
        //6.輸出對應的返回值count
        System.out.println("count:" + count);
        //7.關閉 SqlSession
        sqlSession.close();
    }

    @Test
    public void testInsert() throws Exception {
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        //5.呼叫介面的方法
        Person p = new Person();
        p.setName("李四");
        p.setNickname("一個人的夜晚上");
        p.setAge(22);
        sqlSession.getMapper(PersonMapper.class).addPerson(p);
        //6.提交實物,該行程式碼必須放在關閉sqlsession之前
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testupdate() throws Exception {
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        Person p2 = new Person();
        p2.setId(2);
        p2.setName("趙四");
        p2.setNickname("來啊,造作啊");
        p2.setAge(23);
        sqlSession.getMapper(PersonMapper.class).updatePerson(p2);
        //6.提交實物,該行程式碼必須放在關閉sqlsession之前
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testdel() throws  Exception{
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        sqlSession.getMapper(PersonMapper.class).delById(2);
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testdel2 () throws Exception{
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        Person person = new Person();
        person.setId(2);
        sqlSession.getMapper(PersonMapper.class).delById2(person);
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testfindById () throws Exception{
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();

        Person person = sqlSession.getMapper(PersonMapper.class).findById(1);
        System.out.println("id"+ person.getId()+"name"+ person.getName()+"nickname"+ person.getNickname()+"age"+ person.getAge());
        sqlSession.close();
    }
    @Test
    public void testfindAll () throws IOException{
       String str ="mybatis-config.xml";
        InputStream in =Resources.getResourceAsStream(str);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        SqlSession sqlSession = factory.openSession();

        List<Person> all = sqlSession.getMapper(PersonMapper.class).findAll();
        for(Person p:all){
            System.out.println(p);
        }
        sqlSession.close();
    }
    @Test
    public void testfindByName () throws IOException{
        String str ="mybatis-config.xml";
        InputStream in =Resources.getResourceAsStream(str);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        SqlSession sqlSession = factory.openSession();

        List<Person> list = sqlSession.getMapper(PersonMapper.class).findByName("wqz");
        for(Person p:list){
            System.out.println(p);
        }
        sqlSession.close();
    }
    @Test
    public void testfindByPerson () throws IOException{
        String str ="mybatis-config.xml";
        InputStream in =Resources.getResourceAsStream(str);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        SqlSession sqlSession = factory.openSession();
        Person person = new Person();
        List<Person> list = sqlSession.getMapper(PersonMapper.class).findByPerson(person);
        for(Person p:list){
            System.out.println(p);
        }
        sqlSession.close();
    }
    @Test
    public void findByPerson2 () throws Exception {
        //1.通過流的機制獲取主組態檔mybatis-config.xml的主要設定資訊
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.範例化SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.呼叫builder物件的builder()方法,獲取SqlSessionFactory物件
        SqlSessionFactory factory = builder.build(in);
        //4.呼叫factory物件的openSession()方法,獲取SqlSession物件
        SqlSession sqlSession = factory.openSession();
        String name = "王五";
        String nickname = "123";
        List<Person> list = sqlSession.getMapper(PersonMapper.class).findByPerson2(name,nickname);
        for(Person p:list){
            System.out.println("name:"+p.getName()+"nickname"+p.getNickname());
        }
        sqlSession.close();
    }
    @Test
    public void testfindCount(){
        SqlSession sqlSession = MytabisUtil.getSqlSession();
        Integer count = sqlSession.getMapper(PersonMapper.class).findCount();
        System.out.println(count);
    }

    @Test
    public void findColList(){
        SqlSession sqlSession = MytabisUtil.getSqlSession();
        List<Person> colList = sqlSession.getMapper(PersonMapper.class).findColList("Id");
        for (Person p:colList){
            System.out.println(p);


        }
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>

  <name>20211125</name>
  <groupId>org.example</groupId>
  <artifactId>20211125</artifactId>
  <version>1.0-SNAPSHOT</version>

  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.7</version>
        <configuration>
          <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
              <port>8888</port>
              <maxIdleTime>30000</maxIdleTime>
            </connector>
          </connectors>
          <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
          <contextPath>/</contextPath>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.36</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--dependency>
      <groupId>org.example</groupId>
      <artifactId>[the artifact id of the block to be mounted]</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency-->
  </dependencies>

</project>

以上就是Java SSM框架講解的詳細內容,更多關於SSM框架的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com