Java MyBaties基本使用一


一,MyBaties簡介

  1.1 什么是mybaties

  1.2 mybaties環境搭建

二,MyBaties操作

  2.1 插入

  2.2 修改

  2.3 刪除

三,MyBaties配置文件

  3.1  mybaties核心配置文件層級關系

  3.2 常用配置文件解析

四,MyBatiesAPI

  4.1 SqlSession工廠構造器SqlSessionFactoryBuilder

  4.2 SqlSession工廠對象SqlSessionFactory

  4.3 SqlSession會話對象

 

一,MyBaties簡介

  1.1 什么是mybaties

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

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

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

  1.2 mybaties環境搭建

  開發步驟: 

    ①添加MyBatis的坐標

    ②創建user數據表

    ③編寫User實體類

    ④編寫映射文件UserMapper.xml

    ⑤編寫核心文件SqlMapConfig.xml

    ⑥編寫測試類

  導入坐標:

<!--mybatis坐標-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<!--mysql驅動坐標-->
<dependency>    
    <groupId>mysql</groupId>   
    <artifactId>mysql-connector-java</artifactId>    
    <version>5.1.6</version>    
    <scope>runtime</scope>
</dependency>
<!--單元測試坐標-->
<dependency>    
    <groupId>junit</groupId>    
    <artifactId>junit</artifactId>    
    <version>4.12</version>    
    <scope>test</scope>
</dependency>
<!--日志坐標-->
<dependency>    
    <groupId>log4j</groupId>    
    <artifactId>log4j</artifactId>    
    <version>1.2.12</version>
</dependency>

  創建user表:

   編寫User類:

public class User {    
    private int id;    
    private String username;    
    private String password;
    //省略get個set方法
}

  編寫UserMapper映射文件:

<?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="com.itcast.domain.User">        
        select * from User    
    </select>
</mapper>

  編寫MyBaties核心配置文件:

<!DOCTYPE configuration PUBLIC "-//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="root"/>            
            </dataSource>        
        </environment>    
    </environments>    
    
    <mappers> 
        <mapper resource="com/itcast/mapper/UserMapper.xml"/> 
    </mappers>
</configuration>

  測試:

//加載核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲得sqlSession工廠對象
SqlSessionFactory sqlSessionFactory = new            
                           SqlSessionFactoryBuilder().build(resourceAsStream);
//獲得sqlSession對象
SqlSession sqlSession = sqlSessionFactory.openSession();
//執行sql語句
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印結果
System.out.println(userList);
//釋放資源
sqlSession.close();

  映射文件解析:

二,MyBaties操作

  2.1 插入

  編寫UserMapper映射文件:

<mapper namespace="userMapper">    
    <insert id="add" parameterType="com.itcast.domain.User">        
        insert into user values(#{id},#{username},#{password})    
    </insert>
</mapper>

  編寫插入實體User代碼:

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int insert = sqlSession.insert("userMapper.add", user);
System.out.println(insert);
//提交事務
sqlSession.commit();
sqlSession.close();

  注意事項:

• 插入語句使用insert標簽

• 在映射文件中使用parameterType屬性指定要插入的數據類型

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

• 插入操作使用的API是sqlSession.insert(“命名空間.id”,實體對象);

• 插入操作涉及數據庫數據變化,所以要使用sqlSession對象顯示的提交事務,即sqlSession.commit() 

  2.2 修改

  編寫UserMapper映射文件:

<mapper namespace="userMapper">
    <update id="update" parameterType="com.itcast.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
</mapper>

  編寫修改實體User的代碼:

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int update = sqlSession.update("userMapper.update", user);
System.out.println(update);
sqlSession.commit();
sqlSession.close();

  注意事項:

• 修改語句使用update標簽

• 修改操作使用的API是sqlSession.update(“命名空間.id”,實體對象);

  2.3 刪除

  編寫UserMapper映射文件:

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

  編寫刪除數據的代碼:

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("userMapper.delete",3);
System.out.println(delete);
sqlSession.commit();
sqlSession.close();

  注意事項:

• 刪除語句使用delete標簽

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

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

  總結:

增刪改查映射配置與API:
查詢數據: List<User> userList = sqlSession.selectList("userMapper.findAll");
    <select id="findAll" resultType="com.itcast.domain.User">
        select * from User
    </select>
添加數據: sqlSession.insert("userMapper.add", user);
    <insert id="add" parameterType="com.itcast.domain.User">
        insert into user values(#{id},#{username},#{password})
    </insert>
修改數據: sqlSession.update("userMapper.update", user);
    <update id="update" parameterType="com.itcast.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
刪除數據:sqlSession.delete("userMapper.delete",3);
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>

三,MyBaties配置文件

  3.1  mybaties核心配置文件層級關系

  3.2 常用配置文件解析

  enviroments標簽:

  數據庫環境的配置,支持多環境配置:

其中,事務管理器(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"/>

  Properties標簽:實際開發中,習慣將數據源的配置信息單獨抽取成一個properties文件,該標簽可以加載額外配置的properties文件

 

 

   typeAliases標簽:

  類型別名是為Java 類型設置一個短的名字。原來的類型名稱配置如下

 

 

 

   配置typeAliases,為com.itheima.domain.User定義別名為user:

   上面我們是自定義的別名,mybatis框架已經為我們設置好的一些常用的類型的別名:

四,MyBatiesAPI

  4.1 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 中加載資源文件。

  4.2 SqlSession工廠對象SqlSessionFactory

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

  4.3 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() 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM