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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Mybatis框架】从零开始学Mybatis框架——使用示例

發布時間:2024/2/28 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Mybatis框架】从零开始学Mybatis框架——使用示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、數據庫SQL 命令

1、創建數據庫,并指定編碼

Create database ssm default character set utf8

2.創建表

Create table 表名(列名類型約束auto_increment comment ‘備注’, );


3、添加數據

INSERT INTO `ssm`.`flower` (`id`, `name`, `price`, `production`) VALUES ('2', '梔子花', '5.1', '山東');

二、Eclipse 使用

  • 創建項目
    選擇target runtime,否則出現新建jsp 報錯,如果忘記選擇,右鍵項目–> build path中添加library
  • Eclipse 默認會自己下載所需tomcat 最簡單結構。

  • 三、框架是什么

  • 框架:軟件的半成品.未解決問題制定的一套約束,在提供功能基礎上進行擴充。
  • 框架中一些不能被封裝的代碼(變量),需要使用框架者新建一個 xml 文件,在文件中添加變量內容。
    比如:需要建立特定位置和特定名稱的配置文件;需要使用xml 解析技術和反射技術。
  • 常用概念
    類庫:提供的類沒有封裝一定邏輯。(類庫就是名言警句,寫作文時引入名言警句)
    框架:區別與類庫,里面有一些約束。(框架是填空題)

  • 四、MyBatis 簡介

  • Mybatis 開源免費框架。原名叫iBatis,2010 在google code,2013 年遷移到github。
  • 作用: 數據訪問層框架。
    底層是對JDBC 的封裝。
  • mybatis 優點之一:
    使用mybatis 時不需要編寫實現類,只需要寫需要執行的 sql 命令。

  • 五、環境搭建

    目錄結構:

  • 導入jar
  • 在src 下新建全局配置文件(編寫JDBC 四個變量)
    2.1 沒有名稱和地址要求例如,路徑/mybatis0(項目名)/src/myabtis.xml即可
    2.2 在全局配置文件中引入DTD 或schema
    2.2.1 如果導入dtd 后沒有提示:
    點擊Window--> preference --> XML --> XMl catalog --> add 按鈕(課件資料中,包含所有需要用到的dtd文件)

    2.3 全局配置文件內容
  • <?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><!-- default引用environment的id,當前所使用的環境 --><environments default="default"><!-- 聲明可以使用的環境 --><environment id="default"><!-- 使用原生JDBC事務 --><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/></mappers> </configuration>
  • 新建以mapper 結尾的包,在包下新建:實體類名+Mapper.xml。例如FlowerMapper.xml
    3.1 文件作用:編寫需要執行的SQL 命令
    3.2 把xml 文件理解成實現類.
    3.3 xml 文件內容
  • <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namesapce:理解成實現類的全路徑(包名+類名) --> <mapper namespace="a.b" ><!-- id:方法名 parameterType:定義參數類型resultType:返回值類型.如果方法返回值是list,在resultType中寫List的泛型,因為mybatis對jdbc封裝,一行一行讀取數據--><select id="selAll" resultType="com.bjsxt.pojo.Flower">select id,name name123,price,production from flower</select><select id="selById" resultType="int">select count(*) from flower</select><select id="c" resultType="com.bjsxt.pojo.Flower">select id,name name123,price,production from flower</select></mapper>
  • 測試結果(只有在單獨使用 mybatis 時使用,最后 ssm 整合時,下面代碼不需要編寫)
  • package com.bjsxt.test;import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map;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 com.bjsxt.pojo.Flower;public class Test {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("myabtis.xml");// 使用工廠設計模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);// 生產SqlSessionSqlSession sqlSession = factory.openSession();List<Flower> list = sqlSession.selectList("a.b.selAll");for (Flower flower : list) {System.out.println(flower.toString());}int count = sqlSession.selectOne("a.b.selById");System.out.println(count);// 把數據庫中哪個列的值當作map的keyMap<Object, Object> map = sqlSession.selectMap("a.b.c", "name123");System.out.println(map);sqlSession.close();} }

    輸出

    Flower [id=1, name=向日葵, price=2.05, production=江西] Flower [id=2, name=梔子花, price=5.1, production=山東] 2 {梔子花=Flower [id=2, name=梔子花, price=5.1, production=山東], 向日葵=Flower [id=1, name=向日葵, price=2.05, production=江西]}

    六、環境搭建詳解

    1.全局配置文件中內容

    (1) <transactionManager/> type 屬性的可取值包括:
    JDBC,事務管理使用JDBC 原生事務管理方式
    MANAGED 把事務管理轉交給其他容器.原生JDBC 事務setAutoMapping(false)

    (2) <dataSouce/>type屬性
    POOLED 使用數據庫連接池
    UNPOOLED 不實用數據庫連接池,和直接使用JDBC 一樣
    JNDI :java 命名目錄接口技術.


    七、數據庫連接池

  • 在內存中開辟一塊空間,存放多個數據庫連接對象.
  • JDBC Tomcat Pool,直接由tomcat 產生數據庫連接池.
  • 圖示
    active 狀態:當前連接對象被應用程序使用中
    Idle 空閑狀態:等待應用程序使用
  • 使用數據庫連接池的目的
    在高頻率訪問數據庫時,使用數據庫連接池可以降低服務器系統壓力,提升程序運行效率.
    小型項目不適用數據庫連接池。
  • 實現JDBC tomcat Pool 的步驟.
    在web 項目的META-INF 中存放context.xml,在context.xml 編寫數據庫連接池相關屬性。把項目發布到tomcat 中,數據庫連接池產生了。
  • <?xml version="1.0" encoding="UTF-8"?> <Context><ResourcedriverClassName="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"username="root"password="123456"maxActive="50"maxIdle="20"name="test"auth="Container"maxWait="10000"type="javax.sql.DataSource"/> </Context>
  • 可以在java 中使用jndi 獲取數據庫連接池中對象
    Context:上下文接口.context.xml 文件對象類型
    當關閉連接對象時,把連接對象歸還給數據庫連接池,把狀態改變成Idle
    代碼示例:
  • package com.bjsxt.servlet;import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource;@WebServlet("/pool") public class DemoServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {try {Context cxt = new InitialContext();DataSource ds = (DataSource) cxt.lookup("java:comp/env/test");Connection conn = ds.getConnection();PreparedStatement ps = conn.prepareStatement("select * from flower");ResultSet rs = ps.executeQuery();res.setContentType("text/html;charset=utf-8");PrintWriter out = res.getWriter();while(rs.next()){out.print(rs.getInt(1)+"&nbsp;&nbsp;&nbsp;&nbsp;"+rs.getString(2)+"<br/>");}out.flush();out.close();rs.close();} catch (NamingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }

    八、三種查詢方式

    1.selectList() 返回值為List<resultType 屬性控制>
    適用于查詢結果都需要遍歷的需求

    List<Flower> list = sqlSession.selectList("a.b.selAll");for (Flower flower : list) {System.out.println(flower.toString());}

    2.selectOne() 返回值Object
    適用于返回結果只是變量或一行數據時

    int count = sqlSession.selectOne("a.b.selById");System.out.println(count);

    3.selectMap() 返回值Map
    適用于需要在查詢結果中通過某列的值取到這行數據的需求.
    Map<key,resultType 控制>

    // 把數據庫中哪個列的值當作map的keyMap<Object, Object> map = sqlSession.selectMap("a.b.c", "name123");System.out.println(map);

    4.三種查詢方式的完整代碼示例

    package com.bjsxt.test;import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map;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 com.bjsxt.pojo.Flower;public class Test {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("myabtis.xml");// 使用工廠設計模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);// 生產SqlSessionSqlSession sqlSession = factory.openSession();List<Flower> list = sqlSession.selectList("a.b.selAll");for (Flower flower : list) {System.out.println(flower.toString());}int count = sqlSession.selectOne("a.b.selById");System.out.println(count);// 把數據庫中哪個列的值當作map的keyMap<Object, Object> map = sqlSession.selectMap("a.b.c", "name123");System.out.println(map);sqlSession.close();} }

    總結

    以上是生活随笔為你收集整理的【Mybatis框架】从零开始学Mybatis框架——使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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