Mybatis 框架 4 - 两种开发模式

1.原始dao开发模式

package myBatisTest.dao;

import java.sql.SQLException;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import myBatisTest.UserInfo;

public class UserDaoImpl implements UserDao {
    SqlSessionFactory ssf;
    public UserDaoImpl(SqlSessionFactory ssf) {
        super();
        this.ssf = ssf;
    }
    @Override
    public UserInfo getUserById(int id) throws SQLException {
        /*打开会话*/
        SqlSession session = ssf.openSession();
        /*SelectUser:mapper.xml中方法id  1: 传入的参数*/
        UserInfo userInfo = session.selectOne("SelectUser", 1);
        session.close();
        return userInfo;
    }

}
package myBatisTest;

import ....

public class test {

    public static void main(String[] args) throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);
        UserDaoImpl usi = new UserDaoImpl(ssf);
        try {
            usi.getUserById(1);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

缺点 :

1.daoImpl代码做了许多重复的动作 例如 每个方法都需要
session.commit() session.close()
2.UserInfo userInfo = session.selectOne(“SelectUser”, obj);
第一个参数在mapper.xml被写死
第二个参数是object传错不报错

2.mapper代理开发模式

重点

  1. 新建一个UserDao.xml文件(必须与接口同名UserDao.java)
    将该文件配置进SqlMapConfig.xml文件中
  2. UserDao.xml中 设置namespace=”com.nue.dao.UserDao”关联到要操作的到的接口文件
  3. 接口中声明的方法中
    方法名与UserDao.xml中操作语句 id一致
    参数类型与parameterType保持一致,
    返回类型与resultType保持一致

UserDao.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=""com.nue.dao.UserDao">
    <select id="getUserById" parameterType="int" resultType="myBatisTest.UserInfo">
        select * from userinfo where id = #{id}
    </select>
</mapper>

UserDao.java中


package myBatisTest.dao;
import java.sql.SQLException;
import myBatisTest.UserInfo;

public interface UserDao {
    public UserInfo getUserById(int id) throws SQLException;
}

test.java中

package myBatisTest.dao;

import ....
public class test {

    public static void main(String[] args) throws IOException, SQLException {
        // TODO Auto-generated method stub
        /*1.加载环境 获取SqlSessionFactory 接口*/
        InputStream is = Resources.getResourceAsStream("myBatisTest/dao/SqlMapConfig.xml");
        SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);

        /*2.打开会话*/
        SqlSession sqlSession = sf.openSession();

        /*3.获取代理对象,不用写实现类*/
        UserDao ud= sqlSession.getMapper(UserDao.class);
        UserInfo u=ud.getUserById(55);
        System.out.println(u);
    }
}

concole


UserInfo [id=55, userName=张九, password=333, sex=男, email=null]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值