zoukankan      html  css  js  c++  java
  • mybatis(一)环境的搭建

    项目模型:

    一、创建一个web项目ssm001

    1、1准备数据

    在数据创建表并添加数据

    user表:

    dept表:

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : ybt
    Source Server Version : 50137
    Source Host           : 127.0.0.1:3306
    Source Database       : ssm001
    
    Target Server Type    : MYSQL
    Target Server Version : 50137
    File Encoding         : 65001
    
    Date: 2016-11-16 22:35:47
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for dept
    -- ----------------------------
    DROP TABLE IF EXISTS `dept`;
    CREATE TABLE `dept` (
      `DEPTNO` decimal(4,0) DEFAULT NULL,
      `DNAME` varchar(14) DEFAULT NULL,
      `LOC` varchar(13) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of dept
    -- ----------------------------
    INSERT INTO `dept` VALUES ('10', 'ACCOUNTING', 'NEW YORK');
    INSERT INTO `dept` VALUES ('20', 'RESEARCH', 'DALLAS');
    INSERT INTO `dept` VALUES ('30', 'SALES', 'CHICAGO');
    INSERT INTO `dept` VALUES ('40', 'OPERATIONS', 'BOSTON');

    emp表:

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : ybt
    Source Server Version : 50137
    Source Host           : 127.0.0.1:3306
    Source Database       : ssm001
    
    Target Server Type    : MYSQL
    Target Server Version : 50137
    File Encoding         : 65001
    
    Date: 2016-11-16 22:36:14
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for emp
    -- ----------------------------
    DROP TABLE IF EXISTS `emp`;
    CREATE TABLE `emp` (
      `EMPNO` decimal(4,0) NOT NULL,
      `ENAME` varchar(10) DEFAULT NULL,
      `JOB` varchar(9) DEFAULT NULL,
      `MGR` decimal(4,0) DEFAULT NULL,
      `HIREDATE` date DEFAULT NULL,
      `SAL` decimal(7,2) DEFAULT NULL,
      `COMM` decimal(7,2) DEFAULT NULL,
      `DEPNO` decimal(4,0) DEFAULT NULL,
      PRIMARY KEY (`EMPNO`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of emp
    -- ----------------------------
    INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '1800.00', null, '20');
    INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600.00', '300.00', '30');
    INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250.00', '500.00', '30');
    INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975.00', null, '20');
    INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250.00', '1400.00', '30');
    INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850.00', null, '30');
    INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450.00', null, '10');
    INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000.00', null, '10');
    INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500.00', '0.00', '30');
    INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950.00', null, '30');
    INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000.00', null, '20');
    INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300.00', null, '10');
    INSERT INTO `emp` VALUES ('7987', 'KING', null, null, null, null, null, null);

    1、2在web-INF下lib加入mybatis所需jar包:

    1、3在项目src下配置mybatis配置文件config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-config.dtd">
    <!--    configuration根标签             -->
    <configuration>
        <!--    二、(1)定义实体bean名和数据库列名相对应  type:实体的路径   alias:实体的别名         -->
        <typeAliases>
            <typeAlias type="com.ckx.entity.User" alias="User" />
        </typeAliases>
        
        <!--    一、    配置环境信息          -->
        <environments default="development">
            <environment id="development">
                <!--    指定事务管理机制          -->
                <transactionManager type="JDBC"></transactionManager>
                <!--    配置数据源   POOLED: 连接池         -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/ssm001?useUnicode=true&amp;characterEncoding=utf8" />
                    <property name="username" value="root" />
                    <property name="password" value="123456" />
                </dataSource>
            </environment> 
        </environments>
        <!--     二、 (2)引入关系映射文件!!!这里有严格顺序!不能放在数据源配置前    -->
        <mappers>
            <mapper resource="com/ckx/entityMapper/User.xml" />
        </mappers>
        
    
    </configuration>

    请注意注释  “二、 (2)引入关系映射文件!!!这里有严格顺序!不能放在数据源配置前 ”,lz当时人为一个映射地址放在那里斗舞所谓,

    结果报错,莫名其妙的找了好久的错,关于原因请参考:http://www.cnblogs.com/ckxlovejava/p/6059960.html

    二、创建实体与映射文件:

    2、1创建和数据库对应的实体user类,注意变量和数据库字段的对应

    package com.ckx.entity;
    
    public class User {
        private int userId;
        private String userName;
        private String passWord;
        
        
        public int getUserId() {
            return userId;
        }
        public void setUserId(int userId) {
            this.userId = userId;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getPassWord() {
            return passWord;
        }
        public void setPassWord(String passWord) {
            this.passWord = passWord;
        }
    
    }

    2.2配置与实体相对的映射文件用于存放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">
    <mapper namespace="com.ckx.entityMapper.User">
        
        <select id="selectRoolByuserId" parameterType="int" resultType="User">
            select * from ckx_user where UserId=#{UserId}
        </select>
        
        
    </mapper>

    三、测试

    3.1创建测试类UserlTest.java:

    package com.ckx.test;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.ckx.entity.User;
    
    public class UserlTest {
        //获取org.apache.ibatis.session.SqlSessionFactory很重要
        static SqlSessionFactory sessionFactory;
        static Reader reader;
        public User user;
        
        static{
            try {
                //获取org.apache.ibatis.io.Resources从config.xml的读入流
                reader= Resources.getResourceAsReader("config.xml");
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        //从数据库读取一条信息
        private void selectRoolByuserId() {
            SqlSession session = sessionFactory.openSession();
            user= session.selectOne("com.ckx.entityMapper.User.selectRoolByuserId",1 );
            System.out.println(user.getUserName());
        }
        
        
        public static void main(String[] args) {
            UserlTest ut = new UserlTest();
            ut.selectRoolByuserId();
    
        }
    
    }

    运行:ckx

    综合说明:

    3.2查询一个结果集,例如:查询一个部门下的所有员工:

    在emp表配置:

    <!--    定义结果集 type:指定数据类型 id:标识结果集  -->
        <resultMap type="Emp" id="empList">
            <!--        column:数据库字段别名  property:实体bean属性名称-->
            <result column="EMPNO" property="empno" />
            <result column="ENAME" property="ename" />
            <result column="JOB" property="job" />
            <result column="MGR" property="mgr" />
            <result column="HIREDATE" property="hiredate" />
            <result column="SAL" property="sal" />
            <result column="COMM" property="comm" />
            <result column="DEPNO" property="depno" />
        </resultMap>
    
        
        <!--通过部门编号查询该部门的员工信息 这里返回的是一个结果集-->
        <select id="selectEmps" parameterType="int" resultMap ="empList">
            select * from emp where depno=#{depno}
        </select>

    因为我们查询的是一个部门下的所有人,因此查询返回结果我们用一个emplist,但是程勋不知道这个emplist是什么?这时候我们就要对他进行定义,

    定义一个返回resultMap,并把sql查询的返回结果emplist赋给resultMap做ID,当然resultMap里放的数据肯定是实体emp,在resultMap里我们在对

    数据库和实体进行一一指定,column:数据库字段别名 property:实体bean属性名称。

    定义一个测试类进行测试:

    package com.ckx.test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.ckx.entity.Emp;
    import com.ckx.entity.User;
    
    public class Emptest {
        //获取org.apache.ibatis.session.SqlSessionFactory很重要
        static SqlSessionFactory sessionFactory;
        static Reader reader;
            
        static{
            try {
                //获取org.apache.ibatis.io.Resources从config.xml的读入流
                reader= Resources.getResourceAsReader("config.xml");
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }//从数据库读取一个list集合    
        public void selectEmps(){
            SqlSession session = sessionFactory.openSession();
            List<Emp> emps = session.selectList("com.ckx.entityMapper.Emp.selectEmps", 20);
            //迭代器遍历
            Iterator it = emps.iterator();
            while (it.hasNext()) {
                Emp e= (Emp) it.next();
                System.out.println(e.getEname());;
            }
            //FOREACH循环迭代
            for (Emp emp : emps) {
                System.out.println(emp.getEname());
            }
        }public static void main(String[] args) {
            Emptest et = new Emptest();
            et.selectEmps();
        }
    
    }

    测试结果(文中用了两种遍历方式):

    SMITH
    JONES
    FORD
    SMITH
    JONES
    FORD

    完成。

  • 相关阅读:
    [转载]windows进程中的内存结构
    RTTI和4个强制转换运算符
    由于应用程序配置不正确,程序未能启动
    光照
    服务器数据同步
    SAP
    PHP输入流php://input
    五款常用mysql slow log分析工具的比较
    开发搜索引擎–PHP中文分词
    大型网站调试工具之一(php性能优化分析工具XDebug)
  • 原文地址:https://www.cnblogs.com/ckxlovejava/p/6060542.html
Copyright © 2011-2022 走看看