学而时习之,不亦说乎!

                             --《论语》

本文以前文“mybatis-入门”为基础,同时再次提醒最佳参考资料:

http://www.mybatis.org/mybatis-3/zh/index.html

DAO开发说明:

mybatis的DAO开发分为两种方式:原始开发方式和Mapper代理开发方式。

原始开发方式指先写一个dao接口,然后写一个dao实现类,在dao实现类中注入SqlSessionFactory对象,获取SqlSession,最后执行代码。

Mapper代理开发方式指写好一个dao接口,然后写mapper映射文件,通过代理生成实现类。

原始开发方式:

1)在mysql中创建数据库和表,并插入数据:
  1. create database mybatis;
  2. use mybatis;
  3. create table user (
  4. id int primary key auto_increment comment '主键id',
  5. name varchar(30) comment '姓名',
  6. age int comment '年龄',
  7. birthday date comment '生日',
  8. address varchar(200) comment '地址'
  9. )default charset utf8;
  10. insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市');
  11. insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市');
  12. insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市');
  13. insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市');
  14. insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市');
  15. select * from user;

2)项目整体结构如下:

3)创建maven工程,pom.xml如下:
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.zby</groupId>
  5. <artifactId>mybatis</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <dependencies>
  8. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  9. <dependency>
  10. <groupId>org.mybatis</groupId>
  11. <artifactId>mybatis</artifactId>
  12. <version>3.4.0</version>
  13. </dependency>
  14. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  15. <dependency>
  16. <groupId>mysql</groupId>
  17. <artifactId>mysql-connector-java</artifactId>
  18. <version>5.1.34</version>
  19. </dependency>
  20. <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  21. <dependency>
  22. <groupId>log4j</groupId>
  23. <artifactId>log4j</artifactId>
  24. <version>1.2.17</version>
  25. </dependency>
  26. </dependencies>
  27. </project>
 
4)创建数据表user对应的实体类:
package com.zby.domain;

import java.util.Date;

/**

* @描述:对应数据库user表的实体类
* @类名:
* @作者: zby
* @创建时间: 2017年5月22日 上午10:23:21
* @版本: v1.0
*/
public class User {
private Integer id;

private String name;

private Integer age;

private Date birthday;

private String address;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Date getBirthday() {
return birthday;
}

public void setBirthday(Date birthday) {
this.birthday = birthday;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", birthday=" + birthday + ", address=" + address
+ "]";
}

}

5)在src/main/resources文件夹下创建mybatis主配置文件SqlMapConfig.xml,该文件配置了mybatis的全局信息,这里只是简单配置数据源信息,内容如下:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- 配置mybatis的环境信息 -->
  7. <environments default="development">
  8. <environment id="development">
  9. <!-- 配置JDBC事务控制,由mybatis进行管理 -->
  10. <transactionManager type="JDBC"></transactionManager>
  11. <!-- 配置数据源,采用mybatis连接池 -->
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.jdbc.Driver" />
  14. <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8" />
  15. <property name="username" value="root" />
  16. <property name="password" value="123456" />
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <!-- 加载映射文件 -->
  21. <mappers>
  22. <mapper resource="mapper/UserMapper.xml" />
  23. </mappers>
  24. </configuration>

6)上面加载了一个配置文件,所以这一步接着在同目录下创建mapper文件夹,并在mapper下创建Usermapper.xml,内容如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!-- namespace:命名空间,对statement的信息进行分类管理 -->
  6. <!-- 注意:在mapper代理时,它具有特殊及重要的作用 -->
  7. <mapper namespace="test">
  8. <!-- 根据用户ID查询用户信息 -->
  9. <!-- select:表示一个MappedStatement对象 -->
  10. <!-- id:statement的唯一标示 -->
  11. <!-- #{}:表示一个占位符? -->
  12. <!-- #{id}:里面的id表示输入参数的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 -->
  13. <!-- parameterType:输入参数的java类型 -->
  14. <!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
  15. <select id="findUserById" parameterType="int"
  16. resultType="com.zby.domain.User">
  17. SELECT * FROM USER WHERE id =#{id}
  18. </select>
  19. </mapper>

7)为了看到日志打印,在src/main/resources文件夹下加入log4j.properties配置文件,内容如下:

  1. # Global logging configuration
  2. log4j.rootLogger=DEBUG, stdout
  3. # Console output...
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

