设为首页 收藏本站
查看: 1632|回复: 0

[经验分享] 《partner4java 讲述MyBatis入门》之第一步:MyBatis HelloWorld

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-11-24 08:50:03 | 显示全部楼层 |阅读模式
  What is MyBatis?

  MyBatis是一个一流的支持自定义SQL,存储过程和高级映射的持久化框架。

MyBatis隐藏了几乎所有的JDBC代码、参数的手动设置和结果检索。

它通过简单的XML或注解来实现映射器层,所谓映射器层,是用于在对象和数据库之间搬运数据,同时保证对象、数据库以及映射器本身都相互独立。


(MyBatis 本是apache的一个开源项目 iBatis , 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis)

  

  MyBatis与ORM的不同?

  我们已经有了Hibernate,还有JPA这种标准规范,为什么还需要MyBatis?

MyBatis与O/RM不同:他不是直接把类映射为数据库表或者说把类的字段映射为数据库列,而是“把SQL语句的参数和结果映射为类”。


使用SQL进行管理的好处:

1、易用性 -- 我们很多程序员是善于写SQL的,但是,他们在学习Hibernate这种存持久框架的时候感到有些困难,因为Hibernate真实用起来并不是传说中那么简单。MyBatis是一种混合型的持久层解决方案,这个持久层框架广泛使用了SQL,他使得SQL更容易使用、更容易集成到现代的面向对象软件中。

2、灵活性 -- MyBatis在数据库和类之间建立了一个额外的间接层,这就为在类和数据库直接建立映射关系带来了更大的灵活性,使得不用改变数据库模型或者对象模型的情况下改变他们的映射关系成为可能。(这里的间接层就是SQL)

3、增强部门间沟通 -- 经常数据库的管理权限不属于自己部门的,使用MyBatis可以让SQL彻底暴漏出来,增强和DBA的沟通。


何时不该使用MyBatis?

当你的团队大多都对Hibernate比较熟悉,且能很好的应用Hibernate达到项目的性能要求。因为毕竟Hibernate更节省代码量。

(个人推荐,如果没有特殊需求,还是用Hibernate)

  

  helloworld

  (iBatis更名为MyBatis后,从主要变化可以看出正向Hibernate靠拢)

(导读,具体配置含义,我们下一章有详细解释,这里,你要保证的是,你大体能看懂它们的含义)

第一步:获取Connection HelloWorld


MyBatis和Hibernate一样也有一个SessionFactory,全名为:SqlSessionFactory。

SqlSessionFactory通过SqlSessionFactoryBuilder创建,但是SqlSessionFactoryBuilder需要传入一个XML文件,也就是我们MyBatis的主文件(类似于Hibernate的hibernate.cfg.xml,我们这里起名为mybatis-config.xml)。


1、mybatis-config.xml

这个XML配置文件包含MyBatis的核心设置,包括一个数据库配置标签dataSource,事务管理方式相关transactionManager。

具体配置含义,我们后面有具体解释,先看一个简单的配置:


<?xml version="1.0" encoding="UTF-8" ?>
<!--iBatis 和 MyBatis 的全局配置文件使用不同的 DTD 约束,在将应用由 iBatis 升级至 MyBatis 时需要注意(两者的映射文件
DTD 约束也不相同) -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 这是根标签 -->
<configuration>
<!-- 元素允许在主配置文件之外提供一个properties格式对应文件,从而使得主配置文件更加通用。这样对部署非常有用 -->
<properties resource="mysql.properties" />

<!-- 配置数据源相关的信息 -->
<environments default="demo">
<environment id="demo">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property value="${driver}" name="driver" />
<property value="${url}" name="url" />
<property value="${username}" name="username" />
<property value="${password}" name="password" />
</dataSource>
</environment>
</environments>
</configuration>


2、对配置文件测试下
public static void main(String[] args) throws IOException {
//获取配置文件的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取我们的SqlSessionFactory(相当于Hibernate的SessionFactory);SqlSessionFactoryBuilder有点类似于Hibernate的Configuration。
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取一个Session
System.out.println(sqlSessionFactory.openSession().getConnection());
}


打印了一个Connection,证明已经连接成功

(现在自己动手实现一下)



我们获取到了连接,总要做些什么吧?


第二步:执行查询,获取返回结果HelloWorld


session的具体操作也和Hibernate很类似,不同的是,我们前面概念中提到的:MyBatis与O/RM不同,他不是直接把类映射为数据库表或者说把类的字段映射为数据库列,而是“把SQL语句的参数和结果映射为类”。


那么我们可以推测到,MyBatis无非就是需要我们做两点:1、配置我们要执行的SQL;2、配置输入参数和返回结果的相对于SQL的映射关系。


我们先学习一下第一点,因为第二点MyBatis大部分情况下会自动帮我买完成(在后面章节会介绍第二点):

两种配置方式:XML、注解;


1、XML

我们以前学Hibernate的时候,常用的做法是把每一张表和对应Entity的对应放入单独的XML中,而MyBatis是把一组相关SQL查询放入一个XML中。

示例:

我们查询出User表的所有数据,并打印所有获取结果。
主要分为四小步完成:

1:我们创建了接收返回结果的POJO(注意这里POJO字段的名字和数据库字段名字相同)
public class User {
private Integer id;
private String username;
private String password;


2:创建包含SQL的XML

/mybatis_hello/src/main/java/com/partner4java/demo2/User.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">
<!-- mapper为我们的根元素 -->
<mapper namespace="user">
<!-- 查询的元素为select,没什么好说的,先记住;id为我们后面需要用到的。resultType为我们的返回Java类型 -->
<select id="selectUser" resultType="com.partner4java.demo2.User">
select * from user
</select>
</mapper>


3:把XML交给mybatis-config.xml

用到了mappers,和我们Hibernate里的命名规则一样
<!-- mybatis-config.xml -->
<mappers>
<mapper resource="com/partner4java/demo2/User.xml"/>
</mappers>


4:测试
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config4.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sqlSessionFactory.openSession();
//虽然我们没有指定SQL返回结果列和POJO列的映射关系,但是它会自动把返回数据给我们塞进POJO,很容易想到是因为名字相同。
List<User> users = session.selectList("user.selectUser");
for(User user:users){
System.out.println(user);
}
}


(当然我们还应该关闭各种资源,这里我们只是最初步的展示,后面会一一道来)



不管你信不信,MyBatis就是如此简单。
  

  在接下来章节我们会详细介绍MyBatis各配置。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304753-1-1.html 上篇帖子: (收藏)MyBatis与Spring集成 下篇帖子: MyBatis系列目录--3. Mybatis注解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表