您好,登錄后才能下訂單哦!
本篇內容主要講解“MyBatis配置與CRUD使用的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MyBatis配置與CRUD使用的方法是什么”吧!
namespace:命名空間 必須綁定一個對應Mapper接口
使用全限定名: com.yuqu.Dao.UserMapper
id:對應上面的Mapper接口下面的某一方法名
resultType:表示返回結果類型 如:com.yuqu.pojo.User
parameterType:參數類型,基本數據類型通常忽略不寫
增刪改切記提交事務:sqlSession.commit();
在確保已經配置好了mybatis-config.xml核心配置文件之后,我們每次需要操作sql時,就只需要操作接口UserMapper和UserMapper.xml配置文件即可
UserMapper.xml
<mapper namespace="com.yuqu.dao.UserMapper"> <select id="getUserList" resultType="com.yuqu.pojo.User"> select * from testmybatis.tb_user; </select> <select id="getUserById" parameterType="int" resultType="com.yuqu.pojo.User"> select * from testmybatis.tb_user where id = #{id}; </select> <insert id="insertUser" parameterType="com.yuqu.pojo.User"> insert into testmybatis.tb_user (id,username,password,gender,addr) values(#{id},#{username},#{password},#{gender},#{addr}); </insert> <update id="updateUser" parameterType="com.yuqu.pojo.User"> update testmybatis.tb_user set username=#{username},password=#{password},gender=#{gender},addr=#{addr} where id = #{id}; </update> <delete id="deleteUser" parameterType="int"> delete from testmybatis.tb_user where id = #{id}; </delete> </mapper>
Test代碼(僅以添加為例)
@Test public void testInsertUser(){ // 獲取SqlSession SqlSession sqlSession = MyBatisUtils.getSqlSession(); // 執行sql UserMapper mapper = sqlSession.getMapper(UserMapper.class); int res = mapper.insertUser(new User(4, "趙六", "1234", '妖', "鄭州")); if (res > 0){ System.out.println("插入成功!"); // 增刪改必須提交事務 sqlSession.commit(); } }
上述UserMapper.xml所示,如果參數過多時,當我們進行添加操作或者修改操作就會非常麻煩。所以,可以優化采用Map來進行可選參數。以查詢用戶selectUser為例:
// UserMapper接口 // 查詢用戶 Map入參 簡單實現模糊查詢 int selectUser2(Map<String,Object> map); // UserMapper.xml <select id="selectUser2" parameterType="map" resultType="com.yuqu.pojo.User"> select * from testmybatis.tb_user where username = #{helloName}; </select> // @Test @Test public void testSelectUser2(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<String, Object>(); map.put("helloName","順子"); User user = mapper.selectUser2(map); System.out.println(user); sqlSession.close(); }
map傳遞參數,可以直接在sql中獲取key,實現定制化參數
對象傳遞參數,直接在sql中取出sql的對象屬性。但要保證字段名相同
基本數據類型時直接在sql中獲取
// UserMapper // 模糊查詢用戶 List<User> getUserLikeList(String value); // UserMapper.xml <select id="getUserLikeList" resultType="com.yuqu.pojo.User"> select * from testmybatis.tb_user where username like #{value}; </select>
還有一種方式就是直接把sql固定寫死,獲取用戶輸入的一個穩定的值
select * from testmybatis.tb_user where username like "%"#{value}"%";
參考mybatis官網給出的配置信息:
configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)
mybatis可以配置多種環境,但每個sqlSessionFactory智能選擇一個環境
一個數據庫對應一個SqlSessionFactory
我們可以在environments
元素下配置多個環境environment
,每個環境都需要設置單獨的id,當我們需要用到哪一個的時候就需要將default設置為哪一個環境的id
<environments default="development"><environments>
environments下包含
事務管理器transactionManger
<transactionManager type="JDBC"> <property name="skipSetAutoCommitOnClose" value="true"/> </transactionManager>
事務管理器不僅有JDBC一種,還有一種 MANAGED
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
MyBatis官網提示: 如果你正在使用 Spring + MyBatis,則沒有必要配置事務管理器,因為Spring 模塊會使用自帶的管理器來覆蓋前面的配置
數據源DataSource
之前學過的比如dbcp、c3p0、druid等等。用于連接數據庫
mybatis內置了三種數據源:type="[UNPOOLED|POOLED|JND]"
UNPOOLED:表示無池連接,用完即銷毀
POOLED:有池連接,用完后回收等待下次使用。(默認情況使用)
JND:表示正常連接
屬性可以通過外部文件配置,也可以在Properties的子元素當中配置,在Properties子元素配置如下示例:
<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://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments>
也可以通過典型的Java屬性文件進行配置,比如db.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&;useUnicode=true&;characterEncoding=UTF-8&;serverTimezone=UTC
username=root
password=123456
最后價格文件用properties標簽引入到mybatis-config.xml中,環境則更改為初始形式
<!-- 引入外部資源 --> <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>
通過官網可以知道,我們也可以將db.properties中的配置信息只寫一半,另一半在引入的同時用雙標簽閉合,在其中用properties的子標簽property重新引入即可
<properties resource="db.properties" > <property name="username" value="root"/> <property name="password" value="123456"/> </properties>
如果同時存在于外部文件和property中,優先使用外部文件的配置信息
typeAliases用于簡化全限定名的書寫,僅限于在xml中配置
指定全限定類名別名:
<typeAliases> <typeAlias type="com.yuqu.pojo.User" alias="user" /> </typeAliases>
type代表全限定名,將其映射為一個簡化名稱 user。如上所示在需要用到com.yuqu.pojo.User的地方就可以替換成user
指定包名配置
<typeAliases> <package name="com.yuqu.pojo"/> </typeAliases>
經此配置后,mybatis會自動查找在com.yuqu.pojo下的所需Java Bean。
在沒有對實體類添加注解用法:默認使用Bean的首字母小寫的非限定類名來作為它的別名
添加注解的用法:
@Alias("hello") public class User { //... }
接下來就可以在任何要用com.yuqu.pojo.User的地方使用hello代替
建議在實體類較少的情況下使用第一種指定全限定類名的別名
實體類較多時可以使用指定包名配置
其他的Java類型內建的別名可以參考MyBatis官網
在定義sql映射語句之前,首先我們要告訴mybatis去哪里獲取這些語句。這個時候就需要用到映射器mappers,mybatis根據映射的路徑去找到對應的文件或者接口再去執行sql語句
映射器使用一:使用相對于類路徑的資源引用(建議使用)
<mappers> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers> // 如果將Mapper文件直接放在resource下就可以改成 <mappers> <mapper resource="PostMapper.xml"/> </mappers>
映射器使用二:使用class文件的完全限定類名
<mappers> <mapper class="org.mybatis.builder.PostMapper" /> </mappers>
接口和它的Mapper配置文件必須在同一包下!
接口和它的Mapper配置文件必須同名!
映射器使用使用三:將包內的映射器接口全部注冊為映射器
<mappers> <package name="org.mybatis.builder"/> </mappers>
接口和它的Mapper配置文件必須在同一包下!
接口和它的Mapper配置文件必須同名!
錯誤的使用生命周期和作用域會導致非常嚴重的并發問題
SqlSessionFactoryBuilder:
創建SqlSessionFactory工廠使用,一旦創建了SqlSessionFactory就不再需要使用它
最佳作用域是方法域(局部方法變量)
SqlSessionFactory:
SqlSessionFactory用于生產SqlSession實例
一旦創建就應該一直存在于程序的運行期間,不要丟棄或嘗試重新創建另一個SqlSessionFactory
可以采用單例模式來保證唯一的SqlSessionFactory
最佳作用域是全局作用(應用作用域)
SqlSession:
SqlSession用于執行已映射的sql指令
每個線程都有自己的SqlSession實例,因為它不是線程安全的不能被共享
最佳作用域是方法域或者請求域
到此,相信大家對“MyBatis配置與CRUD使用的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。