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. git 学习笔记(常用命令)

    1.新建一个文件,如果没有使用git add 命令将它提交到暂存区,那么这个文件就还没有被跟踪. 2.通过配置.gitignore文件可以指定要忽略的文件,被忽略的文件夹是不会被提交到暂存区的.所以这 ...

  2. MacOS下安装rvm的几点注意

    如果用以下链接无法下载的话: curl -sSL https://get.rvm.io | bash -s stable #或者 curl -L https://rvm.io | bash -s st ...

  3. OpenResty 执行阶段的概念和用途

    主要还是 Nginx 的执行阶段知识了,都是因为 OR 才会那么深刻, 它有些自己的阶段. 主要还是参照 春哥的 Nginx 教程 请多读几遍,如果不清楚nginx的执行阶段就无法充分利用 openr ...

  4. Dynamics CRM2016 Web API之获取查找字段的text及选项集的text

    本篇再来介绍个web api的功能,关于lookup的text这里只是略带,因为有expand,现有的web api就能实现,主要提的是选项集的text,我们通过基本的查询api查出来的字段值只带有v ...

  5. Android通知Notification全面剖析

    通知 通知是您可以在应用的常规 UI 外部向用户显示的消息.当您告知系统发出通知时,它将先以图标的形式显示在通知区域中.用户可以打开抽屉式通知栏查看通知的详细信息. 通知区域和抽屉式通知栏均是由系统控 ...

  6. Android开发使用Java8新特性

    Android 支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异).本文介绍您可以使用的新语言功能.如何正确配置项目以使用这些功能,以及您可能遇到的任何已知问题 ...

  7. Maven坐标机制

    Maven为所有的项目引入了坐标,基于坐标机制可以唯一定位一个项目. 坐标详解 以spring-core-2.5.6.jar的坐标定义为例,说明组成坐标的所有元素:groupId.artifactId ...

  8. 如何向android studio中导入第三方类库

    下面分两种情况介绍一下如何导入第三方类库. 1.对于jar的类库,直接复制进libs目录,然后把jar复制进去,然后File->Project Structure,然后选中主module的名称, ...

  9. SQL 数据库语言分析总结(三)

    这次介绍通过mysql-WorkBench这个工具来管理操作数据库. 创建和删除数据库 1.点击创建数据库按钮 2.选中后右键,出现drop schema一项,这个用来删除. 设置默认数据库 选中右键 ...

  10. 6.1、Android Studio的Android Monitor概览

    Android Monitor帮助你监测你的应用的性能,以帮助你合理的进行优化,调试,提升.如下功能: 1. Log消息,系统定义的或者开发者定义的. 2. 内存,CPU和GPU使用情况. 3. 网络 ...