MyBatis知識點複習-02其他入門操作

MyBatis知識點複習-02其他入門操作

下面演示時只給出java代碼和添加在在User.xml裏面的mapper標籤下的關鍵操作代碼,其他的內容參見上篇(本教程是一環一環的,要接着看纔行)

上一篇:MyBatis知識點複習-01入門案例

下一篇:MyBatis知識點複習-03Dao與Mapper代理實現

一.模糊查詢操作

 [${}]:表示拼接SQL字符串
 [${value}]:表示要拼接的是簡單類型參數。
   注意:
   簡單類型:int,byte,short,long,float,double,char,boolean... String
  1、如果參數爲簡單類型時,${}裏面的參數名稱必須爲value(就是這5個字母,不可以改的)
  2、${}會引起SQL注入,一般情況下不推薦使用。但是有些場景必須使用${},比如order by ${colname}

User.xml關鍵內容:

    <select id="findUserByName" resultType="domain.User" parameterType="String">
        select  * from user where username like '%${value}%'
    </select>

java文件:

package test;
import domain.User;
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.InputStream;
public class TestUser {
    @Test
    public  void Test(){
        //讀取全局配置文件
        InputStream resourceAsStream = TestUser.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        //獲取工廠對象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        User findUserByName = (User)sqlSession.selectOne("findUserByName", "張小");
        System.out.println(findUserByName);
        //關閉SqlSession
        sqlSession.close();
    }
}

在這裏插入圖片描述
上面因爲查詢張小查詢到了一個數據,如果查詢有多條數據這時可以用sqlsession.selectList()方法,具體如下:

 List<User> findUserByName = (sqlSession.selectList("findUserByName", "張"));

打印如下
在這裏插入圖片描述

二.插入刪除更新操作

接下來爲了方便書寫修改後面的java代碼我都是在Test方法內部的:

package test;
import domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class TestUser {
    SqlSession sqlSession;
    @Before
    public  void beforeFun(){
        //讀取全局配置文件
        InputStream resourceAsStream = TestUser.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        //獲取工廠對象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
        sqlSession = build.openSession();
    }
    @Test
    public  void Test(){
		//代碼放在這
    }
    @After
    public void AfterFun(){
        //關閉SqlSession
        sqlSession.close();
    }
}

注意上面的@After與@Before是在Junit下的,不是其他包下面的,否則會失效

1.插入

清空Test裏的代碼添加下面代碼:

        User user = new User();
        user.setId(19);
        user.setBirthday(new Date());
        user.setAddress("北京");
        user.setUsername("李成");
        user.setSex("男");
        //insert的返回值影響的行數
        int affectedRwows = sqlSession.insert("insertUser", user);
        System.out.println(affectedRwows);
        sqlSession.commit();//提交事務,否則會事務回滾

User.xml關鍵內容:

    <insert id="insertUser" parameterType="domain.User">
        insert into user (id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

在這裏插入圖片描述
影響一行
在這裏插入圖片描述

2.刪除

        sqlSession.delete("deleteUserByName","李成");
        sqlSession.commit();//提交事務,否則會事務回滾

清空Test裏的代碼添加下面代碼:

    <delete id="deleteUserByName" parameterType="String">
        delete from user where username = #{vale}
    </delete>

User.xml關鍵內容:

    <delete id="deleteUserByName" parameterType="String">
        delete from user where username = #{vale}
    </delete>

在這裏插入圖片描述

3.修改

清空Test裏的代碼添加下面代碼:

    int update = sqlSession.update("updateUser", "王五");
    System.out.println(update);
    sqlSession.commit();

User.xml關鍵內容:

    <update id="updateUser" parameterType="String">
        update user set username = "王六" where username = #{name}
    </update>

在這裏插入圖片描述
影響行數:
在這裏插入圖片描述

三.插入自動返回主鍵操作

這個部分我們重用上面的插入的代碼;
清空Test裏的代碼添加下面代碼:

        User user = new User();
        user.setId(19);
        user.setBirthday(new Date());
        user.setAddress("北京");
        user.setUsername("李成");
        user.setSex("男");
        //insert的返回值影響的行數
        int affectedRwows = sqlSession.insert("insertUser", user);
        System.out.println(affectedRwows);
        System.out.println(user.getId());
        sqlSession.commit();//提交事務,否則會事務回滾

User.xml關鍵內容:

 <insert id="insertUser" parameterType="domain.User">
 		<!--keyProperty爲屬性的名字,在User表中id爲主鍵故填id-->
 		<!--order爲After表示將語句插入後將得到的id值複製給你傳入的User參數,這裏不要人爲的賦值id不然得到的便是0,同時也不建議使用before因爲得到結果一般不對-->
   <selectKey keyProperty="id" resultType="int" order="AFTER">
    SELECT LAST_INSERT_ID()
   </selectKey>
        insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    </insert>

在這裏插入圖片描述
在這裏插入圖片描述
上一篇:MyBatis知識點複習-01入門案例

下一篇:MyBatis知識點複習-03Dao與Mapper代理實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章