MyBatis(一)

目录

1.MyBatis基本用法

2.JDBC编程问题

3.MyBatis简介

3.1 MyBatis与Hibernate的区别

3.2 MyBatis的作用及特点

4.MyBatis入门案例

4.1 配置MyBatis运行环境

pom文件

log4j.properties配置文件

sqlMapConfig.xml配置文件

4.2 根据ID查询用户

mapper.xml配置文件

sqlMapConfig.xml配置文件

测试程序

4.3 根据用户名查询

mapper.xml配置文件

测试代码

mapper.xml配置文件

测试代码

4.4 用户添加操作

mapper.xml配置文件

测试代码

4.5 返回自增长主键

mapper.xml配置文件

测试程序

4.6 返回非自增长主键

mapper.xml配置文件

4.7 删除用户操作

mapper.xml配置文件

测试程序

4.8 更新用户操作

mapper.xml配置文件

测试程序

5.#{}与${}的区别

6.selectOne与selectList


1.MyBatis基本用法

MyBatis是一个简化了 Java 数据持久化层(persistence layer)代码的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单、易用的API与数据库进行交互。

MyBatis的前身是ibatis,ibatis于2002年由克林顿.比让(Clinton Begin)创建。MyBatis是ibatis的全新设计,并加入了注解和高级Mapper代理,是当下非常流行的持久层框架。

MyBatis流行的主要原因在于它的简单性和易用性。在Java应用程序中,数据持久化层涉及到的操作为:将从数据库查询到的数据映射成所对应的Java对象;将Java对象中的数据通SQL持久化到数据库中。

MyBatis通过抽象底层的JDBC代码,可以将SQL查询结果集自动映射到Java对象,将Java对象的数据持久化通过SQL自动存储到数据库中,让整个Dao层的开发过程转变成对SQL的操作,使JDBC编程变得非常容易。

2.JDBC编程问题

在Java EE应用开发中,必不可免的要与数据库打交道,与数据库的交互一般都是通过定一个DAO层(数据库访问)来完成这个操作。定义DAO层的主要是原因是为了解决在开发过程中业务与数据的分离,可以在不同的层次上解决不同的问题。从而避免让所有代码冗余在一起,更有利于后期应用的升级与维护。

但是,即使在应用开发中实现了分层,使用单纯的JDBC编程仍然存在大量的问题。如下代码所示:

try {
	Class.forName("com.mysql.jdbc.Driver");
	String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8";
	String user = "root";
	String password = "123456";
	Connection conn = DriverManager.getConnection(url, user, password);
	String sql = "select * from user where user_name=?";
	PreparedStatement ps = conn.prepareStatement(sql);
	ps.setString(1, "zhangsan");
	ResultSet rs = ps.executeQuery();
	while (rs.next()) {
		User us = new User();
		us.setUserId(rs.getInt("user_id"));
		us.setUsername(rs.getString("user_name"));
		us.setPassword(rs.getString("user_pass"));
		us.setCname(rs.getString("cname"));
	}
	conn.close();
} catch (Exception e) {
	e.printStackTrace();
}

1、数据库的连接,使用时就需要连接,不需要就关闭,频繁的打开与关闭连接,势必会造成数据库资源的浪费,降低数据库的性能。

解决方案:数据库连接池。

2、将要执行的SQL语句以硬编码的方式写入到程序中,如果需求发生变动,则需要更改代码,不利于系统的维护。

解决方案:将SQL语句配置在XML文件中,即使SQL语句更改,也不需要更改Java源程序。

3、如果执行的SQL中含有占位符,则需要向执行SQL语句的PreparedStatement对象中传入参数,如果查询条件发生更改,则占位符的数目也需要改动,那么传入的参数个数会随之发生变动。

解决方案:将执行SQL语句中的占位符、参数,同样配置在XML文件中。

4、执行查询后得到的ResultSet结果集中,在获取数据时将数据表的字段名称,同样以硬编码的方式写死在程序中,不利于系统的维护。

解决方案:通过配置将查询的结果集,自动映射为对应的Java对象。

以上所有问题的解决,就是数据库持久层框架存在的意义,而MyBatis这个数据库持久层框架就很好的解决了以上所有的问题。

3.MyBatis简介

MyBatis本是apache下的一个开源项目,项目的前身为iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并正式更名为MyBatis 。MyBatis是一个支持普通 SQL查询、存储过程、高级映射的优秀持久层开源框架。MyBatis几乎消除JDBC的所有代码,其中包括:参数的手动设置代码,对查询结果集进行遍历的代码。MyBatis 使用简单的XML或注解的方式用于配置数据和接口映射,将Java 的POJO(Plain Ordinary Java Objects,普通的Java对象)与数据库中对应的记录进行相互映射。

3.1 MyBatis与Hibernate的区别

Mybatis和Hibernate不同,它不是一个全自动ORM框架,因为MyBatis需要程序员自己编写SQL语句,不过Mybatis可以通过XML或注解方式灵活配置要运行的SQL语句,并将Java对象中的数据和SQL语句映射生成最终执行的SQL,最后将SQL执行的结果再映射生成Java对象。

Mybatis学习门槛低,简单易学,程序员直接编写原生态SQL,可严格控制SQL执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化就会要求成果输出迅速。但是灵活的前提是MyBatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套SQL映射文件,工作量大。

Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用Hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只

有适合才是最好。

3.2 MyBatis的作用及特点

MyBatis是一个持久层框架,它的主要作用就是可以让程序开发人员将主要精力放在SQL语句的编写上,通过MyBatis提供的映射方式,自由灵活的创建出满足业务需求的各种SQL语句,不管是单表查询,还是多表查询,都可以很好的完成。而这种灵活生成是一种半自动化的生成,即还是需要程序人员进行编写SQL。

如果要执行的SQL语句中存在占位符,那么JDBC在执行之前,需要向执行该SQL语句的PreparedStatement对象传入参数。Mybatis可以将参数进行自动的输入映射,查询之后的结果集,Mybatis可以灵活的映射成Java对象,这就是Mybatis最为重要的输入映射和输出映射。

如果使用MyBatis框架,则需要去它的官方网站下载,目前最新版本为3.4.1版,该地址为:

http

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大晴的上分之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值