用mybatis编写DAO

1、创建项目。将上次用JDBC写的项目迁移到mybatis。目录结构有所变化:

DAO改称Mapper,DTO改称POJO。不需要写Impl实现类了,新增了mapper.xml负责具体实现SQL语句,增加mybatis-config.xml负责连接数据源和统筹一切事务。

用mybatis编写DAO

------------------------------------------------------

2、导入库文件:除了mysql-connector.jar,还增加了mybatis.jar。

3、数据库还是一样。

用mybatis编写DAO

-----------------------------------------------------------------

4、编写student 对象,为了简单只给个id和name。

用mybatis编写DAO

----------------------------------------------------------------------

5、接着可以编写dao接口,接口的内容还是一样,只是改称mapper.java了,

用mybatis编写DAO

----------------------------------------------------

6、编写Impl,不是Impl.java了,而是mapper.xml文件。就是mybatis中的映射器。

用mybatis编写DAO

----------------------------------------------------------------------------------

7、为了方便,把数据库连接的一些信息定义成变量单独存在一个jdbc.properties文件里,后面会用到。

用mybatis编写DAO

-------------------

8、mybatis-config.xml

8.1、定义变量:(这里相当于告诉mybatis去找jdbc.properties文件,里面有变量定义。)

用mybatis编写DAO

8.2、定义每个bean的别名,否则每个bean都要写全名。这里用到了自动识别,如果有很多bean的时候就很方便。

用mybatis编写DAO

8.3、配置environments。

一个environments里可以有多个environment,id是自己定义的名字。default=“”需要指定默认用哪个。

(1)配置transactionManager:数据库事务管理方式,3种方式,这里选择POOLED。关闭自动提交,即允许程序调用commit提交或者rollback回滚。

(2)配置datasource:数据源,即数据库连接的信息,用刚刚定义过的变量赋值。

用mybatis编写DAO

(3)指定mybatis映射器为刚才的mapper接口和mapper.xml,这里也用了自动识别。

用mybatis编写DAO

4、最后来测试一下。编写main。

(1)首先构建SQLSessionFactory工厂接口(利用mybatis-config.xml和mybatis的SQLSessionFactoryBuilder接口)

用mybatis编写DAO

(2)然后依靠SQLSessionFactory生成并使用SQLSession。相当于jdbc里的connection,用完后要关闭。就像一个公司的前台客服或接待,我只需告诉她我要什么,过段时间她会把结果给我,但具体做事的不是她。用法如下。

SqlSession sqlSession = null;

sqlSession = sqlSessionFactory.openSession();

... ...

sqlSession.commit();

sqlSession.close();

(3)实现mapper。mybatis用动态代理实现了这个mapper接口...暂且知道是这么用的就行。

StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);

(4)测试代码

Student student1 = new Student();//创建对象

student1.setStu_name(NAME);//给对象name属性赋值,NAME这里是我定义的字符串常量。

studentMapper.insert(student1);//插入了1条记录

List<Student> students_found = new ArrayList<>();//建一个容器来存放查询结果,方便查询多条记录。

students_found = studentMapper.listAll();//列出所有记录

if (students_found != null){

System.out.println("查找成功:"+ students_found.toString());//将查询结果打印出来

}

用mybatis编写DAO用mybatis编写DAO用mybatis编写DAO

(5)测试结果:插入了2条记录并打印。

用mybatis编写DAO

遇到的问题:

mybatis处理结果集、模糊查询,解决方法:配置resultMap,即可以用POJO存储结果集;

遇到关于id的类型long和int的问题无法编译通过,解决办法:暂时把代码中的long都改成int;


笔记:

1、很多框架可以代替原始JDBC方式编程,提升效率,利于解耦。

2、持久化类:用来实现业务问题实体的类,可被保存到数据库中。

3、CRUD:create、retrieve(检索)、update、delete。

4、DAO:提供CRUD操作,包含接口、实现等。

5、datasource:用于代替drivermanager来获取数据库连接。

6、事务(transaction):代表一次原子操作。

7、sqlsessionfectory:表示单个数据库的映射关系,是编译后的内存镜像。

8、basedao:将所有DAO组件共同拥有的方法,(一般是增删查改)抽出来,供其它dao组件扩展(继承)。