随笔 - 33,  文章 - 0,  评论 - 0,  阅读 - 8286

CRUD增删改查

1、namespace

要和dao/mapper的接口的包名相同

2、select

1、编写接口

2、mapper中sql语句

3、测试

 

选择 查询语句

id:就是对应的namespace中方法名;;

resultType:sql语句执行的返回值

paramerType:sql执行的参数类型

3、insert

4、updata

5、delete

 

UserMapper 接口文件

public interface UserMapper {
   //查询所有用户
   List<User> getUerList();
   //根据userId查询用户
   User getUserById(int id);
   //添加用户
   void insertUser(User user);
   //更新用户
   void updataUser(User user);
   //删除用户
   void delUser(int id);
}

 

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace 绑定一个对应的Dao层接口-->
<mapper namespace="com.zy.dao.UserMapper">
   <!--id 绑定dao层接口中 方法名称   -->
   <select id="getUerList" resultType="com.zy.pojo.User">
      select * from user
   </select>
  <!-- 根据id查询用户-->
   <select id="getUserById" resultType="com.zy.pojo.User" parameterType="int">
      select * from user where user.id = #{id}
   </select>
   <!--添加用户-->
   <!-- 对象中的属性可以直接取出来 id name psw-->
   <insert id="insertUser" parameterType="com.zy.pojo.User">
      insert into user(id,name,psw) values(#{id},#{name},#{psw})
   </insert>
   <!--更新用户-->
   <update id="updataUser" parameterType="com.zy.pojo.User">
      update user set name = #{name},psw = #{psw} where id = #{id} ;
   </update>
   <!--删除用户-->
   <delete id="delUser" parameterType="int">
      delete from user where id = #{id};
   </delete>
</mapper>

 

测试类

注意:增删改 需要提交事务才能操作到数据库

public class UserDaoTest {
   @Test
   public void test(){
       //获得sqlSession对象
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       //执行sql
       //第一种 getMapper
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//方法为getMapper 所以mapper和dao是一样的
       List<User> userList = userMapper.getUerList();
       for (User user : userList) {
           System.out.println(user);
      }
       //关闭sqlSession
       sqlSession.close();
       
  }
   @Test
   public void getUserById(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
       int id = 1;
       User user = userMapper.getUserById(id);
       System.out.println(user);
       sqlSession.close();

  }
   //增删改需要提交事务
   @Test
   public void insertUser(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
       User user = new User();
       user.setId(4);
       user.setName("王五");
       user.setPsw("7789");

       userMapper.insertUser(user);
       //提交事务
       sqlSession.commit();
       sqlSession.close();
  }
   @Test
   public void updataUser(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);

       mapper.updataUser(new User(3,"张六","595959"));
       sqlSession.commit();
       sqlSession.close();
  }
   @Test
   public void delUser(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

       userMapper.delUser(2);
       sqlSession.commit();
       sqlSession.close();
  }
}

 

Map和模糊查询拓展

1、万能map

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

mapper接口

    //传递map为参数
   void insertUser2(Map<String,Object> map);

mapper.xml

    <!--传递参数为map的 insert-->
   <insert id="insertUser2" parameterType="map">
      insert into user (id,name,psw) values (#{userId},#{userName},#{password});
        <!--values中的名称要与map的key相对应-->
   </insert>

测试类

  @Test
   public void insertUser2(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);

       HashMap<String, Object> map = new HashMap<>();
       map.put("userId",6);
       map.put("userName","阿里");
       map.put("password","258789");

       mapper.insertUser2(map);
       sqlSession.commit();
       sqlSession.close();
  }
总结:

Map传递参数,直接在sql中取出key即可;【paramerType=“map”】

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

【parameterType=“Object”】

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

多个参数用map或者注解!

2、模糊查询

1、java代码执行的时候,传递通配符。
 public void selectUserLike(){
       SqlSession sqlSession = MybatisUntils.getSqlSession();
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
       List<User> userList = userMapper.selectUserLike("%王%");
       for (User user : userList) {
           System.out.println(user);
      }
  }
2、在sql中拼接 % 。尽量用这种,代码会更安全
   <!--模糊查询-->
   <select id="selectUserLike" parameterType="String" resultType="com.zy.pojo.User">
      select * from user where name like "%"#{userName}"%"
   </select>
 
posted on   可惜君已逝i  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示