知了堂学习笔记--mybatis学习_使用MyBatis对表执行CRUD操作

请关注知了堂学习社区:知了学习
本文中使用到的测试环境是上一篇博文中的测试环境。
一、基于XML的实现
1、定义sql映射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">
<!-- 为这个mapper指定一个唯一的namespace,
namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 -->
<mapper namespace="com.zlt.mapping.userMapper">
<!-- id属性值必须是唯一的,不能够重复,称为statement的id
        将sql语句封装在mapperStatement的对象中,所以Id称为Statement的id
            使用parameterType属性指明查询时使用的参数类型,  
    resultType属性指明查询返回的结果集类型
    #{} : 表示一个占位符,指定输入参数
     -->
    <!-- 根据ID得到一个user对象 -->
    <select id="getUser" parameterType="java.lang.Integer"
     resultType="com.zlt.model.User" >
        SELECT * FROM users WHERE id = #{id}
    </select>

    <!-- 更新用户信息 -->
    <update id="updateUser" parameterType="com.zlt.model.User">
        update users set username=#{username},mobile=#{mobile} where id=#{id}
    </update>

    <!-- mybatis支持把多条查询结果封装成List集合 -->
    <!-- 查询全部用户 -->
    <select id="getAllUser" resultType="com.zlt.model.User">
        select * from users
    </select>

</mapper>

2、测试:

public static void main(String[] args) {
        new Test().testGetOne01();
    }

    //基于xml文件
    public void testGetOne01() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        User user = sqlSession.selectOne("com.zlt.mapping.userMapper.getUser", 1);
        System.out.println(user.toString());
        //使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();
    }
    public void testGetAll01() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        List<User> user = sqlSession.selectList("com.zlt.mapping.userMapper.getAllUser");
        for(User u : user) {
            System.out.println(u.toString());
        }
        sqlSession.close();
    }

二、基于注解的实现
1、定义sql映射的接口

package com.zlt.mapping;

import java.util.List;

import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.zlt.model.User;

/**
 * 定义sql映射的接口,使用注解指明要执行的SQL
 * @author admin_yt
 *
 */
public interface UserMapperR {
    /**
     * mybatis同样接口注解方法实现对数据库的CRUD操作
     * 关键字 : @Insert  @Select @Update @Delete
     * 注意:注解方法适合简短的SQL语句数据库操作(不常用)
     */

    @Select("select * from users where id=#{id}")
    public User getUserById(Integer id);
    @Select("select * from users")
    public List<User> getUserAll();
    @Update("update users set username=#{username},mobile=#{mobile} where id=#{id}")
    public int updateUser(User user);
}

需要说明的是,我们不需要针对UserMapperR接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。
2、需要我们在mybatis-config.xml文件中注册这个映射接口

<!-- 注册映射mapper文件 -->
    <mappers>
        <!-- 注册userMapper.xml文件, 
        userMapper.xml位于com.zlt.mapping这个包下,所以resource写成com/zlt/mapping/userMapper.xml-->
        <mapper resource="com/zlt/mapping/userMapper.xml" />
        <!-- 注册映射接口 -->
        <mapper class="com.zlt.mapping.UserMapperR"/>
    </mappers>

3、测试

//基于接口注解
    public void testGetOne02() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapperR mapperR = sqlSession.getMapper(UserMapperR.class);
        System.out.println(mapperR.getUserById(1).toString());
        sqlSession.close();
    }
    public void testGetAll02() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapperR mapperR = sqlSession.getMapper(UserMapperR.class);
        List<User> user = mapperR.getUserAll();
        for(User u : user) {
            System.out.println(u.toString());
        }
        sqlSession.close();
    }
    public void updateUser() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
        UserMapperR mapperR = sqlSession.getMapper(UserMapperR.class);
        User user = mapperR.getUserById(1);
        System.out.println("更新前:"+user);
        user.setUsername("yt");
        user.setMobile("123456789");
        System.out.println("修改后:"+user);
        int userList = mapperR.updateUser(user);
        System.out.println("更新后:"+mapperR.getUserById(1));
        sqlSession.close();
    }

updateUser方法更新结果:
这里写图片描述
本文用到的MyBatisUtil工具类代码如下:

package com.zlt.util;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
    //获取sqlsessionfactory
    private static SqlSessionFactory getSqlSesionFactory() {
        String resource = "mybatis-config.xml";
        InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        return factory;
    }
    //获取sqlsession
    public static SqlSession getSqlSession() {
        return getSqlSesionFactory().openSession();
    }
    //获取sqlsession,是否自动提交事务--增删改都需要提交事务
    public static SqlSession getSqlSession(boolean isAutoCommit) {
        return getSqlSesionFactory().openSession(isAutoCommit);
    }
}

注意使用完后需要关闭sqlSession

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值