操作users表的CRUD(增、查、删、改)

提示:结合之前文章MyBatis基础,在此基础上进行操作。

1 封装工具类

在src下main的java目录下建实体类:yj.com.units.MyBatisUtils

package yj.com.units;

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

import java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
     static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();

    }
}

2.SqlSessionFactory

SqlSessionFactory是mybatos框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过xml配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例:

//读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//根据配置文件构建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory对象是线程安全的,他一旦被创建,在整个应用执行期间都会存在。如果我们多次地创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。为了解决此问题,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单例模式。

3. SqlSession

SqlSession是mybatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。SqlSession对象包含了数据库中所有执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用其实例来执行已映射的SQL语句。

每个线程都应该有一个自己的SqlSession实例,并且该实例是不能被共享的。同时,SqlSession实例也是线程不安全的,因此其使用范围最好再一次请求或一个方法中,绝不能将其放在一个类的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。使用完SqlSession对象之后,要及时地关闭它,通常可以将其放在finally块中关闭,代码入下:

SqlSession sqlSession = SqlSessionFactory.openSession();
try{
    //此处执行持久化操作
}finally{
    sqlSession.close();
}

4.根据id查找

    //按id号查找
    public User findbyId(int id);
    <!--查找-->
    <select id="findbyid" parameterType="int" resultType="yj.com.pojo.User">
        select * from xsgl.user where id=#{id}
    </select>
  //查询
    @Test
    public void findbyid(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.findbyid(1002);
        System.out.println(user.toString());
    }

5.添加

   // 添加一个新用户
public int addUser(User user);
    <!-- 添加 -->
    <insert id="addUser" parameterType="yj.com.pojo.User">
        insert into xsgl.user(id,name,pwd,age) values (#{id},#{name},#{pwd},#{age})
    </insert>
  //添加
    @Test
    public void addUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(12323,"叶凡","123456",20);
        int i = mapper.addUser(user);
        if (i>=0){
            sqlSession.commit();
            System.out.println("插入成功");
        }else{
            sqlSession.rollback();
            System.out.println("插入不成功");
        }
    }

6.修改

    //修改用户
   public int updateUser(User user);
    <!-- 修改-->
    <update id="updateUser" parameterType="yj.com.pojo.User">
        update user set id=#{id},name=#{name},pwd=#{pwd},age=#{age} where id=#{id};
    </update>
   //修改
    @Test
    public void updateUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.updateUser(new User(12323,"萧炎","12323",22));
        if (i>=1){
            System.out.println("修改成功");
            sqlSession.commit();
        }else {
            System.out.println("修改不成功");
            sqlSession.rollback();
        }
    }

7.删除

 //按 id号删除
  public int delete(int id);
    <!--删除-->
    <delete id="delete" parameterType="int">
        delete from xsgl.user where id=#{id}
 //删除
    @Test
    public void delUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.delete(12323);
        if (i>=1){
            System.out.println("删除成功");
            sqlSession.commit();
        }else {
            System.out.println("删除不成功");
            sqlSession.rollback();
        }
    }

8.分析错误

1)标签不要匹配错

2)resource绑定mapper,需要使用路径

3)程序配置文件必须符合规范

4)NullPointException,没有注册到资源

5)输出的xml文件中存在中文乱码问题!

6)maven资源没有导出问题

猜你喜欢

转载自blog.csdn.net/m0_52896041/article/details/128055517
今日推荐