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代理开发模式
重点
- 新建一个UserDao.xml文件(必须与接口同名UserDao.java)
将该文件配置进SqlMapConfig.xml文件中- UserDao.xml中 设置namespace=”com.nue.dao.UserDao”关联到要操作的到的接口文件
- 接口中声明的方法中
方法名与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]