"Mybatis series (ten) development of mybatis original dao interface and dao implementation"

The so-called original dao development method is actually similar to the hibernate development method, which requires dao interfaces and dao implementation classes.

There are several important classes for Dao development in MyBatis, they are SqlSessionFactoryBuilder, SqlSessionFactory, and SqlSession.

  SqlSession encapsulates operations on the database, such as: query, insert, update, delete, etc. SqlSession is created through SqlSessionFactory , and SqlSessionFactory is created through SqlSessionFactoryBuilder.

  1、SqlSessionFactoryBuilder

  SqlSessionFactoryBuilder is used to create SqlSessionFacoty. Once SqlSessionFacoty is created, SqlSessionFactoryBuilder is not needed. Because SqlSession is produced by SqlSessionFactory , SqlSessionFactoryBuilder can be used as a tool class. The best scope of use is the method scope, that is, the local variables in the method body.

  2、SqlSessionFactory

  SqlSessionFactory is an interface that defines different overloaded methods of openSession. The best use of SqlSessionFactory is during the entire application running period. Once created, it can be reused. Usually, SqlSessionFactory is managed in a singleton mode .

  3、SqlSession

  SqlSession is a user-oriented interface.  Database operations are defined in sqlSession , and the DefaultSqlSession implementation class is used by default .

  SqlSession provides many methods for operating the database: such as: selectOne ( returns a single object ) , selectList (returns a single or multiple objects), SqlSession is thread-unsafe, singleton mode, in the SqlSesion implementation class in addition to the interface in the The method (the method of operating the database) also has the data domain attribute. The best application of SqlSession is in the body of the method, which is defined as a local variable. The reference of the SqlSession instance must not be placed in a static field or instance field of a class.

The classes are IUserDao.java, UserDaoImpl.java

IUserDao.java

package cn.bj.mybatis.dao;

import cn.bj.mybatis.model.User;

public interface IUserDao {
    //Query user information according to user ID
    public User selectUser(int id);
    //Add user information
    public void addUser(User user);
    //delete user information
    public void deleteUser(int id);
    //modify user information
    public void updateUser(User user);
}


UserDaoImpl.java

package cn.bj.mybatis.dao.impl;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import cn.bj.mybatis.dao.IUserDao;
import cn.bj.mybatis.model.User;

public class UserDaoImpl implements IUserDao{
    //需要向dao实现类中注入sqlSessionFactory
    private SqlSessionFactory sqlSessionFactory;
    //在这里用构造方法注入
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User selectUser(int id) {
        SqlSession session = sqlSessionFactory.openSession();
        User user = session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", id);
        session.close();
        return user;
    }

    @Override
    public void addUser(User user) {
        SqlSession session = sqlSessionFactory.openSession();
        session.insert("cn.bj.mybatis.models.UserMapper.addUser", user);
        session.commit();
        session.close();
    }

    @Override
    public void deleteUser(int id) {
        SqlSession session = sqlSessionFactory.openSession();
        session.delete("cn.bj.mybatis.models.UserMapper.deleteUser", id);
        session.commit();
        session.close();
    }

    @Override
    public void updateUser(User user) {
        SqlSession session = sqlSessionFactory.openSession();
        session.update("cn.bj.mybatis.models.UserMapper.updateUser", user);
        session.commit();
        session.close();
    }

}

User.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="cn.bj.mybatis.models.UserMapper">
 -->
 <mapper namespace="cn.bj.mybatis.models.UserMapper">
 <select id="getUserOrders" parameterType="int" resultMap="resultUserOrderList">
       select t_user.id,t_user.username,t_user.age,t_order.id o_id,t_order.orderName from t_user,t_order where t_user.id=t_order.userid and t_user.id=#{id}
    </select>
   <resultMap type="Order" id="resultUserOrderList">
        <id property="id" column="o_id"/>
        <result property="orderName" column="orderName"/>
         <association property="user" javaType="User">
            <id property="id" column="id" />
            <result property="name" column="name" />
            <result property="age" column="age" />
        </association>       
    </resultMap>
  <!-- 查询数据 -->
  <select id="selectUser"  resultType="User">
    select * from t_user where id = #{id}
  </select>
  <!-- 增加数据 -->
  <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
      insert into t_user(username,age) values(#{username},#{age})
  </insert>
  <!-- 修改数据 -->
  <update id="updateUser" parameterType="User">
      update t_user set username=#{username},age=#{age} where id=#{id}
  </update>
  <!-- 删除数据 -->
  <delete id="deleteUser" parameterType="int">
      delete from t_user where id = #{id}
  </delete>
</mapper>

Mybatistest.java


package cn.bj.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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

import cn.bj.mybatis.dao.IUserDao;
import cn.bj.mybatis.dao.impl.UserDaoImpl;
import cn.bj.mybatis.model.IUserOperation;
import cn.bj.mybatis.model.Order;
import cn.bj.mybatis.model.User;

public class MybatisTest {
    public static void main(String[] args){
        SqlSessionFactory sqlSessionFactory = null;
        SqlSession session = null;
        String resource = "Configuration.xml";
        InputStream inputStream;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            IUserDao userDao = new UserDaoImpl(sqlSessionFactory);
            //User user = userDao.selectUser(2);查询
            //
            /*修改
            User user = userDao.selectUser(2);
            user.setAge(90);
            userDao.updateUser(user);
            */
            /**添加
            User user = new User();
            user.setUsername("kkddkdk");
            user.setAge(20);
            userDao.addUser(user);
            */
            /**
             * 删除
            
            userDao.deleteUser(2);
            */
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(session != null){
                session.close();
            }
        }
        
    }

}


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325337848&siteId=291194637