美文网首页
Mybatis手动模式CRUD

Mybatis手动模式CRUD

作者: 神豪VS勇士赢 | 来源:发表于2018-07-27 17:50 被阅读4次

    一、先准备mybatis-config.xml 这个基础配置文件 配置文件可以使用上一文章中使用的配置文件,不用任何修改。
    二 、准备 Mapper.xml文件
    分别加入增删改查的代码 ,当然了 我们观察下面的代码可以发现 我们在修改和增加 传参数的时候 类型可写对象类型 当然可 也可以使用 map 类型对应数据库里面的字段 都可以完成修改以及 增加的操作。

     <select id="findUserByid" resultType="com.zyh.pojo.User" parameterType="java.lang.Long">
        select * from user where id = #{id}
    </select>
    <insert id="insertOneUserParamUser"  parameterType="com.zyh.pojo.User">
        INSERT
        INTO  user(username,password)
        VALUES (#{username},#{password})
    

    </insert>
    <insert id="insertOneUserParamMap" parameterType="java.util.Map">
    INSERT
    INTO user(username,password)
    VALUES (#{username},#{password})
    </insert>
    <delete id="deleteOneUserParamId" parameterType="java.lang.Long">
    DELETE
    FROM user
    WHERE id=#{id}
    </delete>
    <update id="updateOneUserParamUser" parameterType="com.zyh.pojo.User">
    UPDATE user
    SET username =#{username},password=#{password}
    WHERE id=#{id}
    </update>
    <update id="updateOneUserParamMap" parameterType="java.util.Map">
    UPDATE user
    SET username=#{username},password=#{password}
    WHERE id=#{id}
    </update>

    我们现在可以观察一下 上一文章中的 入门程序 里面 有几行代码是冗余的
    并且里面涉及到 sqlSessionFactory 所以我们可以使用单例涉及模式来处理上面的几行代码 提高性能。


    image.png

    首先 :我们可以先来复习一下单例模式:
    大体上 ,单例可以分为 懒汉式和恶汉式。

    第一种:饿汉模式
    public class SingleTon {
    private SingleTon(){
    }
    //实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间
    private final static SingleTon instance = new SingleTon();
    public static SingleTon getInstance(){
    return instance;
    }
    }
    第二种:懒汉模式
    public class SingleTon {
    private SingleTon(){}
    private static instance = null;//new SingleTon();
    public static synchronized SingleTon getInstance(){
    if(instance == null)
    instance = new SingleTon();
    return instance;
    }
    }
    我们可以使用 静态代码块以及 同步锁来优化上面的代码 比如懒汉式可以加入同步锁解决线程不安全情况 ,以及分别加入静态代码块提高执行效率 ,当然可能会导致内存占用率会很大。
    /**

    • 这个恶汉式
      /
      public class SqlSessionFactoryUtilSingleE {
      private SqlSessionFactoryUtilSingleE(){
      }
      private static SqlSessionFactory sqlSessionFactory;
      static {
      try {
      Reader reader = null;
      reader = Resources.getResourceAsReader("mybatis-config.xml");
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      public static SqlSession getSqlSession(){
      return sqlSessionFactory.openSession();
      }
      }
      /
      *
    • 这个懒汉式
      */
      public class SqlSessionFactoryUtilSingleL {
      private SqlSessionFactoryUtilSingleL(){
      }
      private static SqlSessionFactory sqlSessionFactory=null;
      static {
      try {
      Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
      getSessionFactory(reader);
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      public static synchronized void getSessionFactory( Reader reader){
      if(sqlSessionFactory==null){
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
      }
      }
      public static SqlSession getSqlSession(){
      return sqlSessionFactory.openSession();
      }
      }
      接下来就很简单了 ,增加的时候可以封装User对象,也可以将属性封装成Map 进行添加 都可以完成需求。
      代码如下:

    @Override
    public void insertOneUserParamUser(User user) {
    SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
    sqlSession.insert("com.zyh.insertOneUserParamUser",user);
    sqlSession.commit();
    }

    @Override
    public void insertOneUserParamMap(Map map) {
        SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
        sqlSession.insert("com.zyh.insertOneUserParamMap",map);
        sqlSession.commit();
    }
    
    @Override
    public void deleteOneUserParamId(Long id) {
        SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
        sqlSession.insert("com.zyh.deleteOneUserParamId",id);
        sqlSession.commit();
    }
    
    @Override
    public void updateOneUserParamUser(User user) {
        SqlSession sqlSession = SqlSessionFactoryUtilSingleE.getSqlSession();
        sqlSession.insert("com.zyh.updateOneUserParamUser",user);
        sqlSession.commit();
    }
    
    @Override
    public void updateOneUserParamMap(Map map) {
        SqlSession sqlSession = SqlSessionFactoryUtilSingleE.getSqlSession();
        sqlSession.insert("com.zyh.updateOneUserParamMap",map);
        sqlSession.commit();
    }
    

    DAO开发:
    增删改需要提交事务sqlSession.commit();//在操作数据之后提交事务,查询不需要

    从上面的代码发现 我们持久化层还是写了很多代码 ,比如 pojo 比如复杂的Mapper 等等 ....
    下一篇文章我们将会 讲述一下 如何使用插件自动生成Mapper、dao、 pojo
    我们只需要创建数据库表即可完成自动生成 是不是很期待呢?

    相关文章

      网友评论

          本文标题:Mybatis手动模式CRUD

          本文链接:https://www.haomeiwen.com/subject/fsmgmftx.html