zoukankan      html  css  js  c++  java
  • 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));
        }
    }

    五、效果展示:

    如有帮助,请关注!

  • 相关阅读:
    SpringMVC—对Ajax的处理(含 JSON 类型)(2)
    md5加密(1)
    js生成邀请码(2)
    SpringMVC---依赖注入与面向切面
    初识json
    java集合类(2)
    springmvc与struts2的区别
    模拟14
    NOIP模拟13
    NOIP模拟12
  • 原文地址:https://www.cnblogs.com/zjl6/p/6962211.html
Copyright © 2011-2022 走看看