MyBatis入門學習筆記

來源:互聯網
上載者:User

MyBatis入門學習筆記

說到mybatis,我們首先說說ibatis,mybatis3.X是ibatis2.X的後期 版本,功能比ibatis強大了很多。

1、mybatis和ibatis比較

1.1、在 關係映射方面,mybatis相對ibatis的“巢狀查詢”,多了“嵌套結果"查詢的方式,巢狀查詢會引發N+1查詢問題,而嵌套結果查詢可有效 避免。

1.2、mybatis實現了dao介面和xml對應檔的綁定,這使得在ibatis中無多大卵用的namespace在mybatis中派上了用場,命名空間唯一來保證xml設定檔和dao類的一一綁定。

1.3、mybatis提供了新的功能:註解,並且新增了ognl運算式,簡化xml的配置 ,另外mybstis中的xml配置方式及dtd命名有了一些變化,使得在mybatis中xml映射及配置更加條理化。

2、入門:

2.1、mybatis簡介;

MyBatis是支援普通SQL查詢預存程序進階映射的優秀持久層架構。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將介面和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成資料庫中的記錄.

MyBatis入門學習教程 

Java實戰應用:Mybatis實現單表的增刪改

[Java][Mybatis]物理分頁實現

Mybatis快速入門教程

Mybatis的關於批量資料操作的測試

Mybatis中對List<Object> 對象List的批處理插入操作

2.2、加入jar包

【mybatis】

      mybatis-3.1.1.jar

【MYSQL驅動包】
mysql-connector-java-5.1.7-bin.jar

2.3、建立資料表

2.4、添加mybatis設定檔conf.xml(主要用來註冊xml對應檔和串連資料來源)

樣本:(在配置過程中沒有提示的朋友可以將dtd加入eclipse配置即可。)

其中資料來源配置可將設定檔放到peoperties檔案中,具體如下:

<properties resource="db.properties"/>

 

<property name="driver" value="${driver}" />

<property name="url" value="${url}" />

<property name="username" value="${username}" />

<property name="password" value="${password}" />

<?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="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" />

                                  <property name="username" value="root" />

                                  <property name="password" value="root" />

                          </dataSource>

                  </environment>

        </environments>

</configuration>

2.5定義pojo類

2.6為實體類定義別名

<typeAliases>

         <--! <typeAlias type="com.gsau.mybatis.bean.User" alias="_User"/>-->

<!-- 
類層級的別名映射
-->

        <package name="com.gsau.mybaits.bean"/>

<!-- 
包層級的別名映射,這時pojo類要放到同一包中,如上面的com.gsau.mybaits.bean
-->

</typeAliases>

2.7定義sql對應檔XXX.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="com.gsau.mybatis_test.test1.XXX">

      <select id="getUser" parameterType="int"

              resultType="com.gsau.mybatis.bean.User">

              select * from users where id=#{id}

      </select>

</mapper>

2.8在設定檔中註冊xml對應檔

<mappers>

        <mapper resource="com/gsau/mybatis_test/test1/XXX.xml"/>

</mappers>

2.9編寫測試

public class Test {

        public static void main(String[] args) throws IOException {

                  String resource = "conf.xml";

                  //載入mybatis的設定檔(它也載入關聯的對應檔)

                  Reader reader = Resources.getResourceAsReader(resource);

                  //構建sqlSession的工廠

                  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

                  //建立能執行對應檔中sql的sqlSession

                  SqlSession session = sessionFactory.openSession();

                  //映射sql的標識字串

                  String statement = "com.gsau.mybatis.bean.userMapper"+".selectUser";

                  //執行查詢返回一個唯一user對象的sql

                  User user = session.selectOne(statement, 1);

                  System.out.println(user);

        }

}

3.1資料表的CRUD 操作

在沒有配置別名映射的時候參數類型prametwrType以及結果類型resultType都需要寫出實體類的全類名。以上配置使用的是包層級的別名映射。

<insert id="insertUser" parameterType="User">

        insert into users(name, age) values(#{name}, #{age});

</insert>

 

<delete id="deleteUser" parameterType="int">

        delete from users where id=#{id}

</delete>

                 

<update id="updateUser" parameterType="User">

        update users set name=#{name},age=#{age} where id=#{id}

</update>

                 

<select id="selectUser" parameterType="int" resultType="User">

        select * from users where id=#{id}

</select>

                 

<select id="selectAllUsers" resultType="User">

        select * from users

</select>

3.2在conf.xml中註冊對應檔

3.3在dao中調用sql對應檔

4、註解的實現

4.1定義sql映射的介面

public interface UserMapper {

        @Insert("insert into users(name, age) values(#{name}, #{age})")

        public int insertUser(User user);

 

        @Delete("delete from users where id=#{id}")

        public int deleteUserById(int id);

                         

        @Update("update users set name=#{name},age=#{age} where id=#{id}")

        public int updateUser(User user);

 

        @Select("select * from users where id=#{id}")

        public User getUserById(int id);

 

        @Select("select * from users")

        public List<User> getAllUser();

}

4.2在conf.xml中註冊 此介面

<mapper class="com.gsau.mybatis.crud.ano.UserMapper"/>

4.3在dao中調用

4.4可加入log4j設定檔,有properties和xml兩種形式,方便找錯,網上很多的(記得添加log4j的jar包)。

5、如果結果類型是多個可使用resultMap,將resultType替換,或者給查詢結果列定義別名和實體類對應。

樣本:

<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">

        select * from orders where order_id=#{id}

</select>

 

<resultMap type="_Order" id="orderResultMap">

        <id property="id" column="order_id"/>

        <result property="orderNo" column="order_no"/>

        <result property="price" column="order_price"/>

</resultMap>

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.