日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

玩转Mybatis —— 一个小demo,带你快速入门Mybatis

發布時間:2023/12/10 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩转Mybatis —— 一个小demo,带你快速入门Mybatis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


目錄

🤞Mybatis官網介紹

🤞Mybatis安裝

🤞Mybatis核心配置文件

🤞構建 SqlSessionFactory

🤞獲取 SqlSession

🤞通過 XML 定義已映射的 SQL 語句

🤞作用域(Scope)和生命周期

🤞編寫小CURDdemo,快速入門Mybatis


🤞Mybatis官網介紹

????????MyBatis 是一款優秀的持久層框架,它支持自定義 SQL存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。


🤞Mybatis安裝

??????? 我們這里使用的是Maven來構建項目,那我們只需要把下面的Mybatis的依賴坐標引的Maven的配置的文件(pom.xml)中就可以了。

pom.xml

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version> </dependency>

?version版本根據自身要求選擇即可,這里小夢用的是3.5.9的版本。


🤞Mybatis核心配置文件

????????Mybatis核心配置文件包含了對 MyBatis 系統的核心設置,包括獲取數據庫連接實例的數據源(DataSource)以及決定事務作用域和控制方式的事務管理器(TransactionManager)。當然配置不止這些,我們從官方文檔中可以看到關于Mybatis的一系列配置。

?????????MyBatis 的配置文件包含了會深深影響 MyBatis 行為的設置和屬性信息。所以說Mybatis核心配置文件很重要!一般配置文件名都統一叫mybatis-config.xml,當然叫什么都可以,但是官方推薦使用這個名字,那我們就不要亂起名字了。

????????剛開始我們做入門案例配置文件中可以不用配置那么多屬性,當我們的業務邏輯復雜時我們在配置其他屬性,這里小夢就配置了一個我們需要的數據源。

mybatis-config.xml

<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration核心配置文件--> <configuration><!--可以直接引入外部文件、可以在其中增加一些屬性配置、如果兩個文件有同一個字段,優先使用外部配置文件--><properties resource="db.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!--每一個Mapper.xml都需要在Mybatis核心配置文件中注冊!!!--><mappers><mapper resource="com/lm/learn/dao/UserMapper.xml"/></mappers> </configuration>

🤞構建 SqlSessionFactory

Mybatis官方介紹

????????每個基于 MyBatis 的應用都是以一個 SqlSessionFactory 的實例為核心的。SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個預先配置的 Configuration 實例來構建出 SqlSessionFactory 實例。

????????從 XML 文件中構建 SqlSessionFactory 的實例非常簡單,建議使用類路徑下的資源文件進行配置。 但也可以使用任意的輸入流(InputStream)實例,比如用文件路徑字符串或 file:// URL 構造的輸入流。MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法,使得從類路徑或其它位置加載資源文件更加容易。

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

🤞獲取 SqlSession

??????? 有了SqlSessionFactory ,我們就可以獲取SqlSession對象,SqlSession 提供了在數據庫執行 SQL 命令所需的所有方法。

SqlSession session = sqlSessionFactory.openSession();

??????? 我們把獲取 SqlSessionFactory 和 SqlSession 封裝到一個工具類里,方便我們獲取,增加代碼的復用性!

MybatisUtils

