Mybatis的使用(mapper介面方式)

來源:互聯網
上載者:User

使用 Mapper 介面的方式,不用寫介面實作類別,直接完成資料庫操作,簡單方便。 為了協助大家更好地學習Mapper介面,小編總結了一些關於Mapper介面的知識點,希望能夠協助到有需要的人。

先上結構圖:

下面是具體的代碼:
一、User.java

實體類中的的get/set方法以及構造方法及toString方法就不貼了public class User {        private int id;        private String name;        private int age;}

二、UserMapper.java
這是mapper介面,面向介面編程的思想還是很重要的。也是本次博文最重要的部分。

介面定義有以下特點:

  1. Mapper 介面方法名和 UserMapper.xml 中定義的每個 sql 的 id 同名。

  2. Mapper 介面方法的輸入參數類型和 UserMapper.xml 中定義的 sql 的parameterType 類型相同。

  3. Mapper 介面的傳回型別和 UserMapper.xml 中定義的 sql 的 resultType 類型相同

注意建立表的方法,有註解@Param

package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper {    void createTable (@Param("tableName") String tableName);    void add(User user);    void del(int id);    void update(User user);    User getUser(int id);    User[] list();}

三、userMappers.xml
這裡需要注意
1.xml檔案的namespace要寫成mapper介面的路徑,像下面.

<mapper namespace="com.mi.mapper.UserMapper">

2.在寫動態建立表的語句時,要寫成${tableName},而不是#{}. 點擊查看兩者的區別

create table ${tableName}...

下面是完整代碼:包括建立表、CRUD

