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

 

原文地址:https://www.cnblogs.com/jingyukeng/p/10269094.html