3、mybatis-增删查改

1、namespace
namespace中的包名要和Dao/Mapper接口名一致
2、select,选择,查询语句
● id:对应的就是namespace中的方法名
● resultType:Sql语句执行的返回值
● parameterType:参数类型
步骤
● 1、编写接口
//查询所有用户
List getUserList();
● 2、编写对应的mapper中对应的sql语句

   <select id="getUserList" resultType="cn.zhy.pojo.User">
        select *
        from mybatis.user;
    </select>
    <select id="getUserId" resultType="cn.zhy.pojo.User" parameterType="int">
        select *
        from mybatis.user
        where id = #{id}

    </select>

● 3、测试

    @Test
    public void test() {
        //第一步获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //方式一、getMapper
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.getUserList();
        //方式二(过时)
//        List<User> userList = sqlSession.selectList("cn.zhy.dao.UserDao.getUserList");
        for (User user : userList) {
            System.out.println(user);
        }
        //关闭SqlSession
        sqlSession.close();
    }

@Test
public void getUserById() {
//第一步获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();

UserMapper mapper = sqlSession.getMapper(UserMapper.class);

User userId = mapper.getUserId(2);
System.out.println(userId);
//关闭SqlSession
sqlSession.close();

}

3、insert
● 1、编写接口
//insert一个用户

  int addUser(User user);

● 2、编写对应的mapper中对应的sql语句

<insert id="addUser" parameterType="cn.zhy.pojo.User">
        insert into mybatis.user (id, name, pwd)
        values (#{id}, #{name}, #{pwd});
    </insert>

● 3、测试

@Test
public void addUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(5, “小张”, “123123”));

//提交事务
sqlSession.commit();
sqlSession.close();

}

4、update
● 1、编写接口
//修改用户

int updateUser(User user);

● 2、编写对应的mapper中对应的sql语句

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

● 3、测试

@Test
public void updateUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4, “小李”, “123123”));
sqlSession.commit();
sqlSession.close();
}

5、delete
● 1、编写接口

 //删除用户
    int deleteUser(int id);

● 2、编写对应的mapper中对应的sql语句

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

● 3、测试

@Test
public void deleteUser() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.deleteUser(4);
    sqlSession.commit();
    sqlSession.close();
}

注意点增删改需要提交事务
6、分析错误

  1. 标签匹配不要写错
  2. resource绑定mapper,需要使用路径,用“/”连接
  3. 程序配置文件必须符合规范
  4. 空指针异常,没有注册到资源
    7、万能的Map
    假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!
    Map传递参数,直接在sql中取出key值即可 parameterType=“map”
    对象传递参数,直接在sql中取对象的属性即可 parameterType=“cn.zhy.pojo.User”
    只有一个基本类型参数的情况下,可以直接在sql中取 parameterType可以不写
    多个参数用Mapper或者注解
    8、模糊查询
    1、java代码执行的时候,传递通配符%%
List<User> userList = mapper.getUserLike("%张%");

2、在sql配置中使用通配符

select * from mybatis.user where name like "%"#{value}"%"
select * from mybatis.user where name like  "%"#{value}"%"

//模糊查询

List<User> getUserLike(String value);
<select id="getUserLike" resultType="cn.zhy.pojo.User">
    select *
    from mybatis.user
    where name like #{value}
</select>
@Test
public void getUserLike() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    List<User> userList = mapper.getUserLike("%张%");
    for (User user : userList) {
        System.out.println(user);
    }
    sqlSession.close();
}

补充
#{}和${}的区别
#{}表示一个占位符号
● 通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,
● #{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。
● 可以自动对值添加 ’ ’ 单引号
表示拼接 s q l 串●通过 {}表示拼接 sql 串 ● 通过 表示拼接sql通过{}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换,
可以接收简单类型值或 p o j o 属性值,如果 p a r a m e t e r T y p e 传输单个简单类型值, {}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值, 可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}括号中只能是 value。
● 比如order by id 这种的,以id排序 那么这个id 是没有单引号的,就是简单的SQL拼接,所以我们应该使用${} 而不是#{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值