欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?SSM框架講解

 更新時間:2023年03月28日 13:56:33   作者:代碼販子、  
這篇文章主要介紹了什么是SSM框架,SSM框架是spring、spring?MVC?、和mybatis框架的整合,是標準的MVC模式。想進一步了解的同學可以詳細參考本文

介紹SSM框架<原理>

一、什么是SSM框架?

SSM框架是spring、spring MVC 、和mybatis框架的整合,是標準的MVC模式。標準的SSM框架有四層,分別是dao層(mapper),service層,controller層和View層。使用spring實現(xiàn)業(yè)務對象管理,使用spring MVC負責請求的轉發(fā)和視圖管理,mybatis作為數(shù)據(jù)對象的持久化引擎。

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

作用:主要是做數(shù)據(jù)持久層的工作,負責與數(shù)據(jù)庫進行聯(lián)絡的一些任務都封裝在此。

  • Dao層首先設計的是接口,然后再Spring的配置文件中定義接口的實現(xiàn)類。
  • 然后可以在模塊中進行接口的調用來進行數(shù)據(jù)業(yè)務的處理。(不在關心接口的實現(xiàn)類是哪個類)
  • 數(shù)據(jù)源的配置以及有關數(shù)據(jù)庫連接的參數(shù)都在Spring的配置文件中進行配置。

2)業(yè)務層:Service層

作用:Service層主要負責業(yè)務模塊的邏輯應用設計。

  • 先設計接口然后再設計實類,然后再在Spring的配置文件中配置其實現(xiàn)的關聯(lián)。(業(yè)務邏輯層的實現(xiàn)具體要調用到自己已經(jīng)定義好的Dao的接口上)這樣就可以在應用中調用Service接口來進行業(yè)務處理。
  • 建立好Dao之后再建立service層,service層又要在controller層之下,因為既要調用Dao層的接口又要提供接口給controller層。每個模型都有一個service接口,每個接口分別封裝各自的業(yè)務處理的方法。

3)表現(xiàn)層:Controller層(Handler層)

作用:負責具體的業(yè)務模塊流程的控制。

  • 配置也同樣是在Spring的配置文件里面進行,
  • 調用Service層提供的接口來控制業(yè)務流程。
  • 業(yè)務流程的不同會有不同的控制器,在具體的開發(fā)中可以將我們的流程進行抽象的歸納,設計出可以重復利用的子單元流程模塊。

4)View層

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

各層之間的聯(lián)系

這里是引用
DAO層,Service層這兩個層次都可以單獨開發(fā),互相的耦合度很低,完全可以獨立進行,這樣的一種模式在開發(fā)大項目的過程中尤其有優(yōu)勢,Controller,View層因為耦合度比較高,因而要結合在一起開發(fā),但是也可以看作一個整體獨立于前兩個層進行開發(fā)。這樣,在層與層之前我們只需要知道接口的定義,調用接口即可完成所需要的邏輯單元應用,一切顯得非常清晰簡單。

 1.Spring

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

1)IOC(控制反轉)

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

2)AOP(面向切面)

是面向對象開發(fā)的一種補充,它允許開發(fā)人員在不改變原來模型的基礎上動態(tài)的修改模型以滿足新的需求,如:動態(tài)的增加日志、安全或異常處理等。AOP使業(yè)務邏輯各部分間的耦合度降低,提高程序可重用性,提高開發(fā)效率。

1.橫切關注點:從每個方法中抽取出來的同一類非核心業(yè)務代碼。
2.切面:封裝橫切信息點的類,每個關注點體現(xiàn)為一個通知方法。
3.通知:切面必須要完成的各個具體工作,也就是切面里的一個個方法。
4.目標:被通知的對象,也就是被通知方法所作用的對象。
5.代理:像目標對象應用通知之后所創(chuàng)建的代理對象。
6.連接點:橫切關注點在程序代碼中的具體體現(xiàn),對應用程序執(zhí)行的某個特定位置。(通俗來講就是一個個的方法)
7.切入點:切入點就是定位連接點的方式。每個通知上的切入點表達式找到對應的連接點,執(zhí)行通知之后連接點也就變成了切入點。

2.Spring MVC

<復雜版>
1、 用戶發(fā)送請求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3、 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
4、 DispatcherServlet調用HandlerAdapter處理器適配器。
5、 HandlerAdapter經(jīng)過適配調用具體的處理器(Controller,也叫后端控制器)。
6、 Controller執(zhí)行完成返回ModelAndView。
7、 HandlerAdapter將controller執(zhí)行結果ModelAndView返回給DispatcherServlet。
8、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
9、 ViewReslover解析后返回具體View。
10、DispatcherServlet根據(jù)View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
11、 DispatcherServlet響應用戶。

