zoukankan      html  css  js  c++  java
  • MyBatis学习(一)简单入门程序

    MyBatis入门学习

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

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

    架构图:

    1、 mybatis配置   

    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

    2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

    3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

    4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

    5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sqlid即是Mapped statementid

    6、 Mapped Statementsql执行输入参数进行定义,包括HashMap、基本类型、pojoExecutor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

    7、 Mapped Statementsql执行输出结果进行定义,包括HashMap、基本类型、pojoExecutor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

    入门案例:  

         mybaits的代码由github.com管理

    下载地址:https://github.com/mybatis/mybatis-3/releases

    1.1.1. 创建java工程

    1.1.2. 加入jar

    1.1.3. 加入配置文件

          如下图创建资源文件夹config,加入log4j.propertiesSqlMapConfig.xml配置文件

          

     

    1.1.4. log4j.properties(用来输出日志)

     

    config下创建log4j.properties如下:

    # Global logging configuration

    log4j.rootLogger=DEBUG, stdout

    # Console output...

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

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    1.1.5. SqlMapConfig.xml (SqlMapConfig.xmlmybatis核心配置文件,配置文件内容为数据源、事务管理。)

    config下创建SqlMapConfig.xml,如下:

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE configuration

    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

    <configuration>

    <!-- 和spring整合后 environments配置将废除 -->

    <environments default="development">

    <environment id="development">

    <!-- 使用jdbc事务管理 -->

    <transactionManager type="JDBC" />

    <!-- 数据库连接池 -->

    <dataSource type="POOLED">

    <property name="driver" value="com.mysql.jdbc.Driver" />

    <property name="url"

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

    <property name="username" value="root" />

    <property name="password" value="root" />

    </dataSource>

    </environment>

    </environments>

    </configuration>

    1.1.6. 创建pojo

    pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应,

     User.java如下:

    Public class User {

    private Integer id;

    private String username;// 用户姓名

    private String sex;// 性别

    private Date birthday;// 生日

    private String address;// 地址

    get/set……

     

     

    1.1.7. sql映射文件

    config下的sqlmap目录下创建sql映射文件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">

    <!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->

    <mapper namespace="test">

    </mapper>

    1.1.7. 第七步:加载映射文件

    mybatis框架需要加载Mapper.xml映射文件

    users.xml添加在SqlMapConfig.xml,如下:

    1.1.8. 映射文件:

    user.xml中添加select标签,编写sql

    <?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">

    <!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->

    <mapper namespace="test">

     <!-- id:statement的id 或者叫做sqlid-->

    <!-- parameterType:声明输入参数的类型 -->

    <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->

    <!-- #{}:输入参数的占位符,相当于jdbc的? -->

    <select id="queryUserById" parameterType="int"

    resultType="cn.itcast.mybatis.pojo.User">

    SELECT * FROM `user` WHERE id  = #{id}

    </select>

     </mapper>

    1.1.9. 测试程序:

    测试程序步骤:

     1. 创建SqlSessionFactoryBuilder对象

     2. 加载SqlMapConfig.xml配置文件

     3. 创建SqlSessionFactory对象

     4. 创建SqlSession对象

     5. 执行SqlSession对象执行查询,获取结果User

     6. 打印结果

     7. 释放资源

    MybatisTest编写测试程序如下:

    public class MybatisTest {

    private SqlSessionFactory sqlSessionFactory = null;

     @Before

    public void init() throws Exception {

    // 1. 创建SqlSessionFactoryBuilder对象

    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

     // 2. 加载SqlMapConfig.xml配置文件

    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");

     // 3. 创建SqlSessionFactory对象

    this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

    }

     @Test

    public void testQueryUserById() throws Exception {

    // 4. 创建SqlSession对象

    SqlSession sqlSession = sqlSessionFactory.openSession();

     // 5. 执行SqlSession对象执行查询,获取结果User

    // 第一个参数是User.xml的statement的id,第二个参数是执行sql需要的参数;

    Object user = sqlSession.selectOne("queryUserById", 1);

     // 6. 打印结果

    System.out.println(user);

     // 7. 释放资源

    sqlSession.close();

    }

    }

     运行结果:

  • 相关阅读:
    征战蓝桥 —— 2017年第八届 —— C/C++A组第7题——正则问题
    征战蓝桥 —— 2017年第八届 —— C/C++A组第7题——正则问题
    征战蓝桥 —— 2017年第八届 —— C/C++A组第7题——正则问题
    征战蓝桥 —— 2017年第八届 —— C/C++A组第8题——包子凑数
    征战蓝桥 —— 2017年第八届 —— C/C++A组第8题——包子凑数
    征战蓝桥 —— 2017年第八届 —— C/C++A组第8题——包子凑数
    征战蓝桥 —— 2017年第八届 —— C/C++A组第9题——分巧克力
    征战蓝桥 —— 2017年第八届 —— C/C++A组第9题——分巧克力
    征战蓝桥 —— 2017年第八届 —— C/C++A组第9题——分巧克力
    征战蓝桥 —— 2017年第八届 —— C/C++A组第10题——油漆面积
  • 原文地址:https://www.cnblogs.com/sjzxs/p/9477017.html
Copyright © 2011-2022 走看看