Mybatis 框架 4

来源:互联网 发布:logo 设计软件 编辑:程序博客网 时间:2024/06/12 18:53

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]
原创粉丝点击