Mybatis(一)——【快速入门、增删查改操作、核心配置文件描述及API】
目錄
原始JDBC操作
Mybatis簡介
Mybatis開發步驟:
Mybatis的映射文件概述
Mybatis的增刪改查操作
?MyBatis的核心配置文件概述
MyBatis核心配置文件層級關系
?MyBatis常用配置解析
Mybatis相應API
原始JDBC操作
原始jdbc操作(查詢數據)
原始jdbc操作(插入數據)
?原始jdbc操作的分析原始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 3 | Introduction
Mybatis開發步驟:
①添加MyBatis的坐標
②創建user數據表
③編寫User實體類
④編寫映射文件UserMapper.xml
⑤編寫核心文件SqlMapConfig.xml
⑥編寫測試類
①添加MyBatis的坐標和其它相關坐標
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>②創建user數據表
?③編寫User實體類
public class User {private int id;private String username;private String password;//省略get和set方法 }④編寫映射文件UserMapper.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="userMapper"><!--查詢操作--><select id="findAll" resultType="user">select * from user</select> </mapper>⑤編寫Mybatis核心文件SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!--數據源環境--><environments default="developement"><environment id="developement"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--加載映射文件--><mappers><mapper resource="com/longdi/mapper/UserMapper.xml"></mapper></mappers> </configuration>⑥編寫測試類
@Test//查詢操作public void test1() throws IOException {//獲得核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");//獲得session工廠對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);//獲得session回話對象SqlSession sqlSession = sqlSessionFactory.openSession();//執行操作 參數:namespace+idList<User> userList = sqlSession.selectList("userMapper.findAll");//打印數據System.out.println(userList);//釋放資源sqlSession.close();}Mybatis的映射文件概述
Mybatis的增刪改查操作
①Mybatis的插入數據操作
?編寫UserMapper映射文件
<mapper namespace="userMapper"> <!--插入操作--><insert id="save" parameterType="com.longdi.domain.User">insert into user values(#{id},#{username},#{password})</insert> </mapper>編寫插入實體的User代碼
@Test//插入操作public void test2() throws IOException {//模擬user對象User user = new User();user.setUsername("xxx");user.setPassword("abc");//獲得核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");//獲得session工廠對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);//獲得session回話對象SqlSession sqlSession = sqlSessionFactory.openSession(true);//執行操作 參數:namespace+idsqlSession.insert("userMapper.save",user);//釋放資源sqlSession.close();}插入操作注意問題:
插入語句使用insert標簽
在映射文件中使用parameterType屬性指定要插入的數據類型
Sql語句中使用#{實體屬性名}方式引用實體中的屬性值
插入操作使用的API是sqlSession.insert(“命名空間.id”,實體對象);
插入操作涉及數據庫數據變化,所以要使用sqlSession對象顯示的提交事務,即sqlSession.commit()
②Mybatis的修改數據操作
?編寫UserMapper映射文件
<mapper namespace="userMapper"> <!--修改操作--><update id="update" parameterType="com.longdi.domain.User">update user set username=#{username},password=#{password} where id=#{id}</update> </mapper>編寫修改實體的User代碼
@Test//修改操作public void test3() throws IOException {//模擬user對象User user = new User();user.setId(7);user.setUsername("lucy");user.setPassword("123");//獲得核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");//獲得session工廠對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);//獲得session回話對象SqlSession sqlSession = sqlSessionFactory.openSession();//執行操作 參數:namespace+idsqlSession.update("userMapper.update",user);//mybatis執行更新操作 提交事務 因為mybatis默認不提交事物sqlSession.commit();//釋放資源sqlSession.close();}修改操作注意問題:
修改語句使用update標簽
修改操作使用的API是sqlSession.update(“命名空間.id”,實體對象);
?
③Mybatis的刪除數據操作
?編寫UserMapper映射文件
<mapper namespace="userMapper"> <!--刪除操作--><delete id="delete" parameterType="int">delete from user where id=#{abc}</delete> </mapper>編寫刪除實體的User代碼
@Test//刪除操作public void test4() throws IOException {//獲得核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");//獲得session工廠對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);//獲得session回話對象SqlSession sqlSession = sqlSessionFactory.openSession();//執行操作 參數:namespace+idsqlSession.delete("userMapper.delete",8);//mybatis執行更新操作 提交事務sqlSession.commit();//釋放資源sqlSession.close();}刪除操作注意問題:
刪除語句使用delete標簽
Sql語句中使用#{任意字符串}方式引用傳遞的單個參數
刪除操作使用的API是sqlSession.delete(“命名空間.id”,Object);
?MyBatis的核心配置文件概述
MyBatis核心配置文件層級關系
?
?MyBatis常用配置解析
1.environments標簽
數據庫環境的配置,支持多環境配置
其中,事務管理器(transactionManager)類型有兩種:
①JDBC:這個配置就是直接使用了JDBC的提交和回滾設置,它依賴于從數據源得到的連接來管理事務作用域。
②MANAGED:這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命周期(比如JEE應用服務器的上下文)。默認情況下它會關閉連接,然而一些容器并不希望這樣,因此需要將closeConnection屬性設置為false來阻止它默認的關閉行為。
其中,數據源(dataSource)類型有三種:
①UNPOOLED:這個數據源的實現只是每次被請求時打開和關閉連接。
②POOLED:這種數據源的實現利用“池”的概念將JDBC連接對象組織起來。
③JNDI:這個數據源的實現是為了能在如EJB或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個JNDI上下文的引用。
2.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"/>
?
3. Properties標簽
?4.typeAliases標簽
?
上面我們是自定義的別名,mybatis框架已經為我們設置好的一些常用的類型的別名
Mybatis相應API
①SqlSession工廠構建器SqlSessionFactoryBuilder
常用API: SqISessionFactory build(InputStream inputStream)
通過加載mybatis的核心文件的輸入流的形式構建一個SqlSessionFactory對象
?其中,Resources 工具類,這個類在 org.apache.ibatis.io包中。Resources類幫助你從類路徑下、文件系統或一個web URL 中加載資源文件。
?
②SqlSession工廠對象SqlSessionFactory
SqlSessionFactory有多個個方法創建SqlSession實例。常用的有如下兩個:
?③SqlSession會話對象
SqISession實例在MyBatis中是非常強大的一個類。在這里你會看到所有執行語句、提交或回滾事務和獲取映射器實例的方法。執行語句的方法主要有:
操作事務的方法主要有:
①void commit()
②void rollback()
總結
以上是生活随笔為你收集整理的Mybatis(一)——【快速入门、增删查改操作、核心配置文件描述及API】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何关闭win10防火墙_Win技巧 |
- 下一篇: linux驱动程序设计21 Linux设