JDBC编程中的问题

    1. 将SQL语句硬编码到Java代码,不利于系统维护。
        设想如何解决:将SQL单独抽取出来,在配置文件(xml方式、properties文件)进行配置。
    2. 数据库连接不能重复利用,对数据库资源是一中浪费。
        设想如何解决:使用数据库连接池管理数据库连接。
    3. 向Statement设置参数时,对于参数的位置通过硬编码指定,不利于系统维护。
        设想如何解决:是否能够自动将Java对象的值设置到Statement。
    4. 遍历结果集,resultSet.getString硬编码指定列名称。
        设想如何解决:能否自动将SQL查询结果集转成Java对象。

MyBatis介绍

        MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到google code,并且改名为MyBatis。
        MyBatis 是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等JDBC繁杂的过程代码。
        MyBatis 通过xml或主键的方式将要执行的statement配置起来,并通过Java对象和statement中的SQL进行映射生成最终执行的SQL语句,最后由MyBatis框架执行SQL并将结果映射成Java对象并返回。
        MyBatis是一个不完全的ORM框架,MyBatis也可以进行对象关系映射,但是还是需要手动写SQL语句。Hibernate对JDBC的封装比较深,是一个完全的优秀的ORM框架,完全实现了Java对象到关系的映射,SQL不需要手动编写。

Mybatis框架

    Mybatis配置
    

    1. SqlMapConfig.xml是MyBatis的核心配置文件,配置了数据源(连接池)、事务mapper.xml是MyBatis的映射文件。
    2. SqlSessionFactory 会话工厂,用户生产会话SqlSession。
    3. SqlSession 会话,是一个面向用户的门面接口,用于操作数据库(CRUD)
    4. Executor执行器,SqlSession内部通过Executor操作数据库,Executor需要使用Mapped Statement中封装的数据信息来操作数据库。
    5. Mapped Statement是MyBatis一个底层封装对象,封装了SQL语句、传入SQL语句的参数,将SQL查询结果映射成Java对象。

Mybatis入门程序

    1. 添加jar包 下载地址:链接:http://pan.baidu.com/s/1mgtFYxa 密码:vq10 (包括源码)
        核心jar包是:mybatis-3.2.8.jar
        依赖jar包在lib目录下
        还需要自己添加数据库的jar包
        创建一个Java Project (下图是最终项目图)
        
    2. log4j.properties日志文件(主要用户控制台打印log)
        添加Source Folder :config,并且创建log4j.properties
        直接使用官网配置,只是改成DEBUG模式    
1
2
3
4
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

    3. 创建SqlMapConfig.xml配置文件
        在config文件夹下创建SqlMapConfig.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
<configuration>
    <!-- 和spring整合后environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
 
</configuration>

    4. 创建po类,User 在package com.hqu.model下 ,并创建数据库和对应表插入测试数据
        目标:将sql查询结果映射成Java对象,po类的属性和user表字段对应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.hqu.model;
 
import java.sql.Date;
 
public class User {
    private int id;
    private String username;
    private String sex;
    private Date birthday;
    private String address;
    private String detail;
    private float score;
 