<?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,namespace的值習慣上設定成包名+sql對應檔名,這樣就能夠保證namespace的值是唯一的 --><mapper namespace="com.mi.mapper.UserMapper">    <!-- 建立表 -->    <update id="createTable" parameterType="String">        create table ${tableName} (id int primary key auto_increment,name varchar(20),age int)    </update>    <!-- 添加資料 -->    <insert id="add" parameterType="com.mi.beans.User">        insert into t_user(name,age) value(#{name},#{age})    </insert>    <!-- 刪除資料 -->    <delete id="del" parameterType="int">        delete from t_user where id = #{id}    </delete>    <!-- 修改資料 -->    <update id="update" parameterType="com.mi.beans.User">        update t_user set name=#{name},age=#{age} where id=#{id}    </update>    <!--根據id查詢得到一個user對象-->    <select id="getUser" parameterType="int"         resultType="com.mi.beans.User">        select * from t_user where id=#{id}    </select>    <!-- 查詢所有的使用者 -->    <select id="list" resultType="com.mi.beans.User">        select * from t_user;           </select></mapper>

四、conf.xml
這裡需要配置兩個東西

  • 配置JDBC的串連

  • 配置mapper.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="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>        <!-- 註冊userMapper.xml檔案 -->    <mappers>        <mapper resource="com/mi/mapping/userMappers.xml"/>    </mappers></configuration>

五、SqlSessionUtil.java
我在這裡寫了一個工具類,主要目的是要拿到sqlSession,因為之後每次操作資料庫都需要寫一遍,所以進行一次封裝.

package com.mi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil {      public static SqlSession getSqlSession() throws Exception{      String resource = "conf.xml";      //使用類載入器載入mybatis的設定檔(它也載入關聯的對應檔)      InputStream is = Resources.getResourceAsStream(resource);      //構建sqlSession的工廠      SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);      //建立能執行對應檔中sql的sqlSession      SqlSession sqlSession = sessionFactory.openSession();      return sqlSession;   }}

六、MyTest.java
這是測試類別,通過上面的工具類sqlSession,最關鍵的是下面這句

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

MyBatis通過動態代理的方式實現mapper介面,之後就好辦了,執行介面中準備好的方法就可以了。
注意不要忘了sqlSession.commit()和sqlSession.close().否則在執行過程中雖然不會報錯,但是資料庫中是不會有變化的.

這裡我只執行了建立表的方法.package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;import com.mi.util.SqlSessionUtil;public class MyTest {    public static void main(String[] args) throws Exception {        SqlSession sqlSession = SqlSessionUtil.getSqlSession();        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        userMapper.createTable("t_user");        sqlSession.commit();        sqlSession.close();    }}

使用 Mapper 介面的方式,不用寫介面實作類別,直接完成資料庫操作,簡單方便。
先上結構圖:

下面是具體的代碼:
一、User.java

實體類中的的get/set方法以及構造方法及toString方法就不貼了public class User {    private int id;    private String name;    private int age;

二、UserMapper.java
這是mapper介面,面向介面編程的思想還是很重要的。也是本次博文最重要的部分。

介面定義有以下特點:

  1. Mapper 介面方法名和 UserMapper.xml 中定義的每個 sql 的 id 同名。

  2. Mapper 介面方法的輸入參數類型和 UserMapper.xml 中定義的 sql 的parameterType 類型相同。

  3. Mapper 介面的傳回型別和 UserMapper.xml 中定義的 sql 的 resultType 類型相同

注意建立表的方法,有註解@Param

package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper {    void createTable (@Param("tableName") String tableName);    void add(User user);    void del(int id);    void update(User user);    User getUser(int id);    User[] list();}

三、userMappers.xml
這裡需要注意
1.xml檔案的namespace要寫成mapper介面的路徑,像下面.

<mapper namespace="com.mi.mapper.UserMapper">

2.在寫動態建立表的語句時,要寫成${tableName},而不是#{}. 點擊查看兩者的區別

create table ${tableName}...

下面是完整代碼:包括建立表、CRUD

<?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,namespace的值習慣上設定成包名+sql對應檔名, 這樣就能夠保證namespace的值是唯一的 --><mapper namespace="com.mi.mapper.UserMapper">    <!-- 建立表 -->    <update id="createTable" parameterType="String">        create table ${tableName} (id int primary key auto_increment,name varchar(20),age int)        </update>    <!-- 添加資料 -->    <insert id="add" parameterType="com.mi.beans.User">        insert into t_user(name,age) value(#{name},#{age})        </insert>    <!-- 刪除資料 -->    <delete id="del" parameterType="int">        delete from t_user where id = #{id}     </delete>    <!-- 修改資料 -->    <update id="update" parameterType="com.mi.beans.User">        update t_user set name=#{name},age=#{age} where id=#{id}        </update>    <!--根據id查詢得到一個user對象-->    <select id="getUser" parameterType="int"         resultType="com.mi.beans.User">        select * from t_user where id=#{id}        </select>    <!-- 查詢所有的使用者 -->    <select id="list" resultType="com.mi.beans.User">        select * from t_user;           </select></mapper>

四、conf.xml
這裡需要配置兩個東西

  • 配置JDBC的串連

  • 配置mapper.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="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>        <!-- 註冊userMapper.xml檔案      -->    <mappers>        <mapper resource="com/mi/mapping/userMappers.xml"/>    </mappers></configuration>

五、SqlSessionUtil.java
我在這裡寫了一個工具類,主要目的是要拿到sqlSession,因為之後每次操作資料庫都需要寫一遍,所以進行一次封裝.

package com.mi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil {      public static SqlSession getSqlSession() throws Exception{        String resource = "conf.xml";         //使用類載入器載入mybatis的設定檔(它也載入關聯的對應檔)        InputStream is = Resources.getResourceAsStream(resource);        //構建sqlSession的工廠        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);      //建立能執行對應檔中sql的sqlSession        SqlSession sqlSession = sessionFactory.openSession();        return sqlSession;    }}

六、MyTest.java
這是測試類別,通過上面的工具類sqlSession,最關鍵的是下面這句

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

MyBatis通過動態代理的方式實現mapper介面,之後就好辦了,執行介面中準備好的方法就可以了。
注意不要忘了sqlSession.commit()和sqlSession.close().否則在執行過程中雖然不會報錯,但是資料庫中是不會有變化的.

這裡我只執行了建立表的方法.package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;import com.mi.util.SqlSessionUtil;public class MyTest {    public static void main(String[] args) throws Exception {        SqlSession sqlSession = SqlSessionUtil.getSqlSession();        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        userMapper.createTable("t_user");        sqlSession.commit();        sqlSession.close();    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.