MyBatis基础——MyBatis初探——MyBatis快速学习

Posted --清风徐来--

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis基础——MyBatis初探——MyBatis快速学习相关的知识,希望对你有一定的参考价值。

一、Mybatis介绍:

MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。(简单的说:替代jdbc,使数据持久化)

二、Mybatis——jar包:

下载地址:http://download.csdn.net/download/eson_15/9542081

三、代码结构图及详解:

注:UserMapper.java为自定义接口

  UserMapper.xml为自定义接口对应的映射文件(两个名字必须相同)

  Test为测试类,WEB应用可以直接在Servlet中调用方法

  User为实体类

  UserService为封装的操作类,便于开发项目,调用方法

  SqlFactory为工具类,读取mybatis配置文件

  connection.xml为mybatis配置文件,主要写连接数据库的代码和引入映射文件的代码

四、代码展示:

4.1  SQL代码:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;


INSERT INTO `users` VALUES (\'1\', \'张三\', \'27\');
INSERT INTO `users` VALUES (\'2\', \'李四\', \'27\');

 

4.2  connection.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>
     <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" />
                 <property name="username" value="root" />
                 <property name="password" value="scme" />
             </dataSource>
         </environment>
     </environments>
     
     <mappers>
         <!-- 加载userMapper.xml映射文件,UserMapper.xml位于com.scme.dao这个包下,所以resource写成com/scme/dao/userMapping.xml-->
         <mapper resource="com/scme/dao/UserMapper.xml"/>
     </mappers>
     
</configuration>

 

4.3  SqlFactory代码:

package com.scme.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.scme.dao.UserMapper;

public class SqlFactory {

    private static  SqlSessionFactory sqlSessionFactory;
    static{
        //mybatis的配置文件的名字
        String fileName="connection.xml";
        //使用输入流读取mybatis的配置文件(它也加载关联的映射文件)
        InputStream inputStream;
        try {
            inputStream = Resources.getResourceAsStream(fileName);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    //返回sqlSessionFactory对象
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}


 4.4  UserMapper.java代码:

package com.scme.dao;

import java.util.List;

import com.scme.pojo.User;

public interface UserMapper {

    //根据id查询
    public List<User> queryById(int id);
}

 4.5  UserMapper.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指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 例如namespace="com.scme.dao.userMapper"就是com.scme.dao(包名)+userMapper(userMapper.xml文件去除后缀)
 -->
<mapper namespace="com.scme.dao.UserMapper">
        <!--根据id查询得到一个user对象-->
        <select id="queryById" resultType="com.scme.pojo.User" parameterType="int">
                select * from users where id=#{id}
        </select>
        <!--注: 在select标签中编写\'查询\'的SQL语句,同理插入为\'insert标签\',修改为\'update标签\',\'删除未delete标签\',
         设置select标签的id属性为queryById,id属性值必须是唯一的,不能够重复,后面会利用id匹配查询方法
           使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
          resultType="com.scme.pojo.User"就表示将查询结果封装成一个User类的对象返回
          User类就是users表所对应的实体类-->
        
</mapper>

 4.6  UserService代码:

package com.scme.service;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.scme.dao.UserMapper;
import com.scme.pojo.User;
import com.scme.utils.SqlFactory;

public class UserService {
    //获取SqlSessionFactory对象
    private SqlSessionFactory  sqlSessionFactory;
    public UserService() {
                sqlSessionFactory=SqlFactory.getSqlSessionFactory();
    }
    
    //封装queryByID方法
    public List<User> queryByID(int id){
        //创建能执行映射文件中sql的sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取定义查询方法的接口
        UserMapper userDao=sqlSession.getMapper(UserMapper.class);
        //调用根据id查询方法
        //虽然在userMapping.xml里面,resultType="com.scme.pojo.User",即返回值类型为User对象,但这里可以用list泛型集合接收
        List<User> list=userDao.queryById(id);
        sqlSession.close();
        return list;
    }
    
}

4.7  User代码:

package com.scme.pojo;

public class User {
    //实体类的属性和表的字段名称一一对应
    private int id;
    private String name;
    private int age;
    
     public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }


    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
     }
}

4.8  Test代码:

package com.scme.lunch;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.scme.pojo.User;
import com.scme.service.UserService;
import com.scme.utils.SqlFactory;

public class Test {
    public static void main(String[] args) {
        UserService service=new UserService();
        List<User> list=service.queryByID(1);
        System.out.println(list.get(0));
    }
}

五、效果展示:

 

如有帮助,请关注!

以上是关于MyBatis基础——MyBatis初探——MyBatis快速学习的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis结果映射与MyBatis缓存初探学习记录

09spring+mybatis

Mybatis报错:org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.me.myb

MyBatis源码分析 : 环境准备

Mybatis初探索(Mybatis执行流程)

初探MyBatis之HelloWorld