搜档网
当前位置:搜档网 › 【黑马程序员】实现简单的mybatis的入门程序

【黑马程序员】实现简单的mybatis的入门程序

【黑马程序员】实现简单的mybatis的入门程序
【黑马程序员】实现简单的mybatis的入门程序

【黑马程序员】实现简单的mybatis 的入门程序

MyBatis 是一个优秀的持久层框架,它对jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection 、创建statement 、手动设置参数、结果集检索等jdbc 繁杂的过程代码。Mybatis 通过xml 或注解的方式将要执行的各种statement (statement 、preparedStatemnt 、

CallableStatement )配置起来,并通过java 对象和statement 中的sql 进行映射生成最终执行的sql 语句,最后由mybatis 框架执行sql 并将结果映射成java 对象并返回。 这里我们使用mybatis 来实现一个简单的入门案例

第一:搭建环境

1.jar 包

mybaits 的代码由https://www.sodocs.net/doc/749579621.html, 管理,下载地址地址:

https://https://www.sodocs.net/doc/749579621.html,/mybatis/mybatis-3/releases 。我们用到的jar 包如下:

mybatis-3.2.7.jar (mybatis 的核心包)

lib 文件夹下的所有jar (mybatis 的依赖包)

mysql-connector-java-5.1.7-bin.jar (数据库驱动包,这里是mysql 的驱动包)

2. 数据库

创建数据库和表及部分基础数据,这里我们只用到了用户表,所以只需要创建用户表即可,执行的sql 如下

01

02

03

04

05

06

DROP TABLE IF EXISTS `user `; CREATE TABLE `user ` ( `id` int (11) NOT NULL AUTO_INCREMENT, `username` varchar (32) NOT NULL COMMENT '用户名称', `birthday` date DEFAULT NULL COMMENT '生日', `sex` char (1) DEFAULT NULL COMMENT '性别',

07

08

09

10

11

`address` varchar(256) DEFAULT NULL COMMENT '地址',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1', '王五', null, '2', null);

INSERT INTO `user` VALUES ('2', '张三', '2014-07-10', '1', '北京市');

3.创建java的工程,这里用单元测试来实现对数据库的访问,所以只需要创建普通java工程就可以了。

4.准备一个log4j的配置文件

在项目的src下创建一个文件log4j.properties,然后将下面的配置复制进去即可 log4j.rootLogger=DEBUG,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

https://www.sodocs.net/doc/749579621.html,yout=org.apache.log4j.PatternLayout

https://www.sodocs.net/doc/749579621.html,yout.ConversionPattern=%5p[%t] - %m%n

第二:需求分析

这里主要实现对用户的操作,比如增删改查的操作,首先我们要完成的是根据用户id查询一个用户信息,假设我们要查询用户id为1的用户信息,这个需求需要执行的sql 语句如下:

SELECT id,username,birthday,sex,address FROM USER WHERE id=1

第三:开发步骤

1.根据user表中的字段编写user对象的实体类,提供对应的get和set方法。为了方便打印需要重写user对象的toString方法。

2.准备mybatis的全局配置文件SqlMapConfig.xml。这个文件是mybatis的全局配置文件,配置了数据源、事务等运行环境,加载配置mapper.xml映射,使用mybatis-3-config.dtd约束xml。这里我们的配置如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

PUBLIC "-//https://www.sodocs.net/doc/749579621.html,//DTD Config 3.0//EN"

"https://www.sodocs.net/doc/749579621.html,/dtd/mybatis-3-config.dtd">

value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />

3. mapper.xml映射文件。早期ibatis的映射文件以表名命名,后期mybatis 映射文件命名方式为:表名Mapper.xml。我们暂时以表名.xml这种方式命名。使用mybatis-3-mapper.dtd约束xml。文件头如下:

PUBLIC "-//https://www.sodocs.net/doc/749579621.html,//DTD Mapper 3.0//EN"

"https://www.sodocs.net/doc/749579621.html,/dtd/mybatis-3-mapper.dtd">

在xml 的根标签mapper 需要配置属性namespace ,这个属性在mapper 代理开发方式时有特殊的作用。namespace 等于mapper 接口类路径,这样实现通过映射文件找到对应的mapper 接口是哪个。这里可以暂时命名为test

因为我们要实现的是根据id 查询用户信息,所以需要增加子标签select 。这个标签有三个属性,id 表示这个标签的唯一标示。parameterType 表示传入参数的类型这里是int 类型。resultType 表示返回参数的类型,最终结果是一个user 对象,所以这里的值是user 类的包类路径。标签内我们就可以写sql 语句了。因为id 需要我们传入进来,所以在sql 语句中需要使用占位符,这里用#{}符号表示占位符,如果传入的是简单类型#{}中可以写value 或其它名称,如果是javaBean 对象,需要通过OGNL 方式去获取,表达式就是:属性.属性.属性等。

完成之后的mapper 的配置文件如下: 1

2 3 4 5

6

7 8 9

PUBLIC "-//https://www.sodocs.net/doc/749579621.html,//DTD Mapper 3.0//EN"

"https://www.sodocs.net/doc/749579621.html,/dtd/mybatis-3-mapper.dtd">

4.java 中的代码实现。

接下来我们就可以进行对数据库访问测试了,写一个测试类,然后增加一个测试方

法。在方法中首先需要创建SqlSessionFactory 对象,这个对象需要配置文件的流对象,所以我们需要读取配置文件并创建SqlSessionFactory 对象。由SqlSessionFactory 对象创建SqlSession 。SqlSession 里面封装了对数据库访问的很多方法,我们是根据id 查询,这里我们只需要调用有两个参数的selectOne 方法。这个方法中第一个参数表示要执行mapper 中配的哪个标签也就是statement ,属性方式是namespace.statement 的id ,这里是test.findUserById 。第二个参数表示传入的参数,这个参数类型要和select 的标签的parameterType 属性值对应的类型要一致。这个方法的返回值要和statement 中的resultType 的属性值的类型一致,这里肯定是一个user 对象,所以我们就可以直接返回一个user 对象,直接打印这个对象。具体代码如下: 01 02

03 04 05 06 07 08

09 10 11 12 13 14 15 16 17 18 19 20 @Test

public void testFindUserById() throws Exception { // mybatis 全局配置文件

String resource = "SqlMapConfig.xml";

// 根据mybatis 的全局配置文件构造 一个流

InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建SqlSession 会话

SqlSession sqlSession = sqlSessionFactory.openSession();

// 使用sqlSession 查询用户

// 第一个参数:statement 的id ,前边要加namespace

// 第二个参数:输入的参数对象值

// selectOne 用于返回单个对象,如果sql 查询返回一个列表(多个对象),如果使用selectOne 报错

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

System.out.println(user);

// 关闭sqlsession

sqlSession.close();

}

通过运行这个方法我们可以看到如下打印信息:

至此我们就实现了根据用户id查询用户信息的功能。

相关主题