Mybatis入門案例之增刪改查


MyBatis:是一個支持普通sql查詢和存儲過程以及高級映射的優秀持久層框架,其主要思想是將代碼中大量的SQL語句剝離出來,配置到配置文件中,以實現SQL的靈活配置.

mybatis架構:

  1.核心配置文件mybatis-config.xml
      配置一些共用的全局配置東西
        數據源,緩存,日志,配置mapper文件路徑,等等
  2.映射文件XXXMapper.xml
    配置sql語句,輸入參數類型 返回結果集類型
  3.SqlSessinoFactory(會話工廠)
    通過加載核心配置文件的內容來創建會話(sqlSession)
  4.sqlSession(會話)
    通過會話中的方法來調用映射文件中的sql語句,就相當於可以執行sql語句
  5.Executor執行器(MyBatis框架內部的東西,框架會自動調用)
    分基本執行器和緩沖執行器
    當我們執行SqlSession的時候,框架內部就會自動調用Executor
  6.MapperStatement:
    內部封裝對象
    抽取映射文件xml中的內容(原本是string字符串)
    抽取當中的sql語句,參數 返回集 轉換成相對應的java對象

使用步驟:

  入門案例:查詢表中的某條數據 

  1.導入jar包
  2.配置核心配置文件
  3.編寫pojo類
     對應關系:
        表------------類
        字段----------屬性
        記錄----------對象
          當然類中有屬性相對應的get/set方法
  4.配置映射文件
  5.測試使用

1.導入jar包:

主要有:

  java連接數據庫的jar包  mybatis的包其依賴包(可以去mybaits官網下載)

 

2.編寫核心配置文件(mybatis-config.xml)  

  一般放置在src路徑下

<?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>
    <!--&lt;!&ndash;指定日志的具體實現&ndash;&gt;-->
    <!--<settings>-->
        <!--<setting name="logImp1" value="LOG4J"/>-->
    <!--</settings>-->
    <!--環境配置 連接的數據庫-->
    <environments default="mysql">
        <environment id="mysql">
            <!--指定事務管理類型 type="JDBC"指直接簡單使用了JDBC的提交和回滾設置-->
            <transactionManager type="JDBC"/>
            <!--數據源配置,POOLED是JDBC連接對象的數據源連接池的實現-->
            <!--企業開發中不能這個連接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatisday01"/>
                <property name="username" value="root"/>
                <property name="password" value="123456789+0"/>
            </dataSource>
        </environment>
    </environments>
    <!--mappers標簽用於告訴mybatis框架去哪里找持久化類的映射文件-->
    <mappers>
        <mapper resource="com/kylin/mapper/UserMapper.xml"/>
    </mappers>
    
</configuration>

 

3.編寫pojo類

  對應關系:
      表------------類
      字段----------屬性
      記錄----------對象
        當然類中有屬性相對應的get/set方法

package com.kylin.Pojo; import java.util.Date; public class User { private String  id;   //在樣例中時而是String,時而是int,記得根據需求改變
    private String username; private Date birthday; private String sex; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getId() { return id; } public void setId(String id) { this.id = id; } }

 

4.配置映射文件

