首页 > 其他分享 >3.CRUD(增删改查)

3.CRUD(增删改查)

时间:2022-10-28 11:24:42浏览次数:79  
标签:mapper int UserMapper CRUD sqlSession user 增删 改查 id

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>

标签:mapper,int,UserMapper,CRUD,sqlSession,user,增删,改查,id
From: https://www.cnblogs.com/itxiaofei/p/16835175.html

相关文章

  • mybatis增删改查的一些学习代码
    1.UserMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/......
  • 今天独立尝试了增删改查,重点练习了修改语句
    效果还可以  查询语句出了点小问题   修改用到了4个jsp文件跳转其中session.setAttribute()语句的使用,刚开始由于理解上面的混乱,没有成功修改,后来才发现问题......
  • 利用MVC三层架构做一个案例(利用MyBatis实现增删改查)
    查询所有利用昨天学习到的MyBatis知识,再加上servlet页面的跳转,demo1.jspUserMapper.java(接口)servletDemo.javaMyBatisDemo.java(位于service层)index.jsp显......
  • DCL-管理用户-增删查和修改密码
    DCL-管理用户-增删查SQl分类:1、DDL:操作数据库和表2、DML:增删表中数据3、DQL:查询表中数据4、DCL:管理用户、授权 DBA:数据库管理员DCL:管理用户,授权1、管理用户1.添......
  • 终于凑齐增删改查四个宝喽
    表依旧是上上次的表~然后是目录结构   然后……贴代码!packageBean;publicclassBean{Stringid;Stringname;publicBean(){//TODOAu......
  • 【Vapor】05 Chapter 7: CRUD Database Operations
    0x00Chapter7:CRUDDatabaseOperations在​​routes.swift​​​文件内写各种路由操作数据库的记录1.create创建记录,之前的文章已经写过了需要提交数据url:​​ht......
  • day17 MySQL的安装 & 数据库基本语法——增删改查
    day17MySQL登录数据库mysql-hlocalhost-P3307-uroot-p查看所有数据库showdatabases;退出数据库exit;//现有表格usesitu;//使用哪个数据库createtable......
  • json模拟数据,实现增删该查
    operation.jsconst{rejects}=require('assert')constfs=require('fs')const{resolve}=require('path')/*查询数据*/constqueryData=({......
  • Elasticsearch-----介绍与增删改查操作
    一、介绍:1、概念:是功能非常强大的全文搜索引擎,目的是为了能快速的查询数据2、核心概念:接近实时(NRT):Elasticsearch是一个接近实时的搜索平台。从索引一个文档直到这个文档能......
  • mysql-增删改查
    mysql-增删改查####mysqlctrl+l清屏ctrl+c终止[linux]servicemysqlstart启动mysqlservicemysqlstop停止mysqlservicemysqlrestart重启mysql......