8)编写UserDao类:

  1. package com.zby.dao;
    import com.zby.domain.User;
  2. /**
  3. *
  4. * @描述:用户DAO接口
  5. * @类名: UserDao
  6. * @作者: zby
  7. * @创建时间: 2017年5月27日 下午2:30:45
  8. * @版本: v1.0
  9. */
  10. public interface UserDao {
  11. User findUserById(Integer id);
  12. }

9)编写UserDaoImpl类:

  1. package com.zby.dao.impl;
  2. import org.apache.ibatis.session.SqlSession;
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import com.zby.dao.UserDao;
  5. import com.zby.domain.User;
  6. public class UserDaoImpl implements UserDao {
  7. private SqlSessionFactory sqlSessionFactory;
  8. public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
  9. this.sqlSessionFactory = sqlSessionFactory;
  10. }
  11. public User findUserById(Integer id) {
  12. SqlSession sqlSession = sqlSessionFactory.openSession();
  13. User user = sqlSession.selectOne("test.findUserById", id);
  14. sqlSession.close();
  15. return user;
  16. }
  17. }

10)编写测试类:

  1. package com.zby;
  2.  
  3. import java.io.InputStream;
  4.  
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8.  
  9. import com.zby.dao.UserDao;
  10. import com.zby.dao.impl.UserDaoImpl;
  11. import com.zby.domain.User;
  12.  
  13. public class Application {
  14.  
  15. public static void main(String[] args) throws Exception {
  16. // 1、读取配置文件
  17. String resource = "SqlMapConfig.xml";
  18. InputStream inputStream = Resources.getResourceAsStream(resource);
  19. // 2、根据配置文件创建SqlSessionFactory
  20. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  21.  
  22. // 创建UserDao实例,模拟spring注入SqlSessionFactory
  23. UserDao userDao = new UserDaoImpl(sqlSessionFactory);
  24. // 使用DAO
  25. User user = userDao.findUserById(1);
  26. System.out.println(user);
  27. }
  28.  
  29. }

11)输出结果:

  1. DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
  2. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  3. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  4. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  5. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  6. DEBUG [main] - Opening JDBC Connection
  7. DEBUG [main] - Created connection 193297871.
  8. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@b857dcf]
  9. DEBUG [main] - ==> Preparing: SELECT * FROM USER WHERE id =?
  10. DEBUG [main] - ==> Parameters: 1(Integer)
  11. DEBUG [main] - <== Total: 1
  12. DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@b857dcf]
  13. DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@b857dcf]
  14. DEBUG [main] - Returned connection 193297871 to pool.
  15. User [id=1, name=zby, age=24, birthday=Wed May 05 00:00:00 CST 1993, address=四川省成都市]

12)总结:这种方式开发DAO跟入门的Demo其实区别不大,也是传统的开发流程。

Mapper代理开发方式:

mapper代理开发方式实际就是传统开发方式的简化,不过简化的同时,需要我们准守一定的规范:

  1、 mapper接口的全限定名要和mapper映射文件的namespace值一致。

  2、 mapper接口的方法名称要和mapper映射文件的statement的id一致。

  3、 mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。

  4、 mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

现在我们在传统开发模式基础上进行修改:

1.删除UserDaoImpl类和所在的包;

2.修改UserMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 1、namespace的值跟UserDao的全限定名相同 -->
<mapper namespace="com.zby.dao.UserDao">
<!-- 2、id跟UserDao中的方法名相同 -->
<!-- 3、parameterType的类型跟UserDao中对应的方法的参数相同 -->
<!-- 4、resultType的类型跟UserDao中对应的方法的返回类型相同 -->
<select id="findUserById" parameterType="int" resultType="com.zby.domain.User">
select * from User where id=#{id}
</select>
</mapper>

3)编写测试类:

  1. package com.zby;
  2.  
  3. import java.io.InputStream;
  4.  
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9.  
  10. import com.zby.dao.UserDao;
  11. import com.zby.domain.User;
  12.  
  13. public class Application {
  14.  
  15. public static void main(String[] args) throws Exception {
  16. // 1、读取配置文件
  17. String resource = "SqlMapConfig.xml";
  18. InputStream inputStream = Resources.getResourceAsStream(resource);
  19. // 2、根据配置文件创建SqlSessionFactory
  20. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  21.  
  22. SqlSession sqlSession = sqlSessionFactory.openSession();
  23. // 获取代理对象
  24. UserDao userDao = sqlSession.getMapper(UserDao.class);
  25.  
  26. // 使用DAO
  27. User user = userDao.findUserById(1);
  28. System.out.println(user);
  29. }
  30.  
  31. }

