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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【SSM框架系列】Mybatis基本介绍

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SSM框架系列】Mybatis基本介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原始jdbc操作

//1. 導入驅動jar包//2.注冊驅動Class.forName("com.mysql.jdbc.Driver");//3.獲取數據庫連接對象Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "root", "root");//4.定義sql語句String sql = "update account set balance = 500 where id = 1";//5.獲取執行sql的對象 StatementStatement stmt = conn.createStatement();//6.執行sqlint count = stmt.executeUpdate(sql);//7.處理結果System.out.println(count);//8.釋放資源stmt.close();conn.close();

原始jdbc操作的分析

查詢數據庫必須要有哪些條件:

  • 連接數據庫的四個基本信息 driver,url,username,password
  • 必須要有執行的sql語句
  • 必須有結果集對應的實體對象(用于封裝數據)

原始jdbc開發存在的問題如下:

  • 數據庫連接創建、釋放頻繁造成系統資源浪費從而影響系統性能

  • sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變java代碼。

  • 查詢操作時,需要手動將結果集中的數據手動封裝到實體中。插入操作時,需要手動將實體的數據設置到sql語句的占位符位置

應對上述問題給出的解決方案:

  • 使用數據庫連接池初始化連接資源

  • 將sql語句抽取到xml配置文件中

  • 使用反射、內省等底層技術,自動將實體與表進行屬性與字段的自動映射

什么是Mybatis

  • mybatis 是一個優秀的基于java的持久層框架,它內部封裝了jdbc,使開發者只需要關注sql語句本身,而不需要花費精力去處理加載驅動、創建連接、創建statement等繁雜的過程。

  • mybatis通過xml或注解的方式將要執行的各種 statement配置起來,并通過java對象和statement中sql的動態參數進行映射生成最終執行的sql語句。

  • 最后mybatis框架執行sql并將結果映射為java對象并返回。采用ORM思想解決了實體和數據庫映射的問題,對jdbc 進行了封裝,屏蔽了jdbc api 底層訪問細節,使我們不用與jdbc api 打交道,就可以完成對數據庫的持久化操作。

Mybatis的基本入門

③編寫Mybatis核心配置文件:mybatis-config.xml

④編寫映射文件UserMapper.xml

⑤編碼測試(先理解讀懂,后期不用)

導入MyBatis的坐標和其他相關坐標

<dependencies><!-- 連接數據庫必須的依賴 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><!-- 方便查看日志,導入該依賴后,控制臺可以打印更多日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><!-- mybatis依賴,mybatis開發只導入這個依賴即可 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

編寫Mybatis核心配置文件:mybatis-config.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><!--數據源環境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--數據庫的四個基本信息--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///test"/><property name="username" value="root"/><property name="password" value="135246"/></dataSource></environment></environments><!--加載映射文件--><mappers><mapper resource="cs/wy/dao/UserDao.xml"/></mappers></configuration>

4)編寫UserMapper映射文件

<?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寫接口的全類名 --><mapper namespace="cs.wy.dao.UserDao"><!--id寫接口中對應的方法名,這里相當于實現了接口中的方法resultType寫返回值類型的全類名--><select id="getUser" resultType="cs.wy.domain.User">-- 這里寫要執行的sql語句select * from user where id=1;</select></mapper>

編寫測試代碼

public class MybatisTest {@Testpublic void test01() throws IOException {// 指向mybatis的核心配置文件String resource = "mybatis-config.xml";// 加載核心配置文件到輸入流InputStream inputStream = Resources.getResourceAsStream(resource);// 通過核心配置文件創建一個sqlSessionFactory,相當于一個連接工廠SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// jdk7新特性 try with resourcetry (SqlSession session = sqlSessionFactory.openSession()) {// 形式類似于 app.getBean(UserDao.class)UserDao userDao = session.getMapper(UserDao.class);User user = userDao.getUser();System.out.println("user = " + user);}}}

MyBatis的增刪改查操作

MyBatis的插入數據操作,

編寫UserMapper映射文件

<?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寫接口的全類名 --><mapper namespace="cs.wy.dao.UserDao"><insert id="saveUser" parameterType="cs.wy.domain.User"><!-- #{}中的值必須是實體類中的屬性名稱 -->insert into user values (null ,#{username},#{password})</insert></mapper>

插入操作注意問題

  • 在映射文件中使用parameterType屬性指定要插入的數據類型,該屬性可以省略
  • Sql語句中使用#{實體屬性名}方式引用實體中的屬性值
  • sqlSession在操作前自動開啟了事務。并且插入操作涉及數據庫數據變化,所以要使用sqlSession對象顯示的提交事務,即sqlSession.commit()
MyBatis的修改數據操作

編寫UserMapper映射文件

<update id="updateUser" ><!-- #{}中的值必須是實體類中的屬性名稱 -->update user set username=#{username}, password=#{password} where id=#{id}</update>

插入操作注意問題

