mybatis_3CRUD操做

一、namespace

namespace中的包名要和 Dao/mapper 接口的包名一致!java

二、select

選擇,查詢語句;sql

  • id : 就是對應的namespace中的方法名;
  • resultType:Sql語句執行的返回值!
  • parameterType : 參數類型!
  1. 編寫接口數據庫

    //根據ID查詢用戶
    User getUserById(int id);
  2. 編寫對應的mapper中的sql語句安全

    <select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
            select * from mybatis.user where id = #{id}
    </select>
  3. 測試mybatis

    @Test
        public void getUserById() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            User user = mapper.getUserById(1);
            System.out.println(user);
    
            sqlSession.close();
        }

三、Insert

<!--對象中的屬性,能夠直接取出來-->
    <insert id="addUser" parameterType="com.kuang.pojo.User">
        insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
    </insert>

四、update

<update id="updateUser" parameterType="com.kuang.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd}  where id = #{id} ;
    </update>

五、Delete

<delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id};
    </delete>

注意點:app

  • 增刪改須要提交事務!

六、分析錯誤

  • 標籤不要匹配錯
  • resource 綁定mapper,須要使用路徑!
<mapper resource="com/loading/dao/UserMapper.xml"/>
  • 程序配置文件必須符合規範!
  • NullPointerException,沒有註冊到資源!
  • 輸出的xml文件中存在中文亂碼問題!
  • maven資源沒有導出問題!
  • 當添加用戶和更新用戶時,返回值是User對象在調用其方法傳參時,要new 出對象

CRUD的主要代碼:maven

  1. Mapper接口的方法
public interface UserMapper {
    //查詢所有用戶
    List<User> getUserList();

    //根據ID查詢用戶
    User getUserById(int id);

    //根據ID刪除用戶
    int deleteUserById(int id);

    //增長用戶
    int insertUser(User user);

    //更新用戶
    int updateUser(User user);
}
  1. 對應的Mapper.xml註冊信息和sql編寫
<?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=綁定一個對應的Dao/Mapper接口-->
<mapper namespace="com.loading.dao.UserMapper">
    <select id="getUserList" resultType="com.loading.pojo.User">
        select * from mybatis.user;
    </select>

    <select id="getUserById" resultType="com.loading.pojo.User" parameterType="int">
        select * from mybatis.user where id = #{id};
    </select>

    <delete id="deleteUserById" parameterType="int" >
        /* delete from mybatis.user where id =1;*/
        delete from mybatis.user where id = #{id};
    </delete>

    <insert id="insertUser" parameterType="com.loading.pojo.User">
        /* insert into mybatis.user (id,name,pwd) values (1,"loading","12345");*/
       insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>

    <update id="updateUser" parameterType="com.loading.pojo.User" >
         /* update  mybatis.user set name = "胡歌", pwd = "12345" where id= 1; */
        update  mybatis.user set name =#{name}, pwd =#{pwd} where id=#{id};
    </update>

</mapper>
  1. 在測試類中進行編寫
@Test
    //增長用戶
    public void insertUser(){
        //獲取sqlSession對象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {

            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int i = mapper.insertUser(new User(2, "直直", "12345"));
            if(i>0){
                System.out.println("插入用戶成功");
            }
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }

    }

七、萬能Map

假設,咱們的實體類,或者數據庫中的表,字段或者參數過多,咱們應當考慮使用Map!測試

//萬能的Map
    //使用map增長用戶
    int insertUserMap(Map<String,Object> map);
<!--對象中的屬性,能夠直接取出來    傳遞map的key-->
    <insert id="insertUserMap" parameterType="map">

       insert into mybatis.user (id,name,pwd) values (#{userId},#{userName},#{passWord});
    </insert>
@Test
    //使用map插入對象,適合於數據規模較大,須要插入的數據不規整
    //或者使用在更新用戶的信息上,不須要所有更新操做等
    public void insertUserMap(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("userId","3");
        map.put("userName","");
        map.put("passWord","19980812");
        int i = mapper.insertUserMap(map);
        if (i>0){
            System.out.println("插入用戶成功");
        }

        sqlSession.commit();
        sqlSession.close();
    }

Map傳遞參數,直接在sql中取出key便可! 【parameterType="map"】spa

對象傳遞參數,直接在sql中取對象的屬性便可!【parameterType="Object"】code

只有一個基本類型參數的狀況下,能夠直接在sql中取到!

多個參數用Map,或者註解!

八、思考題

模糊查詢怎麼寫?

  1. Java代碼執行的時候,傳遞通配符 % % 比較安全 推薦使用

    List<User> userList = mapper.getUserLike("%李%");
  2. 在sql拼接中使用通配符! 可能存在sql注意 不安全

    <!-- select * from mybatis.user where id like =?
         select * from mybatis.user where id like =1 or 1=1-->
    select * from mybatis.user where name like "%"#{value}"%"

3.實現細節

  • 編寫接口
//模糊查詢
    List<User> getUserByLike(String name);
  • 編寫對應的Mapper.xml中的sql
<!--  select * from mybatis.user where name like  #{name};-->
      
    <select id="getUserByLike" resultType="com.loading.pojo.User" >
        select * from mybatis.user where name like  "%"#{name}"%";
    </select>
  • 編寫對應的測試類
@Test
    //模糊查詢 根據關鍵字去查詢
    public void getUserByLike(){
        //獲取sqlSession對象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserByLike("直");
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }

結果以下: User{id=1, name='直男', pwd='199868'} User{id=2, name='直直', pwd='12345'}

相關文章
相關標籤/搜索