4)运行结果:

  1. DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
  2. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  3. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  4. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  5. DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  6. DEBUG [main] - Opening JDBC Connection
  7. DEBUG [main] - Created connection 114388565.
  8. DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6d16e55]
  9. DEBUG [main] - ==> Preparing: select * from User where id=?
  10. DEBUG [main] - ==> Parameters: 1(Integer)
  11. DEBUG [main] - <== Total: 1
  12. User [id=1, name=zby, age=24, birthday=Wed May 05 00:00:00 CST 1993, address=四川省成都市]

5)其实还可以使用注解代替UserMapp.xml文件,但是,这样存在硬编码,而且不方便开发,有兴趣就自己去研究吧。

mybatis-dao开发的更多相关文章

  1. Mybatis Dao开发方法(二)

    使用Mapper代理的方式进行开发 Mapper开发的原理   使用Mybatis的Mapper代理方式进行开发,使用该方式,只需要编写Mapper接口,不再需要编写实现类,由Mybatis框架通过接 ...

  2. Mybatis Dao开发的两种方式(一)

     原始Dao的开发方式: 1.创建数据库配置文件db.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localh ...

  3. Mybatis学习笔记(三) 之Dao开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法,常用还是Mapper接口开发. SqlSession的使用范围 public class test1 { ...

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

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

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

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

  6. mybatis dao 层开发简易版 非整合 spring

    同样老习惯,先上项目结构截图 首先 补充上篇文中缺失的 mysql demo 用的 小脚本 drop database if exists mybatis; CREATE DATABASE `myba ...

  7. Mybatis学习(2)原始dao开发和使用mapper接口代理开发

    基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...

  8. mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)

    5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...

  9. MyBatis(3)开发dao方法

    本次全部学习内容:MyBatisLearning       SqlSession         SqlSession是一个面向用户(程序员)的接口.         SqlSession中提供了很 ...

  10. Mybatis 和Spring整合之原始dao开发

    F:\Aziliao\mybatis\代码\31.mybatis与spring整合-开发原始dao 1.1. SqlMapConfig.xml <?xml version="1.0&q ...

随机推荐

  1. export default {} 和new Vue()区别

     1.export default 的用法:相当于提供一个接口给外界,让其他文件通过 import 来引入使用. 而对于export default 和export的区别:  在JavaScript ...

  2. Django框架 之 查询 Extra

    Django框架 之 查询 Extra extra 1 2 extra(select=None, where=None, params=None,       tables=None, order_b ...

  3. 简单的Cooki案例——记录用户上次访问该网页的时间

    功能: 帮助网站实现提示客户端计算机上次访问网站的时间 实现原理: 将每一个会话作为一次访问过程,将每次会话的开始时间作为每次访问网站的时间,然后将这个时间以Cookie的形式存储到客户端的计算机中, ...

  4. ubuntu 14.04编译安装xen4.4总结

    1. 安装环境 操作系统:ubuntu14.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. sudo apt-g ...

  5. leetcode N-Queens I && N-Queens II

    第一个的代码: #include<iostream> #include<vector> using namespace std; bool isLegal(int i, int ...

  6. 在didSelectRowAtIndexPath 里面取cell的方法

    1.选中了tableview的cell的某一行调用的代理方法 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(N ...

  7. iOS11.0后APP的图标和启动图

    随着Xcode9的更新,APP的图标和启动图也发生了略微变化,下面介绍下图标和启动图的设置. 1.APP图标: 这些是系统默认你开发的项目支持iPad.Spotlight等,其实真正我们的项目只要支持 ...

  8. The server of Apache (二)——apache服务客户端验证

    一.确定网站名称.IP地址 地址为: 192.168.1.1   域名为: www.benet.com 二.配置可用的DNS域名服务或者修改本地hosts记录 ~] # vim /etc/hosts ...

  9. python3入门之字符串

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...

  10. 20165224 陆艺杰 《Java程序设计》课程总结

    每周作业链接汇总 https://www.cnblogs.com/lyj-/p/8414278.html https://www.cnblogs.com/lyj-/p/8695018.html htt ...