SSM框架之Mybatis使用笔记(二)

接口内方法改动

第一步: 修改Mapper接口,如添加方法、删除方法、修改方法等操作,如再添加一个根据ID查询用户的方法

public interface UserMapper {
   //查询全部用户
   List<User> getUserList();
   //根据ID查询用户
   List<User> getUserById(int id);
}

第二步:在对应的Mapper.xml中实现Mapper接口新增的方法

<?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">

<mapper namespace="com.feng.dao.UserMapper">
    <select id="getUserList" resultType="com.feng.pojo.User">
        select * from mybatis.user
    </select>

    <select id="getUserById" resultType="com.feng.pojo.User" parameterType="int">
        select * from mybatis.user where id = #{id}
    </select>
</mapper>

第三步:利用sqlSession工具操作数据

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

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userById = userMapper.getUserById(2);

        for (User user : userById) {
            System.out.println(user);
        }
        sqlSession.close();
    }

测试结果

在这里插入图片描述

增删改方法改动,同上步骤(区别:增删改需要提交事务)

第一步:修改接口内方法

public interface UserMapper {
    //查询全部用户
    List<User> getUserList();
    //根据ID查询用户
    List<User> getUserById(int id);
    //添加一个用户
    int addUser(User user);
    //修改用户
    int modifyUser(User user);
    //删除用户
    int deleteUser(int id);
}

第二步:实现接口方法

<?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">

<mapper namespace="com.feng.dao.UserMapper">
    <select id="getUserList" resultType="com.feng.pojo.User">
        select * from mybatis.user
    </select>

    <select id="getUserById" resultType="com.feng.pojo.User" parameterType="int">
        select * from mybatis.user where id = #{id}
    </select>
    <!-- 对象中的属性可以直接取出来 -->
    <insert id="addUser" parameterType="com.feng.pojo.User">
        insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>
    <update id="modifyUser" parameterType="com.feng.pojo.User">
        update mybatis.user
        set name = #{name},pwd = #{pwd}
        where id = #{id};
    </update>
    <delete id="deleteUser" parameterType="int">
        delete
        from mybatis.user
        where id = #{id};
    </delete>
</mapper>

第三步:利用sqlSession操作数据

public class UserMapperTest {

    @Test
    public void getUserListTest(){
        // 第一步:获得sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 第二步:执行sql
        /*
        * 1. 从sqlSession里执行sql,如何获取sql?
        * 2. 通过getMapper获取UserMapper接口,使用面向接口编程
        *   因为xml是UserMapper具体实现,因此只需要获取接口即可。
        * 3. 获取接口userMapper后,即可通过接口调用接口提供方法。
        * */

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }
        // 第三步:关闭sqlSession
        sqlSession.close();
    }
    @Test
    public void getUserByIdTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userById = userMapper.getUserById(2);

        for (User user : userById) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    //增删改需要提交事务
    @Test
    public void addUserTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int num = userMapper.addUser(new User(4, "丰", "123456"));
        if(num>0){
            System.out.println("插入成功!");
        }
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void modifyUserTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.modifyUser(new User(1,"疯疯","123456"));

        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void deleteUserTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(2);

        sqlSession.commit();
        sqlSession.close();
    }
}

测试结果

在这里插入图片描述

总结

  1. 在静态配置完成后,动态修改第一步修改Mapper接口;第二步:修改实现接口的对应Mapper.xml;第三步利用sqlSession操作数据。
    此外,要确保对应的Mapper.xml在mybatis-config.xml中得到注册
  2. 对数据库的增、删、改操作需要提交事务sqlSession.commit(),才能生效。当然为了避免每次都写上这一句重复的代码,可以在sqlSessionFactory打开sqlSession的时候,让sqlSession每次都自动提交事务。openSession是多态方法,传入boolean值可以实现自动提交事务。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }

接口下的方法openSession(boolean var1);DefaultsqlSessionManager实现了该方法,调用底层代码如下:

    public SqlSession openSession(boolean autoCommit) {
        return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值