    // getter and setter .. 
}

    5. 编写User.xml(mapper.xml文件 ) 在config创建文件夹sqlmap并创建User.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="test">
 
    <!-- 查询用户信息
    select :将select标签内容称为statement
    id:是在user.xml的唯一标识,statement的id
    parmeterType:指向sql(向statement中)中传入参数的类型
    #{}:表示一个点位符,{}中的id表示传入变量名,当传入单个值{}中的变量可以随意
    resultType:将sql查询结果集映射成java对象的类型 -->
    <select id="findUserByName" parameterType="string" resultType="com.hqu.model.User">
        select * from User where username = #{id}
    </select>
 
    <insert id="insertUser" parameterType="com.hqu.model.User">
        insert into
        user(username,birthday,sex,address,detail,score)
        values (#{username},#{birthday},#{sex},#{address},#{detail},#{score})
    </insert>
</mapper>

6.将User.xml在SqlMapConfig.xml配置

1
2
3
4
5
6
7
<configuration>
    ...
    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="sqlmap/User.xml" />
    </mappers>
</configuration>
7. Mybatis查询程序
    新建类测试测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class MybatisTest {
 
    SqlSession sqlSession = null;
 
    @Before
    public void before() throws IOException {
     
        String resource = "SqlMapConfig.xml"// mybatis的配置文件
 
        InputStream is = Resources.getResourceAsStream(resource);
 
        // 创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
 
        sqlSession = sqlSessionFactory.openSession(); // 从会话工厂中的到会话
    }
 
    @After
    public void after() {
        sqlSession.close(); // 释放资源
    }
 
    @Test
    public void testSelect() {
        // 通过sqlSession操作数据库
        // 第一个参数:user.xml定义的statement的id
        // 第二个参数:输入参数
        User user = sqlSession.selectOne("test.findUserByName""jerome");
        System.out.println(user);
    }
     
    @Test
    public void testInsert() {
 
        User user = new User();
        user.setUsername("jelly");
        user.setSex("女");
        user.setAddress("深圳");
        user.setScore(12f);
 
        sqlSession.insert("test.insertUser", user);
         
        sqlSession.commit(); // 提交事务
    }
 
}
结束。
code链接:http://pan.baidu.com/s/1sjlzpAP 密码:exmy

Mybatis是如何解决JDBC的问题

    1. 将SQL语句硬编码到Java代码,不利于系统维护。
        设想如何解决:将SQL单独抽取出来,在配置文件(xml方式、properties文件)进行配置。
        在mybatis的映射文件(如:User.xml)配置sql语句。
    2. 数据库连接不能重复利用,对数据库资源是一中浪费。
        设想如何解决:使用数据库连接池管理数据库连接。
        在SqlMapConfig.xml下的environments节点配置了连接池
    3. 向Statement设置参数时,对于参数的位置通过硬编码指定,不利于系统维护。(如preparedStatement.setString(1,"jerome"))
        设想如何解决:是否能够自动将Java对象的值设置到Statement。
         在User.xml中通过paramenterType,输入参数的类型,在sql语句通过#{}表示占位符号,{}写的是po的属性名,完成自动将java对象映射到sql语句中。
    4. 遍历结果集,resultSet.getString硬编码指定列名称。(如:resultSet.getString("id"))
        设想如何解决:能否自动将SQL查询结果集转成Java对象
        User user = sqlSession.selectOne("test.findUserByName", "jerome");

参考传智播客公开课:链接:http://pan.baidu.com/s/1bnbH2qj 密码:9f30
后期详细深入视频  链接:http://pan.baidu.com/s/1qWFTzQ0 密码:jqqx (资料暂时就这些了)
参考文档:
1. http://mybatis.org/mybatis-3/zh/index.html (MyBatis官方文档)
对应的pdf(英文):链接:http://pan.baidu.com/s/1pJrL42v 密码:2yq0
对应的pdf(中文):链接:http://pan.baidu.com/s/1pJqzBDp 密码:dwhf

MyBatis - 介绍、简单入门程序的更多相关文章

  1. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明

    1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...

  2. JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别

    1. 学习计划   第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) Sp ...

  3. 【mybatis深度历险系列】mybatis的框架原理+入门程序解析

    在前面的博文中,小编介绍了springmvc的相关知识点,在今天这篇博文中,小编将介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和 ...

  4. springmvc(一) springmvc框架原理分析和简单入门程序

    springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...

  5. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  6. springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  7. mybatis由浅入深day01_4入门程序_4.6根据用户id(主键)查询用户信息

    4 入门程序 4.1 需求 根据用户id(主键)查询用户信息 根据用户名称模糊查询用户信息 添加用户 删除 用户 更新用户 4.2 环境 java环境:jdk1.7.0_72 eclipse:indi ...

  8. MyBatis(1)-简单入门

    简介 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.My ...

  9. Mybatis(一)Mybatis简介与入门程序

    Mybatis简介: MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建 ...

随机推荐

  1. centos6 安装redis-4.0.9

    从redis官网下载Linux redis4.0.9版本,我下载的redis-4.0.9.tar.gz(目前最新稳定版),下载到/usr/local/src目录,如果没有就mkdir创建一个. 下载链 ...

  2. 小白到大神,Python 密集知识点汇总

    Python 基础 1. 变量 你可以把变量想象成一个用来存储值的单词.我们看个例子. Python 中定义一个变量并为它赋值是很容易的.假如你想存储数字 1 到变量 "one" ...

  3. Rails里rake db:migrate出现undefined method last_comment问题的解决

    这个问题和特定的rake版本有关,因为Rails要使用rake的last_comment方法在较新版本的rake中已被废弃,所以很多人卸载了新版本的rake去安装旧版本的rake. 这样也能解决问题, ...

  4. 远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比

    总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到 ...

  5. CDH集群安装&测试总结

    0.绪论 之前完全没有接触过大数据相关的东西,都是书上啊,媒体上各种吹嘘啊,我对大数据,集群啊,分布式计算等等概念真是高山仰止,充满了仰望之情,觉得这些东西是这样的: 当我搭建的过程中,发现这些东西是 ...

  6. Android开发之手把手教你写ButterKnife框架(三)

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了, ...

  7. python 函数运算先于单目运算

    >>> def f(): >>> -f() - 初一看,-f()比较陌生的样子,细想,这是合理的

  8. Apache shiro集群实现 (八) web集群时session同步的3种方法

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  9. Dynamics CRM2016 Web API之Use custom FetchXML

    CRM2016中新增的web api支持fetch xml了,之前使用FetchXML的场景是在后天代码中通过组织服务的retrieve multiple方法,但实际的应用效果有多大,还需要在实际的项 ...

  10. [apache2.4]configure: error: APR not found. Please read the documentation.

    apache2.4 安装出现如下错误 ``` [lzz@localhost httpd-2.4.10]$ ./configure  checking for chosen layout... Apac ...