3.CRUD(增删改查)

1.namespace

namespace即“命名空间”,也称“名称空间” 。是许多编程语言使用的一种代码组织的形式,通过命名空间来分类,区别不同的代码功能,避免不同的代码片段(通常由不同的人协同工作或调用已有的代码片段)同时使用时由于不同代码间变量名相同而造成冲突。

注意:

  • namespac中的包名要和Dao/Mapper接口名一致

2.select(查询)

选择,查询语句

<mapper **namespace**="com.itxiaofei.dao.UserMapper">

    <select id="getUserList" resultType="com.itxiaofei.pojo.User"">
        select * from mybatis.user
    </select>

</mapper>
  • id:就是对应namespace中的方法名;
  • resultType:SQL语句执行的返回值!
  • parameterType:参数类型

代码整理:

1.UserMapper

//获取全部用户
    List<User> getUserList();
    //根据id查询用户
    User getUserById(int id);
    //insert(增加一个用户)

2.UserMapper.xml(UserMapper接口的实现类)

<mapper namespace="com.itxiaofei.dao.UserMapper">
		<select id="getUserList" resultType="com.itxiaofei.pojo.User">
        select * from mybatis.user
    </select>
			<!--parameterType:参数类型-->
    <select id="getUserById" parameterType="int" resultType="com.itxiaofei.pojo.User">
         select * from mybatis.user where id = 1
    </select>
</mapper>

3.UserDaoTest

//查询全部
    @Test
    public void test(){
        //第一步获得SqlSession对象
        SqlSession sqlSession= MybatisUtils.getSqlSession();

        //方式一:getMapper:执行SQL
        //注:利用getMapper得到接口,就可以返回接口,返回接口就可以执行接口里面的方法
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userDao.getUserList();

        //方式二:老方式查找UserDao(接口里的方法getUserList)不推荐使用
        //List<User> userList = sqlSession.selectList("com.itxiaofei.dao.UserDao.getUserList");

        //如何遍历一个数组:利用for循环:userList.for
        for (User user : userList) {
            System.out.println(user);
        }

        //关闭sqlSession
        sqlSession.close();
    }

    //查询单个
    @Test
    //这里使用public(公有) 不要用 private(私有)
    public void getUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获取UserMapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //调用UserMapper里的getUserById方法。
        User userById = mapper.getUserById(1);
        //输出getUserById的方法结果
        System.out.println(userById);
        //关闭sqlSession
        sqlSession.close();
    }

3.insert(增加)

代码整理:

1.UserMapper(接口)

//insert(增加一个用户)
    int addUser(User user);

2.UserMapper.xml

<mapper namespace="com.itxiaofei.dao.UserMapper">
		<!--增加用户-->
    <insert id="addUser" parameterType="com.itxiaofei.pojo.User">
        insert into mybatis.user(id,name,pwd) value(#{id},#{name},#{pwd});
    </insert>
</mapper>

3.UserDaoTest

@Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.addUser(new User(6, "小明", "123456"));
        //该判断加不加也行,就是为了直观的看到是否插入成功
        if (res>0){
            System.out.println("插入成功");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.close();
    }

4.update(修改)

代码整理:

1.UserMapper

//update(修改一个用户)
    int upDate(User user);

2.UserMapper.xml

<mapper namespace="com.itxiaofei.dao.UserMapper">
		<!--修改一个用户-->
    <update id="upDate" parameterType="com.itxiaofei.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd}   where id = #{id} ;
    </update>
</mapper>

3.UserDaoTest

@Test
    public void upDate(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int date = mapper.upDate(new User(5, "小娟", "123456"));
        if (date>0){
            System.out.println("修改成功");
        }
        sqlSession.commit();
        sqlSession.close();

    }

5.delete(删除)

代码整理:

1.UserMapper

//delete(删除一个用户)
    int delete(int id);

2.UserMapper.xml

<!--删除一个用户-->
    <delete id="delete" parameterType="com.itxiaofei.pojo.User">
        delete from mybatis.user where id=#{id}
    </delete>

3.UserDaoTest

@Test
    public void delete(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int delete = mapper.delete(6);
        if (delete>0){
            System.out.println("删除成功");
        }
        sqlSession.commit();
        sqlSession.close();
    }

6.小结:增,删,该,需要提交事务sqlSession.commit();

7.错误总结:

报错:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry ‘4’ for key ‘PRIMARY’

仔细分析一下,原来就是是因为插入的新数据,与表的主键唯一约束产生了冲突,也就是新数据的主键在表中已经存在了,不能重复插入同样的数据!

  • 标签不要匹配错误(UserMapper.xml中)
  • 程序配置文件必须符合规范
  • NullPointerException(空指针异常)没有注册到资源

8.万能的Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑万能的Map

8.1.代码整理:

  • UserMapper
//用Map实现增加用户
    int addUser2(Map<String,Object>map);

//用Map实现修改用户
    int upDate2(Map<String,Object>map);
  • UserMapper.xml

<!--使用Map增加,野路子,很省事-->
    <insert id="addUser2" parameterType="map">
        insert into mybatis.user(id,name,pwd) value(#{user id},#{name2},#{password});
    </insert>

<!--使用Map修改用户,使用map,类型名称可以自己定义,方便测试-->
<!--例子:name=#{username}或者name=#{username2}都可以-->
    <update id="upDate2" parameterType="map">
        update mybatis.user set name=#{username},pwd=#{password}   where id = #{user id} ;
    </update>
  • UserDaoTest
//使用Map实现增加
    @Test
    public void addUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("user id",6);
        map.put("password","123123");
        int i = mapper.addUser2(map);
        if (i>0){
            System.out.println("增加成功");
        }
        sqlSession.commit();
        sqlSession.close();
    }

//使用Map实现修改
    @Test
    public void update2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("user id",6);
        map.put("password","123456");
        map.put("username","小包");
				//int x(x可以随意取名)
        int x = mapper.upDate2(map);
        if (x>0){
            System.out.println("修改成功");
        }
				**//声明事务(增删改必须声明事务!!)**
        sqlSession.commit();
        sqlSession.close();
    }

8.2.Map总结:

Map传递参数,直接在sql中取出key即可

对象传递参数,直接在sql中取对象的属性即可

只有一个基本类型参数的情况下,可以直接在sql中取到

多个参数用Map,或者注解!

9.模糊查询怎么写

代码整理:

  • UserMapper
//模糊查询
    List<User> getUserLike(String value);
  • UserMapper.xml
<!--模糊查询-->
    <select id="getUserLike" resultType="com.itxiaofei.pojo.User">
        select * from mybatis.user where name like #{value}
        <!--select * from mybatis.user where name like "%"#{value}"%"-->
    </select>
  • UserDaoTest
//模糊查询
    @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();
    }

模糊查询面向用户的两种查询方式(第二种较好,写死,安全)

1.java代码 执行的时候,传递通配符% %

List<User> userList = mapper.getUserLike("%小%");

2.在sql拼接中使用通配符!

		<select id="getUserLike" resultType="com.itxiaofei.pojo.User">
        select * from mybatis.user where name like "%"#{value}"%"
    </select>

原文地址:http://www.cnblogs.com/itxiaofei/p/16835175.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性