<簡單版>
1.客戶端發(fā)送請求到DispacherServlet(分發(fā)器)
2.由DispacherServlet控制器查詢HanderMapping,找到處理請求的Controller
3.Controller調用業(yè)務邏輯處理后,返回ModelAndView
4.DispacherSerclet查詢視圖解析器,找到ModelAndView指定的視圖
5.視圖負責將結果顯示到客戶端

3.Mybatis (核心是SqlSession)
mybatis是對jdbc的封裝,它讓數(shù)據(jù)庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關聯(lián)到各實體類的Mapper文件,Mapper文件中配置了每個類對數(shù)據(jù)庫所需進行的sql語句映射。在每次與數(shù)據(jù)庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執(zhí)行sql命令。

二、代碼實戰(zhàn)

1.創(chuàng)建配置工程

1)創(chuàng)建maven工程
2)創(chuàng)建目錄

  • src——main下創(chuàng)建兩個文件夾(Java和resources)。
  • 和main同級的創(chuàng)建一個test,test里面創(chuàng)建一個Java。

3)配置工程

  • file——project structure——modules

4)創(chuàng)建包

  • 在src——java下創(chuàng)建問價夾(XXX),
  • (XXX)下創(chuàng)建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.代碼實戰(zhàn)(查詢記錄數(shù))

1)設計數(shù)據(jù)庫

1)創(chuàng)建實體類在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下創(chuàng)建一個名為PersonMapper的interface

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

3)resources包

  • resources包下創(chuàng)建cn包
  • cn包下創(chuàng)建kgc包
  • kgc包下創(chuàng)建一個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叫根節(jié)點,根節(jié)點有個屬性是namespace=""、namespace=""、的作用是映射我們mapper的全路徑,在以后的使用中會自動映射成我們mapper的實現(xiàn)類
(2)select里面的Id=“”一般和我們PersonMapper里面的方法名保持一致
(3)返回值這里有一個專門的屬性叫resultType="java.lang.Integer"
(4)方法名和返回值都對應之后看有無參數(shù),如果有要加上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">
//根節(jié)點:爺爺
<configuration>
       //子節(jié)點:爸爸
    <environments default="development">
    //爸爸天生有很多的孫子(這里可以配置很多個數(shù)據(jù)庫,比如development1,development2等等)
     <environment id="development">
      <transactionManager type="JDBC" /> </transactionManager>//事務里面有一個類型type,可以配JDBC(JDBC利用的機制是數(shù)據(jù)庫它的一個數(shù)據(jù)源的一個事務JDBC。可以允許不用數(shù)據(jù)庫的事務)
      <dataSource type="POOLED"></dataSource>//(dataSource屬性,代表數(shù)據(jù)源,鏈接數(shù)據(jù)庫?!癙OOLED”這里的連接池根據(jù)需要可以更改。)
     </environment>
     //development2(一般企業(yè)里配一個開發(fā)環(huán)境,一個測試環(huán)境)
      //    <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>
    <!--環(huán)境配置:數(shù)據(jù)庫的連接信息-->
    <!--default:中配置的值需要和某個environment配置的id相同,
        通知mybatis使用具體哪一個數(shù)據(jù)庫的連接信息,即具體訪問對應的數(shù)據(jù)庫-->
    <environments default="development">
        <!--environment:一個數(shù)據(jù)庫信息的配置,環(huán)境-->
        <!--id屬性:一個唯一值,自定義,表示環(huán)境的名稱-->
        <environment id="development">
            <!--transactionManager屬性:mybatis的事務類型-->
            <transactionManager type="JDBC" />
            <!--dataSoure屬性:代表數(shù)據(jù)源,連接數(shù)據(jù)庫-->
            <!--type屬性:JDBC 表示使用的是使用連接池的數(shù)據(jù)源-->
            <dataSource type="POOLED">
                <!--配置驅動-->
                <property name="driver" value="${driver}"/>
                <!--配置連接數(shù)據(jù)庫的url字符串-->
                <property name="url" value="${url}"/>
                <!--配置連接數(shù)據(jù)庫的用戶名-->
                <property name="username" value="${username}"/>
                <!--配置連接數(shù)據(jù)庫的密碼-->
                <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()對象才能創(chuàng)建sqlSession。sqlSessionFactor()需要通過sqlSessionFactor()Builder()來創(chuàng)建出來。

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

 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

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

