环境的配置见我上一篇博客

首先,在上一篇博客中,我们知道,SqlSession中封装了对数据库的curd操作,通过sqlSessionFactory可以创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder来进行创建的。

通过ss实例,来实现对数据库的curd操作。

例如: ss.delete("test.deleteUserById", 3);

然后,关于SqlSessionFactoryBuilder

SqlSessionFactoryBuilder用于创建SqlSessionFactory,并且SqlSessionFactory一旦创建完成就不需要SqlSessionFactoryBuilder了,所以可以把它当做一个工具类使用。

最佳的使用方法是放到方法体内当局部变量。

关于SqlSessionFactory

SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法。最佳使用范围是整个应用运行期间,一旦创建后可以重复使用。所以创建一个实例就够了

所以通常以单例模式管理它。

关于SqlSession

SqlSession是一个面向用户的接口,其中定义了数据库的操作方法。

每个线程都应该有它自己的SqlSession实例,该实例不能被共享使用,它也是线程不安全的。所以使用的最佳范围是请求或方法内。绝对不能把它实例的引用放到一个类的静态字段或实例字段中。

打开一个SqlSession,使用完毕要记得关闭它。所以通常放到finally代码块中以确保每次都能关闭。

这里直接进入正题~~

配置文件依旧用的上一篇博客定义的User.xml

首先,编写Dao接口和Dao实现类

在这里,用查询操作来举例子。

要实现Insert,update,delete操作,都是同样的道理,这里不再赘述。

由于SqlSessionFactory一旦创建后可以重复使用。所以创建一个实例就够了,并且可以通过构造方法把它传入进去。

public class UserDaoImpl implements UserDao {

    private SqlSessionFactory sqlSessionFactory;

    //通过构造方法注入
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
super();
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public User findUserById(Integer id) {
//sqlSession是线程不安全的,所以它最佳的使用范围在方法体内,用完就能销毁
SqlSession ss = sqlSessionFactory.openSession();
User user = ss.selectOne("test.findUserById", id);
return user;
} @Override
public List<User> findUserByUserName(String username) {
SqlSession ss = sqlSessionFactory.openSession();
List<User> list = ss.selectList("test.findUserByUserName",username);
return list;
} }

测试代码:

public class UserDaoTest {

    private SqlSessionFactory factory;

    //在测试方法前执行这个方法
@Before
public void setUp() throws Exception{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(inputStream); }
@Test
public void testFindUserById() throws Exception{
UserDao userdao = new UserDaoImpl(factory);
User user = userdao.findUserById(1);
System.out.println(user);
} @Test
public List<User> testFindUserByUsername() throws Exception{
UserDao ud = new UserDaoImpl(factory);
List<User> list = ud.findUserByUserName("王");
return list; }
}

这是第一个方法的运行结果:

原始Dao开发存在的问题:

Dao方法体依旧存在重复代码,即:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法。

在本例中,调用sqlSession的数据库操作方法需要指定id,这里存在硬编码,不利于开发维护。

通过Mybatis原始Dao来实现curd操作的更多相关文章

  1. Spring + Mybatis - 原始dao开发整合 与 Mapper代理整合

    Spring + Mybatis - 原始dao开发整合 与 Mapper代理整合 标签: mybatisSpringbeanApplicationContextMapper 2015-12-31 1 ...

  2. MyBatis原始dao开发及问题总结(五)

    一.MyBatis原始Dao开发方式 1.原始dao开发需要程序员编写dao接口和dao接口实现类 编写UserDao接口:UserDao.java package codeRose.dao; pub ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  4. Mybatis 原始dao CRUD方法

    用到的相关jar包及所用版本如下: 其中的Mybatis可以到github.com的网站下载 <project xmlns="http://maven.apache.org/POM/4 ...

  5. MyBatis 原始Dao开发方式

    原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 映射文件 <?xml version="1.0" encoding="UTF-8" ?> ...

  6. Mybatis使用Dao代码方式CURD

    Mybatis 使用Dao代码方式进行增.删.改.查. 1.Maven的pom.xml <project xmlns="http://maven.apache.org/POM/4.0. ...

  7. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  8. 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...

  9. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

随机推荐

  1. XML 与 XML Schema的使用教程

    引言:我写本文的宗旨在于给需要使用XML,而又对XML不是很熟悉的人们提供一种使用思路,而不没有给出具体的     使用方法,至于下文中提到的使用方法,还未尝试过,都是从网上整理而来! 一.概述 什么 ...

  2. linux 修改普通用户的 max user process

    因为出现  fork: retry: No child processes 问题 , google了一下 , 大家说是要去修改 /etc/security/limits.conf 文件 , 然后我用r ...

  3. HADOOP高可用机制

    HADOOP高可用机制 HA运作机制 什么是HA HADOOP如何实现HA HDFS-HA详解 HA集群搭建 目标: 掌握分布式系统中HA机制的思想 掌握HADOOP内置HA的运作机制 掌握HADOO ...

  4. 【改】利用ALSA库进行音频重采样

    转自:http://www.voidcn.com/article/p-snamarwr-p.html 一.ALSA介绍: 1.简介: 高级Linux声音体系(英语:Advanced LinuxSoun ...

  5. VBA正则笔记 理解肯定环视

    之前没有理解好,还以为是学习笔记有谬误. 'VBA正则笔记 肯定环视 Public Sub RegExHandle() Dim Regex As Object Dim Mh As Object, On ...

  6. ECharts前端图形展示

    这次负责慢查询预警,前后端都是自己处理,这次遇到了前端作图的需求,做一个记录以便后续使用: 使用的作图方式是ECharts,相应的example官方有相应的文档和使用方法,比较简单,一下只贴链接: h ...

  7. 调用 js 生成图片二维码

    一.js 生成二维码: 首先,需要引用 jQuery 和 jquery.qrcode.js.然后: //生产二维码 $("#qrcodeCanvas").qrcode({ rend ...

  8. sys 模块的应用

    1.常见的sys模块的应用: 1.在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称 argv(命令行参数个数) #!/usr/bin/env python ...

  9. mock js使用方法简单记录

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. hello2 源码分析

    1.GreetingServlet.java(问候页面): /** * Copyright (c) 2014 Oracle and/or its affiliates. All rights rese ...