MyBatis入門(一)

  • MyBatis下載
    MyBatis下載地址

  • 導(dǎo)入jar包
    MyBatis的jar包只有一個, 但是它有一些依賴的jar包同樣需要導(dǎo)入:


    libs.png
  • 新建一個源文件夾: config

  • 在config目錄中新建一個配置文件: Configuration.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/test" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        //配置mapper的xml文件
    </mappers>
</configuration>
  • 創(chuàng)建一個pojo類, 與數(shù)據(jù)庫中的表對應(yīng)

  • 在config目錄下創(chuàng)建一個專門存放mapper 的xml文件的文件夾:mapper

  • 在mapper文件夾中新建Book.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.gongxm.gongxm.bean">
    <select id="findBookById" parameterType="string" resultType="com.gongxm.bean.Book">
        select * from books where id = #{id}
    </select>
</mapper>
  • 在Configuration.xml文件中加載Book.xml文件: 在mappers節(jié)點中配置:
<!-- resource是基于classpath查找的 -->
<mapper resource="mapper/Book.xml" />
  • 創(chuàng)建完以上內(nèi)容后, 整體目錄結(jié)構(gòu)如下:


    all.png
  • 測試代碼

    private SqlSessionFactory factory = null;
    
    
    @Before
    public void init() throws IOException {
        // 1.創(chuàng)建SqlSessionFactoryBuilder對象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        // 2.加載配置文件
        InputStream is = Resources.getResourceAsStream("Configuration.xml");

        // 3.創(chuàng)建SqlSessionFactory對象
        factory = builder.build(is);
    }

    @Test
    public void test1() throws IOException {

        // 4.創(chuàng)建SqlSession對象
        SqlSession session = factory.openSession();

        // 5.使用SqlSession對象執(zhí)行查詢,得到結(jié)果
        Book book = session.selectOne("findBookById", "a000Mm1WSnpoSjFIMVF4VE1LWEpKUT09");

        // 6.顯示結(jié)果
        System.out.println(book);
        // 7.釋放資源
        session.close();
    }

  • 查詢多條數(shù)據(jù): 在Book.xml文件中新增:
<!-- 查詢多條數(shù)據(jù)時, 返回類型只需要寫集合中的類型即可 -->
<select id="findBooksByName" parameterType="string" resultType="com.gongxm.bean.Book">
        select * from books where book_name like #{name}
</select>

測試代碼:

SqlSession session = factory.openSession();
List<Book> list = session.selectList("findBooksByName","%修真%");
if(list!=null) {
    for (Book book : list) {
        System.out.println(book.getBook_name());
    }
}

還可以這樣寫:
在Book.xml文件中的內(nèi)容:

<select id="findBooksByName" parameterType="string" resultType="com.gongxm.bean.Book">
    select * from books where book_name like '%${value}%'
</select>

測試代碼:

SqlSession session = factory.openSession();
List<Book> list = session.selectList("findBooksByName","修真");
if(list!=null) {
    for (Book book : list) {
        System.out.println(book.getBook_name());
    }
}

以上兩種方式的區(qū)別:

 #{xxx} : 表示占位符, 名字可以隨便起
 ${value} :  表示字符串連接, 名字必須是value, 不能隨便起
  • 插入一個數(shù)據(jù):
    在Book.xml配置文件:
<insert id="addBook" parameterType="com.gongxm.bean.Book">
    insert into books (id,book_name,book_link,author,category,collectStatus,cover,shortIntroduce,status)
    values (#{id},#{book_name},#{book_link},#{author},#{category},#{collectStatus},#{cover},#{shortIntroduce},#{status})
</insert>

測試代碼:

        Book book = new Book("99886128","gongxm", "http://www.gongxm.com/", "java入門", "java", 0, "http://www.gongxm.com/cover.jpg", "java入門必備神書!", "連載中");
        SqlSession session = factory.openSession();
        session.insert("addBook",book);
        session.commit();//提交事務(wù)
        session.close();
  • 如果在插入數(shù)據(jù)時, 想要獲取到該條數(shù)據(jù)的ID, 可以在insert節(jié)點中增加以下內(nèi)容:
<!--  keyProperty對應(yīng)的是pojo對象中的屬性, 
        resultType對應(yīng)的是pojo對象中的屬性的類型,
        order: 
              AFTER在插入數(shù)據(jù)之后執(zhí)行這個語句
              BEFOR在插入數(shù)據(jù)之前執(zhí)行這個語句,例如使用UUID做id的時候
-->
        <selectKey keyProperty="id" order="AFTER" resultType="int">
            select last_insert_id()  // 獲取到當(dāng)前事務(wù)中最后插入數(shù)據(jù)庫的ID
        </selectKey>
  • 刪除數(shù)據(jù)
    在Book.xml配置文件:
    <delete id="deleteBook" parameterType="string">
        delete from books where id=#{id}
    </delete>

測試代碼:

        SqlSession session = factory.openSession();
        session.delete("deleteBook", "99886128");
        session.commit();//提交事務(wù)
        session.close();
  • 更新數(shù)據(jù)
    在Book.xml配置文件:
    <update id="updateBook" parameterType="com.gongxm.bean.Book">
        update books set book_name=#{book_name},book_link=#{book_link},author=#{author},
        category=#{category},collectStatus=#{collectStatus},cover=#{cover},
        shortIntroduce=#{shortIntroduce},status=#{status} where id=#{id}
    </update>

測試代碼:

        Book book = new Book("99886128","gongxm2", "http://www.gongxm.com2/", "java入門2", "java2",1, "http://www.gongxm.com/cover2.jpg", "java入門必備神書2!", "完本");
        SqlSession session = factory.openSession();
        session.update("updateBook", book);
        session.commit();//提交事務(wù)
        session.close();
  • Dao 的mapper代理開發(fā)方式
1.Book.xml中的namespace必須是接口的全類名:
<mapper namespace="com.gongxm.dao.BookDao">
2.id必須跟接口中的方法名相同:
 <select id="findBookById" ...
3.parameterType要與接口中的參數(shù)類型一致
4.resultType要與接口中的返回值一致

代碼示例:

        SqlSession session = factory.openSession();
        BookDao dao = session.getMapper(BookDao.class);
        Book book = dao.findBookById("99886128");
        System.out.println(book);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,588評論 19 139
  • MyBatis是一個可以自定義SQL、存儲過程和高級映射的持久層框架。MyBatis 摒除了大部分的JDBC代碼、...
    七寸知架構(gòu)閱讀 6,825評論 6 56
  • 這幾天回顧了下以前學(xué)的mybatis,特寫這篇文章來總結(jié)一下,非技術(shù)人員請繞道~如果有什么疑問,可以關(guān)注我的公眾號...
    一只大黑貓閱讀 1,724評論 0 0
  • 由于之前我們已經(jīng)有了hibernate的基礎(chǔ),所以這里很多細(xì)節(jié)就不再提及。 一、基本架構(gòu) 這里從網(wǎng)絡(luò)上找了幾張my...
    yjaal閱讀 1,625評論 0 7
  • 我:x在美國有房有車,高中那會兒那么默默無聞。沒想到現(xiàn)在。。。那么好! 你:還有z,國外留過學(xué),拆遷還那么多房,你...
    c1cdf6cec045閱讀 125評論 0 0

友情鏈接更多精彩內(nèi)容