网站建设项目实训报告,推广网站是什么意思,母婴的网站建设,先做网页设计还是先弄网站Mybatis#xff08;二#xff09;#xff1a;实现“增删改查”前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合二、MyBatis获取参数值的两种方式#xff08;重点#xff09;1、单个字面量类型的参数2、多个字面量类型的参数3、map集合…
Mybatis二实现“增删改查”前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合二、MyBatis获取参数值的两种方式重点1、单个字面量类型的参数2、多个字面量类型的参数3、map集合类型的参数4、实体类类型的参数5、使用Param标识参数6、结论三、MyBatis的各种查询功能1、查询一个实体类对象2、查询一个list集合3、查询单个数据4、查询一条数据为map集合5、查询多条数据为map集合6、结论前言 
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识有兴趣的小伙伴可以关注博主也许一个人独行可以走的很快但是一群人结伴而行才能走的更远 一、MyBatis的增删改查 1、添加 UserMapper接口      /***添加用户信息*/int insertUser();UserMapper.xml !--int insertUser();--insert idinsertUserinsert into t_user values(null,张三,123,23,女)/insert2、修改 UserMapper接口      /*** 修改用户信息*/void updateUser();UserMapper.xml         !-- void updateUser();--update id  updateUserupdate t_user set username  张三 where id  4/update3、删除 UserMapper接口     /*** 删除用户信息*/void deleteUser();UserMapper.xml         !-- void deleteUser();--delete iddeleteUserdelete from t_user where id  5/delete4、查询 4.1 查询一个实体 UserMapper接口     /*** 查询用户信息*/User getUserId();UserMapper.xml!--User getUserById();--!--查询功能的标签必须设置resultType或resultMapresultType设置默认的映射关系resultMap设置自定义的映射关系--select idgetUserById resultTypecom.ir.mybaits.pojo.Userselect * from t_user where id  3/select 4.1 查询集合 UserMapper接口     /*** 查询用户信息*/ListUser getAllUser();UserMapper.xml       !--ListUser getAllUser();--select idgetAllUser resultTypeUserselect * from t_user/select注意  ⭕ 查询的标签select必须设置属性resultType或resultMap用于设置实体类和数据库表的映射关系 ● resultType自动映射用于属性名和表中字段名一致的情况 ● resultMap自定义映射用于一对多或多对一或字段名和属性名不一致的情况   ⭕当查询的数据为多条时不能使用实体类作为返回值只能使用集合否则会抛出异常TooManyResultsException但是若查询的数据只有一条可以使用实体类或集合作为返回值  二、MyBatis获取参数值的两种方式重点  MyBatis获取参数值的两种方式${}和#{}   ⭕${}的本质就是字符串拼接使用字符串拼接的方式拼接sql若为字符串类型或日期类型的字段进行赋值时需要手动加单引号   ⭕ #{}的本质就是占位符赋值但是#{}使用占位符赋值的方式拼接sql此时为字符串类型或日期类型的字段进行赋值时可以自动添加单引号  1、单个字面量类型的参数  ⭕ 若mapper接口中的方法参数为单个的字面量类型此时可以使用${}和#{}以任意的名称获取参数的值但是需要注意${}的单引号问题   ⭕ 代码演示  UserMapper /*** description:查询用户信息* author: Hey* date: 2022/7/3 16:53* param: [username]* return: com.ir.mybatis.pojo.User**/User getUserByUsername(String username);UserMapper.xml  !--User getUserByUsername(String username);--select idgetUserByUsername resultTypeuser!--此时只注重传递过来的值{username}中的usernsme可以替换为任意字母结果都不会改变--!--select * from t_user where username  ${username};--select * from t_user where username  #{username};/selectUserMapperTest    /*** description:* author: Hey* date: 2022/7/3 15:29* param: []* return: void**/Testpublic void getUserByUsername(){UserMapper userMapper  SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);System.out.println(userMapper.getUserByUsername(张三));}2、多个字面量类型的参数  ⭕ mapper接口方法的参数为多个时此时MyBatis会将这些参数放在一个map集合中以两种方式进行存储 以arg0,arg1…为键以参数为值以param1,param2…为键以参数为值 因此只需要通过${}和#{}访问map集合的键就可以获取相对应的 值但是需要注意${}的单引号问题。   ⭕ 代码演示  UserMapper     /*** description:检查用户登录信息* author: Hey* date: 2022/7/3 15:46* param: [username, password]* return: com.ir.mybatis.pojo.User**/User checkLoginByParameter(String username,String password);UserMapper.xml   !--User checkLoginByParameter(String username,String password);--select idcheckLoginByParameter resultTypeuserselect * from t_user where username#{arg0} and password#{arg1};/selectUserMapperTest  /*** description:* author: Hey* date: 2022/7/3 15:30* param: []* return: void**/Testpublic void checkLoginByParam(){UserMapper userMapper  SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);User user  userMapper.checkLoginByParameter(张三,123);System.out.println(user);}3、map集合类型的参数  ⭕ 若mapper接口中的方法需要的参数为多个时此时可以手动创建map集合将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值但是需要注意${}的单引号问题   ⭕ 代码演示  UserMapper     /*** description:通过自定义Map来验证登录* author: Hey* date: 2022/7/3 15:45* param:* return:**/User checkLoginByMap(MapString, Object map);UserMapper.xml  !--User checkLoginByMap(MapString, Object map);--select idcheckLoginByMap resultTypeuserselect * from t_user where username#{username} and password#{password};/selectUserMapperTest      /*** description:测试通过自定义Map验证登录* author: Hey* date: 2022/7/3 15:55* param: []* return: void**/Testpublic void checkLoginByMap(){UserMapper userMapper  SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);MapString,Object map  new HashMap();map.put(username,张三);map.put(password,123);User user  userMapper.checkLoginByMap(map);System.out.println(user);}4、实体类类型的参数  ⭕ 若mapper接口中的方法参数为实体类对象时此时可以使用${}和#{}通过访问实体类对象中的属性名获取属性值但是需要注意${}的单引号问题   ⭕ 代码演示  UserMapper  /*** description:添加用户* author: Hey * date: 2022/7/3 16:11* param: [user]* return: int**/Integer insertUser(User user);UserMapper.xml !--int insertUser(User user);--select idinsertUser insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})/selectUserMapperTest      /*** description:添加用户  * author: Hey* date: 2022/7/3 16:24* param: []* return: void**/Testpublic void insertUser(){UserMapper userMapper  SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);Integer result  userMapper.insertUser(new User(null,喜羊羊,123456,18,男,123123qq.com));System.out.println(result);}5、使用Param标识参数  ⭕ 可以通过Param注解标识mapper接口中的方法参数此时会将这些参数放在map集合中以如下两种方式来取值访问 以Param注解的value属性值为键以参数为值以param1,param2…为键以参数为值 只需要通过${}和#{}访问map集合的键就可以获取相对应的值但是需要注意${}的单引号问题   ⭕ 代码演示  UserMapper  /*** description:通过参数注解验证登录* author: Hey * date: 2022/7/3 16:59* param: [username, password]* return: com.ir.mybatis.pojo.User**/User checkLoginByParam(Param(username) String username, Param(password) String password);UserMapper.xml     !--User checkLoginByParam(Param(username) String username, Param(password) String password);--select idcheckLoginByParam resultTypeUserselect * from t_user where username  #{username} and password  #{password}/selectUserMapperTest  /*** description:通过注解方式验证登录* author: Hey* date: 2022/7/3 16:57* param: []* return: void**/Testpublic void testCheckLoginByParam(){SqlSession sqlSession  SqlSessionUtils.getSqlSession();UserMapper mapper  sqlSession.getMapper(UserMapper.class);User user  mapper.checkLoginByParam(admin, 123456);System.out.println(user);} 6、结论  将以上五种情况分为两类情况 ⭕ 情况一参数为实体类型 ⭕ 情况二参数都用Param来修饰  三、MyBatis的各种查询功能 1、查询一个实体类对象 SelectMapper     /*** description:通过id查询用户* author: Hey* date: 2022/7/3 17:54* param: [id]* return: com.ir.mybatis.pojo.User**/User getUserById(Param(id) Integer id);SelectMapper.xml select idgetUserById resultTypeuserselect * from t_user where id #{id};/selectSelectMapperTest /*** description:通过id查询用户* author: Hey* date: 2022/7/3 17:58* param: []* return: void**/Testpublic void getUserById(){SelectMapper selectMapper  SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);User user  selectMapper.getUserById(3);System.out.println(user);}2、查询一个list集合 SelectMapper /*** description:获取多个用户* author: Hey* date: 2022/7/3 17:56* param: []* return: java.util.Listcom.ir.mybatis.pojo.User**/ListUser getAllUser();SelectMapper.xml select idgetAllUser resultTypeuserselect * from t_user;/selectSelectMapperTest /*** description:查询所有用户* author: Hey* date: 2022/7/3 18:00* param: []* return: void**/Testpublic void getAllUser(){SelectMapper selectMapper  SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);ListUser list   selectMapper.getAllUser();for (User user:list) {System.out.println(user);}}3、查询单个数据 在MyBatis中对于Java中常用的类型都设置了类型别名 AliasMapped Type_bytebyte_char (since 3.5.10)char_character (since 3.5.10)char_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringStringbyteBytechar (since 3.5.10)Charactercharacter (since 3.5.10)CharacterlongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalbigintegerBigIntegerobjectObjectdate[]Date[]decimal[]BigDecimal[]bigdecimal[]BigDecimal[]biginteger[]BigInteger[]object[]Object[]mapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIteratorSelectMapper     /*** description:查询用户信息的总记录数* author: Hey* date: 2022/7/3 20:40* param: []* return: java.lang.Integer**/Integer getCount();SelectMapper.xml  select idgetCount resultTypeintselect count(1) from t_user;/selectSelectMapperTest /*** description:查询用户信息的总记录数* author: Hey * date: 2022/7/3 20:45* param: []* return: void**/Testpublic void getCount(){SelectMapper selectMapper  SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);int result  selectMapper.getCount();System.out.println(result);}4、查询一条数据为map集合 SelectMapper /*** description:根据id查询用户信息为一个map集合* author: Hey* date: 2022/7/3 20:59* param: [id]* return: java.util.Mapjava.lang.String,java.lang.Object**/MapString,Object getUserByIdToMap(ParamidInteger id);SelectMapper.xml select idgetUserByIdToMap resultTypemapselect * from t_user where id#{id}
/selectSelectMapperTest /*** description:根据id查询用户信息为一个map集合* author: Hey* date: 2022/7/3 21:03* param: []* return: void**/Testpublic void getUserByIdToMap(){SelectMapper selectMapper  SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);System.out.println(selectMapper.getUserByIdToMap(5));//{password123456, sex男, id5, age18, email123123qq.com, username喜羊羊}}5、查询多条数据为map集合 方式一 SelectMapper /*** description:查询所有用户信息为Map集合* * 将表中的数据以map集合的方式查询一条数据对应一个map* 若有多条数据就会产生多个map集合此时可以将这些map放在一个list集合中获取* * author: Hey* date: 2022/7/3 21:15* param: []* return: java.util.Listjava.util.Mapjava.lang.String,java.lang.Object**/ListMapString, Object getAllUserToMap();    SelectMapper.xml  select idgetAllUserToMap resultTypemapselect * from t_user/selectSelectMapperTest /*** description:查询所有用户信息为Map集合* author: Hey* date: 2022/7/3 21:17* param: []* return: void**/
Testpublic void testGetAllUserToMap(){SqlSession sqlSession  SqlSessionUtils.getSqlSession();SelectMapper mapper  sqlSession.getMapper(SelectMapper.class);System.out.println(mapper.getAllUserToMap());/*** [{password123, sex女, id1, age23, email12345qq.com, username张三},* {password123456, sex男, id2, age18, email123123qq.com, username喜羊羊}]*/}方式二 SelectMapper /*** description:查询所有用户信息为Map集合* * 将表中的数据以map集合的方式查询一条数据对应一个map* 若有多条数据就会产生个map集合并且最终要以一个map的方式返回数据此时需要通过MapKey注解设置map集合的键值是每条数据所对应的map集合* * author: Hey* date: 2022/7/3 21:15* param: []* return: java.util.Listjava.util.Mapjava.lang.String,java.lang.Object**/MapKey(id)MapString, Object getAllUserToMap();    SelectMapper.xml  select idgetAllUserToMap resultTypemapselect * from t_user/selectSelectMapperTest  /*** description:查询所有用户信息为Map集合* author: Hey* date: 2022/7/3 21:17* param: []* return: void**/Testpublic void testGetAllUserToMap(){SqlSession sqlSession  SqlSessionUtils.getSqlSession();SelectMapper mapper  sqlSession.getMapper(SelectMapper.class);System.out.println(mapper.getAllUserToMap());/*** {* 1{password123, sex女, id1, age23, email12345qq.com, username张三}, * 2{password123456, sex男, id2, age18, email123123qq.com, username喜羊羊}* }*/}6、结论 MyBatis的各种查询功能  ⭕ 若查询出的数据只有一条 ● 可以通过实体类对象接收 ● 可以通过list集合接收 ● 可以通过map集合接收 结果 {password123456, sex男, id3, age23, email12345qq.com, usernameadmin}   ⭕ 若查询出的数据有多条 ● 可以通过实体类类型的list集合接收 ● 可以通过map类型的list集合接收 ●可以在mapper接口的方法上添加MapKey注解此时就可以将每条数据转换的map集合作为值以某个字段的值作为键放在同一个map集合中   ⭕ 注意一定不能通过实体类对象接收此时会抛异常TooManyResultsException