IT评测·应用市场-qidao123.com

标题: 秒鲨后端之MyBatis【2】默认的范例别名、MyBatis的增删改查、idea中设置文 [打印本页]

作者: 商道如狼道    时间: 2024-12-28 07:28
标题: 秒鲨后端之MyBatis【2】默认的范例别名、MyBatis的增删改查、idea中设置文
别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! !
下篇更新:
秒鲨后端之MyBatis【3】自界说映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。
默认的范例别名



MyBatis的增删改查

  1. <!--int insertUser();-->
  2. <insert id="insertUser">
  3.   insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
  4. </insert>
复制代码
  1. <!--int deleteUser();-->
  2. <delete id="deleteUser">
  3.    delete from t_user where id = 6
  4. </delete>
复制代码
  1. <!--int updateUser();-->
  2. <update id="updateUser">
  3.    update t_user set username = '张三' where id = 5
  4. </update>
复制代码
  1. <!--User getUserById();-->  
  2. <select id="getUserById" resultType="com.atguigu.mybatis.bean.User">  
  3.   select * from t_user where id = 2  
  4. </select>
复制代码
  1. //如何打印结果
  2. User user = userMapper.getUserById();
  3. System.out.println(user);
复制代码
  1. <!--List<User> getUserList();-->
  2. <select id="getUserList" resultType="com.atguigu.mybatis.bean.User">
  3.   select * from t_user
  4. </select>
复制代码

idea中怎样设置文件的配置模板

1. mybatis-config.xml核心配置文件


如许就可以快速创建mybatis-config.xml核心配置文件了:

然后再设置一下这个模板的代码(不固定的地方则空白即可,如:范例别名所在的包,最后的映射文件等等),详细情况,详细设置。
2. properties文件的模板

我们这里设置一个模板名jdbc.properties的模板:因为核心配置文件我设置了properties,以是也得必须创建该properties,以是就来弄一个模板

3. 映射文件的模板

下面是mapper接口文件(即创建的是interface-java类),根据不同用法创建不同的mapper接口文件,故不设置模板。如下创建了名为UserMapper的接口文件,意为操作User表的接口文件,

接口文件创建后,创建映射文件:

以是设置映射文件模板:全类名为自己设置

如许就方便还可以设置如一种sql方法就用一种(接口+映射)的方式如许,设置多个方式(可选)。

MyBatis获取参数值的两种方式(重点)


单个字面量范例的参数


  1. <!--User getUserByUsername(String username);-->
  2. <select id="getUserByUsername" resultType="User">
  3.         select * from t_user where username = #{username}
  4. </select>
复制代码
  1. <!--User getUserByUsername(String username);-->
  2. <select id="getUserByUsername" resultType="User">  
  3.         select * from t_user where username = '${username}'  
  4. </select>
复制代码
多个字面量范例的参数

3.5.9以上的mybatis依靠可以直接用变量(参数)名,而不用arg0,arg1和param1,param2了

  1. <!--User checkLogin(String username,String password);-->
  2. <select id="checkLogin" resultType="User">  
  3.         select * from t_user where username = #{arg0} and password = #{arg1}  
  4. </select>
复制代码
  1. <!--User checkLogin(String username,String password);-->
  2. <select id="checkLogin" resultType="User">
  3.         select * from t_user where username = '${param1}' and password = '${param2}'
  4. </select>
复制代码
map集合范例的参数


  1. <!--User checkLoginByMap(Map<String,Object> map);-->
  2. <select id="checkLoginByMap" resultType="User">
  3.         select * from t_user where username = #{username} and password = #{password}
  4. </select>
复制代码
  1. @Test
  2. public void checkLoginByMap() {
  3.         SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4.         ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
  5.         Map<String,Object> map = new HashMap<>();
  6.         map.put("usermane","admin");
  7.         map.put("password","123456");
  8.         User user = mapper.checkLoginByMap(map);
  9.         System.out.println(user);
  10. }
复制代码
实体类范例的参数


  1. <!--int insertUser(User user);-->
  2. <insert id="insertUser">
  3.         insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
  4. </insert>
复制代码
  1. @Test
  2. public void insertUser() {
  3.         SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4.         ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
  5.         User user = new User(null,"Tom","123456",12,"男","123@321.com");
  6.         mapper.insertUser(user);
  7. }
复制代码
使用@Param标识参数


  1. <!--User CheckLoginByParam(@Param("username") String username, @Param("password") String password);-->
  2.     <select id="CheckLoginByParam" resultType="User">
  3.         select * from t_user where username = #{username} and password = #{password}
  4.     </select>
复制代码
  1. @Test
  2. public void checkLoginByParam() {
  3.         SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4.         ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
  5.         mapper.CheckLoginByParam("admin","123456");
  6. }
复制代码
总结


MyBatis的各种查询功能

查询一个实体类对象

  1. /**
  2. * 根据用户id查询用户信息
  3. * @param id
  4. * @return
  5. */
  6. User getUserById(@Param("id") int id);
复制代码
  1. <!--User getUserById(@Param("id") int id);-->
  2. <select id="getUserById" resultType="User">
  3.         select * from t_user where id = #{id}
  4. </select>
复制代码
查询一个List集合

  1. /**
  2. * 查询所有用户信息
  3. * @return
  4. */
  5. List<User> getUserList();
复制代码
  1. <!--List<User> getUserList();-->
  2. <select id="getUserList" resultType="User">
  3.         select * from t_user
  4. </select>
复制代码
查询单个数据

