您好,登錄后才能下訂單哦!
小編給大家分享一下Java中Mybatis框架增刪查改與核心配置的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
原始jdbc操作(查詢數據)
原始jdbc操作(插入數據)
原始jdbc操作的分析原始jdbc開發存在的問題如下:
①數據庫連接創建、釋放頻繁造成系統資源浪費從而影響系統性能
②sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。
③查詢操作時,需要手動將結果集中的數據手動封裝到實體中。插入操作時,需要手動將實體的數據設置到sql語句的占位符位置
應對上述問題給出的解決方案:
①使用數據庫連接池初始化連接資源
②將sql語句抽取到xml配置文件中
③使用反射、內省等底層技術,自動將實體與表進行屬性與字段的自動映射
①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的坐標
②創建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+id List<User> userList = sqlSession.selectList("userMapper.findAll"); //打印數據 System.out.println(userList); //釋放資源 sqlSession.close(); }
①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+id sqlSession.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+id sqlSession.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+id sqlSession.delete("userMapper.delete",8); //mybatis執行更新操作 提交事務 sqlSession.commit(); //釋放資源 sqlSession.close(); }
刪除操作注意問題:
刪除語句使用delete標簽
Sql語句中使用#{任意字符串}方式引用傳遞的單個參數
刪除操作使用的API是sqlSession.delete(“命名空間.id”,Object);
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框架已經為我們設置好的一些常用的類型的別名
①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()
看完了這篇文章,相信你對“Java中Mybatis框架增刪查改與核心配置的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。