package com.lm.learn.utils;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 MybatisUtils {private static SqlSessionFactory sqlSessionFactory;static {try {//獲取sqlSessionFactory對象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}}

🤞通過 XML 定義已映射的 SQL 語句

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.lm.learn.dao.UserMapper"><select id="getUsers" resultType="com.lm.learn.pojo.User">select * from user;</select> </mapper>

?

🤞作用域(Scope)和生命周期

Mybatis官方介紹

SqlSessionFactoryBuilder

????????這個類可以被實例化、使用和丟棄,一旦創建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 實例的最佳作用域是方法作用域(也就是局部方法變量)。 你可以重用 SqlSessionFactoryBuilder 來創建多個 SqlSessionFactory 實例,但最好還是不要一直保留著它,以保證所有的 XML 解析資源可以被釋放給更重要的事情。


SqlSessionFactory

????????SqlSessionFactory 一旦被創建就應該在應用的運行期間一直存在,沒有任何理由丟棄它或重新創建另一個實例。 使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重復創建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞習慣”。因此 SqlSessionFactory 的最佳作用域是應用作用域。 有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。


SqlSession

????????每個線程都應該有它自己的 SqlSession 實例。SqlSession 的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。 絕對不能將 SqlSession 實例的引用放在一個類的靜態域,甚至一個類的實例變量也不行。 也絕不能將 SqlSession 實例的引用放在任何類型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你現在正在使用一種 Web 框架,考慮將 SqlSession 放在一個和 HTTP 請求相似的作用域中。 換句話說,每次收到 HTTP 請求,就可以打開一個 SqlSession,返回一個響應后,就關閉它。 這個關閉操作很重要,為了確保每次都能執行關閉操作,你應該把這個關閉操作放到 finally 塊中。


🤞編寫小CURDdemo,快速入門Mybatis

編寫pojo實體類

package com.lm.learn.pojo;public class User {private int id;private String username;private String pwd;public User() {}public User(int id, String username, String pwd) {this.id = id;this.username = username;this.pwd = pwd;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", pwd='" + pwd + '\'' +'}';} }

?編寫UserMapper接口

package com.lm.learn.dao;import com.lm.learn.pojo.User;import java.util.List;public interface UserMapper {List<User> getUsers();//根據id獲取用戶User getUserById(int id);//插入一條用戶數據int insertUser(User user);//修改一條用戶數據int updateUser(User user);//刪除一條用戶數據int deleteUser(int id);}

編寫UserMapper.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"><mapper namespace="com.lm.learn.dao.UserMapper"> <select id="getUsers" resultType="com.lm.learn.pojo.User">select * from user;</select><select id="getUserById" resultType="com.lm.learn.pojo.User" parameterType="Integer">select * from user where id = #{id};</select><insert id="insertUser" parameterType="com.lm.learn.pojo.User">insert into user values (#{id},#{username},#{pwd});</insert><update id="updateUser" parameterType="com.lm.learn.pojo.User">update user set username=#{username},pwd=#{pwd} where id=#{id};</update><delete id="deleteUser" parameterType="Integer">delete from user where id = #{id};</delete> </mapper>

在Mybatis-config核心配置文件中注冊UserMapper

?編寫UserTest測試類進行測試

package com.lm.learn.dao;import com.lm.learn.pojo.User; import com.lm.learn.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test;import java.util.List;public class UserTest {@Testpublic void getUsers(){//獲取SqlSession對象SqlSession sqlSession = MybatisUtils.getSqlSession();//獲取userMapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);//List<User> users = userMapper.getUsers();//注意點!!!//org.apache.ibatis.binding.BindingException: Type interface com.lm.learn.dao.UserMapper is not known to the MapperRegistry.for (User user : users) {System.out.println(user);}sqlSession.close();}@Testpublic void getUserId(){//獲取SqlSession對象SqlSession sqlSession = MybatisUtils.getSqlSession();//獲取userMapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.getUserById(2);System.out.println(user);sqlSession.close();}@Testpublic void insertUser(){//獲取SqlSession對象SqlSession sqlSession = MybatisUtils.getSqlSession();//獲取userMapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.insertUser(new User(4, "趙六", "456789"));sqlSession.commit();if (i > 0){System.out.println("插入成功");}sqlSession.close();}@Testpublic void updateUser(){//獲取SqlSession對象SqlSession sqlSession = MybatisUtils.getSqlSession();//獲取userMapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.updateUser(new User(2, "lisi", "987"));sqlSession.commit();if (i > 0){System.out.println("更新成功");}sqlSession.close();}@Testpublic void deleteUser(){//獲取SqlSession對象SqlSession sqlSession = MybatisUtils.getSqlSession();//獲取userMapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.deleteUser(4);sqlSession.commit();if (i > 0){System.out.println("刪除成功!");}sqlSession.close();} }



總結

以上是生活随笔為你收集整理的玩转Mybatis —— 一个小demo,带你快速入门Mybatis的全部內容,希望文章能夠幫你解決所遇到的問題。

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