咱们这里的resultType仍然可以用User,因为User数据库表里面有integer,即通过User表识别查询的数据为integer,当然也可以自己如下直接设置,因为“单个数据”的“范例”这两个已知,便自己写为integer
  1. /**  
  2. * 查询用户的总记录数  
  3. * @return  
  4. * 在MyBatis中,对于Java中常用的类型都设置了类型别名  
  5. * 例如:java.lang.Integer-->int|integer  
  6. * 例如:int-->_int|_integer  
  7. * 例如:Map-->map,List-->list  
  8. */  
  9. int getCount();
复制代码
  1. <!--int getCount();-->
  2. <select id="getCount" resultType="_integer">
  3.         select count(id) from t_user
  4. </select>
复制代码
查询一条数据为map集合

之后会用的许多,是因为有可能resultType设置为User(我们自己写的数据库表),有可能里面没有查询表结果中某一个或是多个的数据范例的映射(即实体对象),此时就可以直接用map集合,把他们全部存入map。
  1. /**  
  2. * 根据用户id查询用户信息为map集合  
  3. * @param id  
  4. * @return  
  5. */  
  6. Map<String, Object> getUserByIdToMap(@Param("id") int id);
复制代码
  1. <!--Map<String, Object> getUserByIdToMap(@Param("id") int id);-->
  2. <select id="getUserByIdToMap" resultType="map">
  3.         select * from t_user where id = #{id}
  4. </select>
  5. <!--结果:{password=123456, sex=男, id=1, age=23, username=admin}-->
复制代码
查询多条数据为map集合

方法一

  1. /**  
  2. * 查询所有用户信息为map集合  
  3. * @return  
  4. * 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取  
  5. */  
  6. List<Map<String, Object>> getAllUserToMap();
复制代码
  1. <!--Map<String, Object> getAllUserToMap();-->  
  2. <select id="getAllUserToMap" resultType="map">  
  3.         select * from t_user  
  4. </select>
  5. <!--
  6.         结果:
  7.         [{password=123456, sex=男, id=1, age=23, username=admin},
  8.         {password=123456, sex=男, id=2, age=23, username=张三},
  9.         {password=123456, sex=男, id=3, age=23, username=张三}]
  10. -->
复制代码
方法二

  1. /**
  2. * 查询所有用户信息为map集合
  3. * @return
  4. * 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键(),值是每条数据所对应的map集合
  5. */
  6. @MapKey("id")
  7. Map<String, Object> getAllUserToMap();
复制代码
  1. <!--Map<String, Object> getAllUserToMap();-->
  2. <select id="getAllUserToMap" resultType="map">
  3.         select * from t_user
  4. </select>
  5. <!--
  6.         结果:
  7.         {
  8.         1={password=123456, sex=男, id=1, age=23, username=admin},
  9.         2={password=123456, sex=男, id=2, age=23, username=张三},
  10.         3={password=123456, sex=男, id=3, age=23, username=张三}
  11.         }
  12. -->
复制代码
特殊SQL的执行

含糊查询

  1. /**
  2. * 根据用户名进行模糊查询
  3. * @param username
  4. * @return java.util.List<com.atguigu.mybatis.pojo.User>
  5. * @date 2022/2/26 21:56
  6. */
  7. List<User> getUserByLike(@Param("username") String username);
复制代码
  1. <!--List<User> getUserByLike(@Param("username") String username);-->
  2. <select id="getUserByLike" resultType="User">
  3.         <!--select * from t_user where username like '%${mohu}%'-->  
  4.         <!--select * from t_user where username like concat('%',#{mohu},'%')-->  
  5.         select * from t_user where username like "%"#{mohu}"%"
  6. </select>
复制代码

批量删除


  1. /**
  2. * 根据id批量删除
  3. * @param ids
  4. * @return int
  5. * @date 2022/2/26 22:06
  6. */
  7. int deleteMore(@Param("ids") String ids);
复制代码
  1. <delete id="deleteMore">
  2.         delete from t_user where id in (${ids})
  3. </delete>
复制代码
  1. //测试类
  2. @Test
  3. public void deleteMore() {
  4.         SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  5.         SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
  6.         int result = mapper.deleteMore("1,2,3,8");
  7.         System.out.println(result);
  8. }
复制代码
动态设置表名


  1. /**
  2. * 查询指定表中的数据
  3. * @param tableName
  4. * @return java.util.List<com.atguigu.mybatis.pojo.User>
  5. * @date 2022/2/27 14:41
  6. */
  7. List<User> getUserByTable(@Param("tableName") String tableName);
复制代码
  1. <!--List<User> getUserByTable(@Param("tableName") String tableName);-->
  2. <select id="getUserByTable" resultType="User">
  3.         select * from ${tableName}
  4. </select>
复制代码
添加功能获取自增的主键


  1. /**
  2. * 添加用户信息
  3. * @param user
  4. * @date 2022/2/27 15:04
  5. */
  6. void insertUser(User user);
复制代码
  1. <!--void insertUser(User user);-->
  2. <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
  3.         insert into t_user values (null,#{username},#{password},#{age},#{sex},#{email})
  4. </insert>
复制代码
  1. //测试类
  2. @Test
  3. public void insertUser() {
  4.         SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  5.         SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
  6.         User user = new User(null, "ton", "123", 23, "男", "123@321.com");
  7.         mapper.insertUser(user);
  8.         System.out.println(user);
  9.         //输出:user{id=10, username='ton', password='123', age=23, sex='男', email='123@321.com'},自增主键存放到了user的id属性中
  10. }
复制代码
别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! !
下篇更新:
秒鲨后端之MyBatis【3】自界说映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4