《Mybatis系列(十)mybatis原始dao接口与dao实现的开发》

所谓的原始的dao的开发方式,其实就是和hibernate的开发方式类似的,需要dao的接口和dao的实现类。

MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession。

  SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。通过SqlSessionFactory创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。

  1、SqlSessionFactoryBuilder

  SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。

  2、SqlSessionFactory

  SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory

  3、SqlSession

  SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作,默认使用DefaultSqlSession实现类。

  SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)selectList(返回单个或多个对象),SqlSession是线程不安全的,单例模式,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性,SqlSession最佳应用场合在方法体内,定义成局部变量使用,绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

扫描二维码关注公众号,回复: 117497 查看本文章

类分别为IUserDao.java、UserDaoImpl.java

IUserDao.java

package cn.bj.mybatis.dao;

import cn.bj.mybatis.model.User;

public interface IUserDao {
    //根据用户ID查询用户信息
    public User selectUser(int id);
    //增加用户信息
    public void addUser(User user);
    //删除用户信息
    public void deleteUser(int id);
    //修改用户信息
    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();
            }
        }
        
    }

}


猜你喜欢

转载自blog.csdn.net/lovezhaohaimig/article/details/80214565