【Mybatis】(二)增删改查功能

(二)增删改查

1.namespace

  UserMapper中namespace的包名要和Dao/Mapper接口的包名一致

<mapper namespace="dao.UserDao">

2.MyBatis使用事务

  • mybatis默认开启事务(若在mybatis的配置文件中,transactionManager标签的type设为jdbc的话),也就是mybatis默认关闭自动提交。

  • 若要对数据库进行修改操作,必须调用sqlSession.commit()方法。

    参考:https://www.cnblogs.com/-beyond/p/10130300.html


3.语句参数

  • id对应绑定接口的方法
  • resultType对应返回类型中的泛型
  • parameterType对应参数类型

4.流程(insert举例)

  • 在UserDao.java接口中添加方法

    //插入一个用户
    int addAUser(User user);
    
  • 在UserMapper.xml中添加sql语句

    <!--#后的变量名是对象的属性名-->
    <insert id="addAUser" parameterType="pojo.User">
    	insert into mybatiss.user values (#{id},#{name},#{pwd});
    </insert>
    
  • 写测试方法

    //增删改查需要提交事务
        @Test
        public void addAUser() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int rs = userDao.addAUser(new User(4, "小蓝", "123"));
    
            if (rs > 0)
                System.out.println("插入成功");
    
            //提交事务
            sqlSession.commit();
    
            sqlSession.close();
        }
    

5.代码

  • UserDao

    package dao;
    
    public interface UserDao {
        //查询所有用户列表
        List<User> getUserList();
    
        //根据id查询用户
        User getUserById(int id);
    
        //插入一个用户
        int addAUser(User user);
    
        //修改用户
        int updateUser(User user);
    
        //删除用户
        int deleteUser(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="dao.UserDao">
        <!--id对应绑定接口的方法,resultType对应返回类型中的泛型,parameterType对应参数类型-->
        <select id="getUserList" resultType="pojo.User">
            select * from mybatiss.user
        </select>
    
        <!--#取参数值-->
        <select id="getUserById" parameterType="int" resultType="pojo.User">
            select * from mybatiss.user where id = #{id}
        </select>
    
        <!--#后的变量名是对象的属性名-->
        <insert id="addAUser" parameterType="pojo.User">
             insert into mybatiss.user values (#{id},#{name},#{pwd});
        </insert>
    
        <update id="updateUser" parameterType="pojo.User">
             update mybatiss.user set name=#{name},pwd=#{pwd} where id=#{id};
        </update>
    
        <delete id="deleteUser" parameterType="int">
            delete from mybatiss.user where id =#{id};
        </delete>
    </mapper>
    
  • UserDaoTest

    package dao;
    
    public class UserDaoTest {
    
        @Test
        public void test() {
            //获得SqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            //getMapper
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            List<User> userList = mapper.getUserList();
    
            for (User user : userList) {
                System.out.println(user);
            }
    
            //关闭sqlSession
            sqlSession.close();
        }
    
        @Test
        public void getUseById() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = userDao.getUserById(2);
            System.out.println(user);
    
            sqlSession.close();
        }
    
        //增删改查需要提交事务
        @Test
        public void addAUser() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int rs = userDao.addAUser(new User(4, "小蓝", "123"));
    
            if (rs > 0)
                System.out.println("插入成功");
    
            //提交事务
            sqlSession.commit();
    
            sqlSession.close();
        }
    
        @Test
        public void updateUser() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int rs = userDao.updateUser(new User(4, "小蓝", "321"));
    
            if (rs > 0)
                System.out.println("修改成功");
    
            //提交事务
            sqlSession.commit();
    
            sqlSession.close();
        }
    
        @Test
        public void deleteUser() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int rs = userDao.deleteUser(4);
    
            if (rs > 0)
                System.out.println("删除成功");
    
            //提交事务
            sqlSession.commit();
    
            sqlSession.close();
        }
    
    }
    

6.注意

  • 增删改查需要提交事务
  • resource绑定mapper,需要使用路径/

7.万能Map

  当实体类或数据库中表的字段过多时,应当考虑使用Map。

  UserDao

//只修改用户的部分信息
    int updateUser2(Map<String,Object> map);

  UserMapper.xml

 <!--#后的变量名为map的key-->
    <update id="updateUser2" parameterType="map">
         update mybatiss.user set pwd=#{userPwd} where id=#{userId};
    </update>

  UserDaoTest

 @Test
    public void updateUser2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);

        Map<String,Object> map = new HashMap<>();
        map.put("userId",1);
        map.put("userPwd","555");

        int rs = userDao.updateUser2(map);
        if (rs > 0)
            System.out.println("修改成功");

        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

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

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

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

  多个参数用Map,或注解


8.模糊查询

  1.传递通配符% %

  UserDao

//模糊查询用户
List<User> getUsersLike(String value);

  UserMapper.xml

<select id="getUsersLike" parameterType="String" resultType="pojo.User">
     select * from mybatiss.user where name like #{value}
</select>

  UserDaoTest

@Test
    public void getUsersLike() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserDao userDao = sqlSession.getMapper(UserDao.class);

        List<User> userList = userDao.getUsersLike("%绿%");
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }
原文地址:https://www.cnblogs.com/musecho/p/14280561.html