Mybatis2

接着上次的mybatis:

 原始dao开发方法(程序员需要写dao接口和dao实现类)

 

dao接口:

 dao接口实现类

 

public class UserDaoImpl implements UserDao {

 

// 需要向dao实现类中注入SqlSessionFactory

// 这里通过构造方法注入

private SqlSessionFactory sqlSessionFactory;

 

public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {

this.sqlSessionFactory = sqlSessionFactory;

}

 

@Override

public User findUserById(int id) throws Exception {

SqlSession sqlSession = sqlSessionFactory.openSession();

 

User user = sqlSession.selectOne("test.findUserById", id);

 

// 释放资源

sqlSession.close();

 

return user;

 

}

 

测试代码:

 

 总结原始 dao开发问题:

 

1dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。

 

 

 

2、调用sqlsession方法时将statementid硬编码了

 

 

 

3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

 

 

mapper代理方法(程序员只需要mapper接口(相当 于dao接口))

 

 

 

程序员还需要编写mapper.xml映射文件

程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

 

开发规范:

 

1、在mapper.xmlnamespace等于mapper接口地址:

 

 

2mapper.java接口中的方法名和mapper.xmlstatementid一致

 

3mapper.java接口中的方法输入参数类型和mapper.xmlstatementparameterType指定的类型一致。

 

4mapper.java接口中的方法返回值类型和mapper.xmlstatementresultType指定的类型一致。

 

 mapper.java

 mapper.xml

SqlMapConfig.xml中加载mapper.xml

 测试

SqlMapConfig.xml

sqlMapConfig.xml加载属性文件:

properties特性:

 

注意: MyBatis 将按照下面的顺序来加载属性:

properties 元素体内定义的属性首先被读取。

然后会读取properties 元素中resourceurl 加载的属性,它会覆盖已读取的同名属性。

最后读取parameterType传递的属性,它会覆盖已读取的同名属性。

 

建议:

不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

 

typeAliases(别名)

如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterTyperesultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。

 

 

单个别名定义:

引用别名:

 

 

动态sql

需求

 

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql

 

对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

 

mapper.xml

 

 

 

posted @ 2019-01-14 21:15  坑神欲哭无泪  阅读(377)  评论(0编辑  收藏  举报