1. 程式人生 > >基於MyBatis的增刪改查的基礎操作

基於MyBatis的增刪改查的基礎操作

MyBtais入門

  1. Mybatis和hibernate的區別
    • hibernate 是一個全表對映的框架,開發人員只需要定義好持久化物件及相對應的對映檔案,並且通過hibernate官方提供的方法就可以完成持久化操作,這過程中可以不需要掌握sql語句的書寫,就開發效率而言會高於mybatis

    • 缺點:

      • 對sql語句查詢的支援比較差
      • 更新資料時,需要傳送所以的欄位,不支援儲存過程
      • 不可通過優化sql來提升效能
    • mybatis是一個半自動對映的框架,需要手工提供POJO、SQL和對映關係相對較hibernate,mybatis需要手寫MyBatis的sql語句,工作量較大;

      但可以配置動態SQL,並且優化SQL;支援儲存過程,就大中型的專案而言,更推薦MyBatis的使用

    2.MyBatis的入門程式

    2.1 在專案中引入jar包:
    MyBatis所需jar包

    2.2 建立資料庫

    -- 建立資料庫,名稱為 mybatis_study
    create database mybatis_study;
    -- 選中名稱為 mybatis_study的資料庫
    use mybatis_study;
    -- 建立使用者表,
    create table user(
    
    # id 整數型別,為主鍵、自動遞增
    
    id int primary key auto_increment,
    
    # 使用者名稱 字串型別,長度30
    個字元 username varchar(30), # 密碼 字串型別,長度30個字元 password varchar(30) );

    2.3 持久化類

    package cn.javabs.mybatisdemo.pojo;
    public class User{
       private Integer id;
       private String username;
       private String password;
       // 生成getter和setter方法--快捷鍵是---> alt +shift+s  選擇r
       // 覆寫 tostring方法--快捷鍵是---> alt +shift+s  選擇 s
    }

    2.4 持久化對映資訊配置檔案

    在src下建立cn.javabs.mybatisdemo.mapper包,用於存放對映檔案,命名為UserMapper.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="cn.javabs.mapper.UserMapper">
    
    <!-namespace的屬性值命名規範為:對映資訊檔案所在的包名+對映檔名稱-->
    <mapper namespace ="cn.javabs.mybatisdemo.mapper.UserMapper">
    <!--insert標籤代表插入標籤,parameterType為傳入引數的型別-->
    <insert id="addUser" parameterType="cn.javabs.mybatis.pojo.User">
        insert into user(id,username,password) values(#{id},#{username},#{password})
    </insert>
    <mapper>

    2.5 持久化核心配置檔案:

    在src下建立一個xml檔案,命名為mybatis-config.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="mysql">
            <environment id="mysql">
                <transactionManager type="jdbc"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql:///user"/>
                    <property name="username" value="root"/>
                    <property name="password" value="sorry"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="cn/javabs/mapper/UserMapper.xml" />
        </mappers>
       </configuration>

  • 新增使用者

    public class TestMybatisData{
       @Test
    public void addUserTest(){
        // 通過位元組輸入流獲取核心配置檔案
        InputStream is = TestMybatisData.class.getClassLoader.getResouceAsStream("mybatis-config");
        // 構建Sql會話工廠物件
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuild().builder(is);
        // 通過會話工廠物件獲取session
           SqlSession session =  sessionFactory.openSession();
           // 例項化持久化物件,並且完成賦值操作
           User u = new User();
           u.setId(3);
           u.setUsername("李白");
           //insert 中傳入的第一個引數為對映檔案的全包名+對映檔名
           //              第二個引數為持久化物件
          int rows =  session.insert("cn.javabs.mybatisdemo.mapper.UserMapper.addUser",u);
          if(rows > 0){
              System.out.println("執行成功,已插入"+rows+"條語句");
          }else{
                System.out.println("執行失敗);
          }
    }
    }
    

  • 刪除使用者

       @Test
    public void delUserById() {
        InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sessionFactory.openSession();
        User u = new User();
        u.setId(3);
        int rows = session.delete("cn.javabs.mapper.UserMapper.deleteUserById",u);
        if(rows>0){
            System.out.println("語句執行成功,刪除"+rows+"條數");
        }else{
            System.out.println("刪除語句失敗");
        }
        session.commit();
        session.close();
    }     

    對映配置檔案:

    <delete id="deleteUserById" parameterType="Integer">
        delete from user where id = #{id}
    </delete>

  • 更改使用者

       @Test
    public void updateUserTest {
        InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sessionFactory.openSession();
        User u = new User();
        u.setId(31);
        u.setUsername("趙雲");
        int rows = session.update("cn.javabs.mapper.UserMapper.updateUserById", u);
        if(rows > 0){
            System.out.println("更新了"+rows+"條記錄");
        }else{
            System.out.println("更新失敗");
        }
    
        session.commit();
        session.close();
    }

    配置檔案可以更改為

    <update id="updateUserById" parameterType="cn.javabs.po.User">
        update user set username = #{username} where id = #{id}
    </update>

  • 查詢全部使用者

       @Test
    public void findAll() {
        InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sessionFactory.openSession();
        User u = new User();
        u.setId(3);
         List<Object> list = session.selectList("cn.javabs.mapper.UserMapper.queryUser");
    
        if(list.size()>0){
            for (int i = 1; i < list.size(); i++) {
                System.out.println("。。。"+list.toString());
            }
        }else{
            System.out.println("查詢語句失敗");
        }
        session.commit();
        session.close();
    }

    配置檔案可以更改為:

    <select id="queryUser"  resultType="cn.javabs.po.User">
        select * from user
    </select>

  • 根據Id查詢使用者

    @Test
    public void findUserById() {
        InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sessionFactory.openSession();
        User u = new User();
        u.setId(31);
        u = session.selectOne("cn.javabs.mapper.UserMapper.queryUserById", u);
        if(u != null ){
            System.out.println("當前使用者是:"+u);
        }else{
            System.out.println("查詢失敗");
        }
    
        session.commit();
        session.close();
    }

    配置檔案可以更改為

    <select id="queryUserById" parameterType="Integer" resultType="cn.javabs.po.User">
        select * from user where id  = #{id}
    </select>