mybatis开发dao的方式 与 全局配置文件

mybatis开发dao的方式

1.1需求
1、根据用户ID查询用户信息
2、根据用户名称模糊查询用户列表
3、添加用户

1.2原始dao的开发方式
即开发dao接口和dao实现类

1.2.1Dao接口
这里写图片描述
1.2.2Dao实现类
SqlSessionFactory,它的生命周期,应该是应用范围,全局范围只有一个工厂,使用单例模式来实现这个功能。与spring集成之后,由spring来对其进行单例管理。

SqlSession,它内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部。

public class UserDaoImpl implements UserDao {

    // 依赖注入
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User findUserById(int id) throws Exception {
        // 创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 调用SqlSession的增删改查方法
        // 第一个参数:表示statement的唯一标示
        User user = sqlSession.selectOne("test.findUserById", id);
        System.out.println(user);
        // 关闭资源
        sqlSession.close();
        return sqlSession.selectOne("test.findUserById", 1);
    }

    @Override
    public List<User> findUsersByName(String name) {
        // 创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 调用SqlSession的增删改查方法
        // 第一个参数:表示statement的唯一标示
        List<User> list = sqlSession.selectOne("test.findUsersByName", name);
        System.out.println(list);
        // 关闭资源
        sqlSession.close();
        return list;
    }

    @Override
    public void insertUser(User user) {
        // 创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 调用SqlSession的增删改查方法
        // 第一个参数:表示statement的唯一标示
        sqlSession.insert("test.insertUser", user);

        System.out.println(user.getId());
        // 提交事务
        sqlSession.commit();
        // 关闭资源
        sqlSession.close();
    }

}

1.2.3测试代码
这里写图片描述
1.2.4问题思考
1、有大量的重复的模板代码

2、存在硬编码

1.3Mapper代理的开发方式
即开发mapper接口(相当于dao接口)

Mapper代理使用的是jdk的代理策略。

1.3.1Mapper代理的开发规范
1、mapper接口的全限定名要和mapper映射文件的namespace值一致。
2、mapper接口的方法名称要和mapper映射文件的statement的id一致。
3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。
4、mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

1.3.2mapper接口
这里写图片描述
1.3.3mapper映射文件
在config下创建mapper目录然后创建UserMapper.xml(这是mybatis的命名规范,当然,也不是必须是这个名称)
sqlSession内部的数据区域本身就是一级缓存,是通过map来存储的。
这里写图片描述
1.3.4加载映射文件
这里写图片描述
1.3.5测试代码
这里写图片描述
2全局配置文件

2.1概览
SqlMapConfig.xml的配置内容和顺序如下(顺序不能乱):
Properties(属性)
Settings(全局参数设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境信息集合)
environment(单个环境信息)
transactionManager(事物)
dataSource(数据源)
mappers(映射器)
2.2常用配置

2.2.1Properties

Db.properties
这里写图片描述
SqlMapConfig.xml
这里写图片描述
加载的顺序
1、先加载properties中property标签声明的属性
2、再加载properties标签引入的java配置文件中的属性
3、parameterType的值会和properties的属性值发生冲突。

2.2.2settings
mybatis全局配置参数,全局参数将会影响mybatis的运行行为。

详细参见“mybatis学习资料/mybatis-settings.xlsx”文件
这里写图片描述
这里写图片描述
这里写图片描述
2.2.3typeAliases
对po类进行别名的定义

2.2.3.1mybatis支持的别名
这里写图片描述
2.2.3.2自定义别名
这里写图片描述
2.2.4Mappers
2.2.4.1<mapper resource=’’/>
使用相对于类路径的资源
如:<mapper resource="sqlmap/User.xml" />

7.2.4.2<mapper url=’’/>
使用完全限定路径
如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

7.2.4.3<mapper class=’’/>
使用mapper接口的全限定名
如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>

注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

7.2.4.4<package name=’’/>(推荐)
注册指定包下的所有映射文件
如:<package name="cn.itcast.mybatis.mapper"/>

注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

over~~~

猜你喜欢

转载自blog.csdn.net/weixin_41653442/article/details/81742636