  • Sql語句中使用#{實體屬性名}方式引用實體中的屬性值

  • sqlSession在操作前自動開啟了事務。并且更新操作涉及數據庫數據變化,所以要使用sqlSession對象顯示的提交事務,即sqlSession.commit()

MyBatis的刪除數據操作

編寫UserMapper映射文件

<mapper namespace="userMapper"><delete id="delete" parameterType="java.lang.Integer">delete from user where id=#{id}</delete></mapper>

刪除操作注意問題

  • 刪除語句使用delete標簽

  • Sql語句中使用#{任意字符串}方式引用傳遞的單個參數

  • 刪除操作使用的API是sqlSession.delete(“命名空間.id”,Object);

MyBatis核心配置文件層級關系

MyBatis核心配置文件配置

settings 設置

  • mapUnderscoreToCamelCase =true | false(default)
  • mysql默認是大小寫不敏感的,所以數據庫表名和字段有_命名法的習慣
  • Java默認是大小敏感的,所以類名、屬性名一般會采用駝峰命名法
  • 命名不一致時,會造成無法正確傳值,這個時候可以將上述參數設置為true,會開啟自動轉換。
  • typeAliases 類型別名

    為單個類起別名

    <typeAliases><typeAlias alias="user" type="cs.wy.domain.User"/></typeAliases>
  • 批量為某個包下的所有類起別名
  • <typeAliases><-- 自動為該包下所有類起別名,并且大小寫不敏感--><package name="domain.blog"/></typeAliases>

    常用內置數據類型自動別名

    別名映射的類型
    _bytebyte
    _longlong
    _shortshort
    _intint
    _integerint
    _doubledouble
    _floatfloat
    _booleanboolean
    stringString
    byteByte
    longLong
    shortShort
    intInteger
    integerInteger
    doubleDouble
    floatFloat
    booleanBoolean
    dateDate
    decimalBigDecimal
    bigdecimalBigDecimal
    objectObject
    mapMap
    hashmapHashMap
    listList
    arraylistArrayList
    collectionCollection
    iteratorIterator

    4)environments標簽

    <!--數據源環境 指定默認環境名稱--><environments default="development"><!--指定當前環境名稱--><environment id="development"><!--指定事務管理類型是JDBC--><transactionManager type="JDBC"/><!--指定當前數據源類型時連接池--><dataSource type="POOLED"><!--數據庫的四個基本信息--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///test"/><property name="username" value="root"/><property name="password" value="135246"/></dataSource></environment></environments>

    其中,事務管理器(transactionManager)類型有兩種:

    • JDBC:這個配置就是直接使用了JDBC 的提交和回滾設置,它依賴于從數據源得到的連接來管理事務作用域。

    • MANAGED:這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命周期(比如 JEE 應用服務器的上下文)。 默認情況下它會關閉連接,然而一些容器并不希望這樣,因此需要將 closeConnection 屬性設置為 false 來阻止它默認的關閉行為。

    其中,數據源(dataSource)類型有三種:

    • UNPOOLED:這個數據源的實現只是每次被請求時打開和關閉連接。

    • POOLED:這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來。

    • JNDI:這個數據源的實現是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的引用。

    mapper標簽:該標簽的作用是加載映射的,加載方式有如下幾種:

    使用相對于類路徑的資源引用,例如:

    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

    使用完全限定資源定位符(URL),例如:

    <mapper url="file:///var/mappers/AuthorMapper.xml"/>

    使用映射器接口實現類的完全限定類名,例如:

    <mapper class="org.mybatis.builder.AuthorMapper"/>

    將包內的映射器接口實現全部注冊為映射器,例如:

    <package name="org.mybatis.builder"/>

    MyBatis相應API

    SqlSession工廠構建器:SqlSessionFactoryBuilder

    常用API:SqlSessionFactory build(InputStream inputStream)

    通過加載mybatis的核心文件的輸入流的形式構建一個SqlSessionFactory對象

    String resource = "org/mybatis/builder/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(inputStream);

    其中, Resources 工具類,這個類在 org.apache.ibatis.io 包中。Resources 類可以從類路徑下、文件系統或一個 web URL 中加載資源文件。

    SqlSession工廠對象:SqlSessionFactory

    SqlSessionFactory 有多個個方法創建SqlSession 實例。常用的有如下兩個:

    SqlSession會話對象

    SqlSession 實例在 MyBatis 中是非常強大的一個類。在這里你會看到所有執行語句、提交或回滾事務和獲取映射器實例的方法。

    執行語句的方法主要有:

    <T> T selectOne(String statement, Object parameter) <E> List<E> selectList(String statement, Object parameter) int insert(String statement, Object parameter) int update(String statement, Object parameter) int delete(String statement, Object parameter)

    操作事務的方法主要有:

    void commit() void rollback()

    總結

    以上是生活随笔為你收集整理的【SSM框架系列】Mybatis基本介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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