3. 通過Resources.getResourceAsStream(“”)讀取我們的主配置文件才能調用我們的依賴信息,在這里拋異常。這里有一個返回值nputStream in(字節(jié)流),通過字節(jié)流就可以讀取

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

5. 得到SqlSessionFactory factory之后,根據(jù)圖片的流程就要得到我們的SqlSession。

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

7. 執(zhí)行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.代碼實戰(zhàn)(增加)

PersionMapper

public interface PersonMapper {
    //定義查詢記錄方法數(shù)
    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.代碼實戰(zhàn)(增刪改查,模糊精確查詢集合)

完整工程代碼

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 {
    //定義查詢記錄方法數(shù)
    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>
    <!--環(huán)境配置:數(shù)據(jù)庫的連接信息-->
    <!--default:中配置的值需要和某個environment配置的id相同,
        通知mybatis使用具體哪一個數(shù)據(jù)庫的連接信息,即具體訪問對應的數(shù)據(jù)庫-->
    <environments default="development">
        <!--environment:一個數(shù)據(jù)庫信息的配置,環(huán)境-->
        <!--id屬性:一個唯一值,自定義,表示環(huán)境的名稱-->
        <environment id="development">
            <!--transactionManager屬性:mybatis的事務類型-->
            <transactionManager type="JDBC" />
            <!--dataSoure屬性:代表數(shù)據(jù)源,連接數(shù)據(jù)庫-->
            <!--type屬性:JDBC 表示使用的是使用連接池的數(shù)據(jù)源-->
            <dataSource type="POOLED">
                <!--配置驅動-->
                <property name="driver" value="${driver}"/>
                <!--配置連接數(shù)據(jù)庫的url字符串-->
                <property name="url" value="${url}"/>
                <!--配置連接數(shù)據(jù)庫的用戶名-->
                <property name="username" value="${username}"/>
                <!--配置連接數(shù)據(jù)庫的密碼-->
                <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框架的資料請關注腳本之家其它相關文章!

相關文章

  • java screen的配置詳解及注意事項

    java screen的配置詳解及注意事項

    這篇文章主要介紹了java screen的配置詳解及注意事項的相關資料,需要的朋友可以參考下
    2017-07-07
  • Java是自學好還是參加培訓班好?

    Java是自學好還是參加培訓班好?

    這篇文章主要介紹了Java是自學好還是參加培訓班好這一問題,給大家介紹了哪些人適合自學java,哪些人適合java培訓班學習,大家可以看看內容詳情
    2018-04-04
  • Java遍歷Map鍵、值和獲取Map大小的方法示例

    Java遍歷Map鍵、值和獲取Map大小的方法示例

    本篇文章主要介紹了Java遍歷Map鍵、值和獲取Map大小的方法示例,詳細的介紹了Java遍歷Map的兩種實現(xiàn)方法和大小,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • 淺析scala中map與flatMap的區(qū)別

    淺析scala中map與flatMap的區(qū)別

    這篇文章主要介紹了淺析scala中map與flatMap的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Java動態(tài)顯示當前日期和時間

    Java動態(tài)顯示當前日期和時間

    這篇文章主要為大家詳細介紹了Java動態(tài)顯示當前日期和時間,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Swagger-boostrap-ui如何配置用戶名密碼訪問

    Swagger-boostrap-ui如何配置用戶名密碼訪問

    這篇文章主要介紹了Swagger-boostrap-ui如何配置用戶名密碼訪問,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • flowable表梳理步驟詳解

    flowable表梳理步驟詳解

    這篇文章主要介紹了flowable表梳理步驟詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Java編程實現(xiàn)多線程TCP服務器完整實例

    Java編程實現(xiàn)多線程TCP服務器完整實例

    這篇文章主要介紹了Java編程實現(xiàn)多線程TCP服務器完整實例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • JAVA數(shù)字千分位和小數(shù)點的現(xiàn)實代碼(處理金額問題)

    JAVA數(shù)字千分位和小數(shù)點的現(xiàn)實代碼(處理金額問題)

    這篇文章主要介紹了JAVA數(shù)字千分位和小數(shù)點的現(xiàn)實代碼(處理金額問題),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java的LinkedHashSet解析

    Java的LinkedHashSet解析

    這篇文章主要介紹了Java的LinkedHashSet解析,Set接口的哈希表和鏈表實現(xiàn),具有可預測的迭代順序,此實現(xiàn)與 HashSet的不同之處在于它維護一個雙向鏈表,該列表貫穿其所有條目,這個鏈表定義了迭代順序,需要的朋友可以參考下
    2023-09-09

最新評論