<?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">
<!--namespace是命名空間,是一個mapper映射文件的唯一標識符,為了更好的定位 命名方式:包名+sql映射文件名 -->
<mapper namespace="com.kylin.mapper.UserMapper">
    <!-- id:該sql語句唯一標識符 parameterType:指定傳入參數類型 resuletType:返回結果集類型 #{} 占位符 相當於jdbc中的? ~~如果傳入的是基本類型(long double int boolean.....)~~里面的參數名可以隨便取 但是比較合適的化,就是是什么參數就寫什么名 如果傳入的是String的花 里面的取值應該是_parameter 比如下面的 id=${_parameter} -->
    <!--查詢單條記錄-->

    <!--注意: id屬性是String類型 -->
    <select id="findUserById" parameterType="java.lang.String" resultType="com.kylin.Pojo.User"> SELECT * FROM user WHERE id=${_parameter} </select>


    <!--select * from user where username like '%王%';-->
    <!--查詢符合條件的多個用戶 如果是返回的是集合,resultType中的類型是集合的反泛型具體指代的類型 ${} 拼接符 會有sql注入的風險 慎重使用 總結: = 用占位符#{} like 用拼接符${} 里面參數名一定要用value -->
    <!--查詢多條記錄-->
    <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.kylin.Pojo.User"> select * from user where username like '%${value}%'; </select>



    <!--插入單條記錄-->
    <!--insert into user(id,username,birthday,sex,address)values("2","kengken",'2009-06-08 23:53:17',"男","廣州");-->
    <!-- 如果傳入的是javabean類型(pojo類型) 那么占位符#{}中的變量名必須對應 javabean中對應的屬性名 有時候需要返回數據庫自增主鍵,可以使用mysql的函數:select LAST_INSERT_ID() -->


    <!--id屬性是int類型並且主鍵使用了auto_increment自增,使用mysql的LAST_INSERT_ID()-->
    <insert id="insertIntoUser" parameterType="com.kylin.Pojo.User">

      <!-- keyProperty 將返回的自增主鍵放到傳入參數的id中保存 order 相當於insert語句的執行順序 在INSERT語句執行之前是before,在INSERT語句執行之后執行是after resultType: 就是keyProperty中屬性的類型 在這里就是id類型 -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>



    <!--id屬性是string類型 使用mysql自帶的函數uuid();來返回一個隨即的字符串 注意:這里在插入數據的時候需要id字段,它的流程是:先查詢了之后返回到user對象的id屬性中, 就相當於是幫我們做了 setId部分的操作 -->
    <insert id="insertIntoUser2" parameterType="com.kylin.Pojo.User">
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> INSERT INTO user(id,username,birthday,sex,address) VALUES (#{id},#{username},#{birthday},#{sex},#{address}) </insert>


    <!--刪除單行記錄-->
    <!--delete from user where id=?-->
    <delete id="deleteUserById" parameterType="java.lang.String"> delete from user where id=#{id} </delete>


    <!--更新某行記錄-->
    <!--update user set username=${username} where id=${id}-->
    <update id="updateUserById" parameterType="com.kylin.Pojo.User"> update user set username=#{username} where id=#{id} </update>



    <!--關於參數的類型的選擇方式 如果傳的是一個參數的話,那么就直接寫其類型 但是如果是多個參數的話,那么傳的參數就是javabean類型,注意這時候占位符里面的參數要和javabean對象的屬性相匹配 -->
</mapper>

 

5.測試使用

package com.kylin.Test; import com.kylin.Pojo.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; public class Tone { @Test //查詢單條記錄
    public void f1() throws IOException { //讀取核心配置文件 //這里面的resources是mybatis框架里面的類
        String resource="config/mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //創建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //開啟會話
        SqlSession sqlSession=sqlSessionFactory.openSession(); //所調用的sql語句:namespace.myqsl的id //2個參數 第一個是sql語句 第二個是參數 可以是各種類型 int double String ...等等
        User user=sqlSession.selectOne("com.kylin.mapper.UserMapper.findUserById","150620004"); System.out.println(user.getId()); System.out.println(user.getUsername()); } @Test //查詢多條記錄
    public void f2() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); List<User> userList=sqlSession.selectList("com.kylin.mapper.UserMapper.findUserByUsername","王"); // System.out.println(userList);
        for (User u:userList){ System.out.println(u.getUsername()); } } @Test //插入單條記錄--主鍵為int類型,插入后返回自增主鍵
    public void f3() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); //2個參數,第一個參數對應相匹配的映射文件中的sql語句,第二個參數對應插入的javabean對象
 User user=new User(); System.out.println(user.getId()); user.setUsername("kylin"); user.setAddress("廣州大學"); user.setBirthday(new Date()); user.setSex("男"); sqlSession.insert("com.kylin.mapper.UserMapper.insertIntoUser",user); //提交事務 沒有提交事務的化 數據庫那邊並不會更新 //mybatis會自動開啟事務,但是並不會幫我們提交事務;所以需要我們手動提交事務
 sqlSession.commit(); //查看是否會返回自增的主鍵
 System.out.println(user.getId()); sqlSession.close(); } @Test //插入單條記錄,使用mysql自帶的uuid()函數來插入id屬性
    public void f4() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); User user=new User(); user.setUsername("xxx"); user.setBirthday(new Date()); user.setAddress("gzhu"); user.setSex("男"); System.out.println(user.getId()); sqlSession.insert("com.kylin.mapper.UserMapper.insertIntoUser2",user); System.out.println(user.getId()); sqlSession.commit(); sqlSession.close(); } @Test //通過id刪除某行記錄
    public void f5() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.delete("com.kylin.mapper.UserMapper.deleteUserById","1"); sqlSession.commit(); sqlSession.close(); } @Test
  //通過id修改某行記錄
public void f6() throws IOException { String resource="config/mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); User user=new User(); user.setUsername("zhuoqilin"); user.setId("2"); sqlSession.update("com.kylin.mapper.UserMapper.updateUserById",user); sqlSession.commit(); sqlSession.close(); } }

 

總結:

  本篇文章主要介紹了使用mybatis框架來實現基本的增刪改查操作,需要注意的是映射文件中的parameterType的設置以及resultType的設置,具體的設置都在映射文件中以注解的方式寫出,另外需要關注的就是主鍵的自增還有uuid()函數的使用.


免責聲明!

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



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