zoukankan      html  css  js  c++  java
  • MyBatis学习总结(一)——MyBatis快速入门

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

    二、mybatis快速入门

    2.1、准备开发环境

     1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:

      

    2、添加相应的jar包

      【mybatis

             mybatis-3.1.1.jar

      【MYSQL驱动包】
        mysql-connector-java-5.1.7-bin.jar

       

    3、创建数据库和表,针对MySQL数据库

      SQL脚本如下:

    1 create database mybatis;
    2 use mybatis;
    3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
    4 INSERT INTO users(NAME, age) VALUES('sun', 24);

      将SQL脚本在MySQL数据库中执行,完成创建数据库和表的操作,如下:

      

      到此,前期的开发环境准备工作全部完成。

    2.2、使用MyBatis查询表中的数据

      1、添加Mybatis的配置文件conf.xml

      在src目录下创建一个mybatis.xml文件,如下图所示: 

     mybatis.xml文件中的内容如下:

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
     3 <configuration>
     4     <environments default="development">
     5         <environment id="development">
     6             <transactionManager type="JDBC" />
     7             <!-- 配置数据库连接信息 -->
     8             <dataSource type="POOLED">
     9                 <property name="driver" value="com.mysql.jdbc.Driver" />
    10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
    11                 <property name="username" value="root" />
    12                 <property name="password" value="1234" />
    13             </dataSource>
    14         </environment>
    15     </environments>
    16     
    17 </configuration>
    复制代码

      2、定义表所对应的实体类,如下图所示:

      

      User类的代码如下:

     
    复制代码
    package sun.domain;
    
    public class UserDao {
        
        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;
        }
        
        @Override
        public String toString() {
            // TODO Auto-generated method stub
            return "User_id = " + id  +"name = " + name + "age=" + age;
        }
    
    }

      3、定义操作users表的sql映射文件User.xml

      创建一个me.gacl.mapping包,专门用于存放sql映射文件,在包中创建一个User.xml文件,如下图所示:

      

      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">
      <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
      例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
       -->
     <mapper namespace="sun.domain.UserDao">
         <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
         使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
         resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
         User类就是users表所对应的实体类
         -->
         <!-- 
             根据id查询得到一个user对象
          -->
         <select id="getUser" parameterType="int" 
             resultType="sun.domain.UserDao">
             select * from users where id=#{id}
         </select>
     </mapper>
    复制代码

      4、在mybayis.xml文件中注册User.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="1234" />
                 </dataSource>
             </environment>
         </environments>
             
         <mappers>
             <!-- 注册user.xml文件, 
             <mapper resource="sun/mapping/User.xml"/>
        </mappers>
         
     </configuration>
    复制代码

      5、编写测试代码:执行定义的select语句

      创建一个Test类,编写如下的测试代码:

    复制代码

    package sun.test;

    import java.io.InputStream;

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

    import sun.domain.UserDao;

    public class Demo01 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    //mybatis的配置文件
    String resource = "mybatis.xml";
    //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
    InputStream is = Demo01.class.getClassLoader().getResourceAsStream(resource);
    //构建sqlSession的工厂
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
    //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
    //Reader reader = Resources.getResourceAsReader(resource);
    //构建sqlSession的工厂
    //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    //创建能执行映射文件中sql的sqlSession
    SqlSession session = sessionFactory.openSession();
    /**
    * 映射sql的标识字符串,
    * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
    * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
    */
    String statement = "getUser";//映射sql的标识字符串
    //执行查询返回一个唯一user对象的sql
    UserDao user = session.selectOne(statement, 1);
    System.out.println(user.toString());
    }

    }

      执行结果如下:

      

      可以看到,数据库中的记录已经成功查询出来了。

    源码:http://pan.baidu.com/s/1dFyOysh

  • 相关阅读:
    JWT验证
    SQLite报错: no such column:StamoRule(表名)
    .Net Core 程序报错 在上一个操作完成之前,在此上下文上启动了第二个操作。
    接口请求报错 504 Gateway Time-out
    未处理的异常:system.io.file load exception:无法加载文件或程序集“ 。。。。 找到的程序集的清单定义与程序集引用不匹配。
    好多年没回到这个园子
    模拟webpack 实现自己的打包工具
    微信小程序迁移到头条小程序工具
    手机端图片懒加载
    react系列一,react虚拟dom如何转成真实的dom
  • 原文地址:https://www.cnblogs.com/sunxun/p/5331083.html
Copyright © 2011-2022 走看看